평생 배우는 개발자

컴퓨터 메모리 관리의 핵심: Stack, Virtual Memory, 그리고 Page Fault의 유기적 관계 본문

개발면접준비

컴퓨터 메모리 관리의 핵심: Stack, Virtual Memory, 그리고 Page Fault의 유기적 관계

개발지식 블로그 2025. 1. 6. 16:39

프로세스 내에는 가상메모리가 존재한다.

이 메모리는 크게 네 가지 영역으로 나뉘는데 코드, 데이터, 힙, 스택 영역으로 나뉜다.

여기서 스택영역은 가상 메모리 상에서 페이지(page)단위로 관리된다.

스택에서 새로운 함수 호출이나 지역 변수가 할당되면 가상 메모리 상에서 해당되는 페이지가 사용된다. 만약 이 스택이 확장되어서 새로운 페이지가 필요로 하게 된다면, 운영체제는 페이지폴트(page fault)를 통해서 새로운 페이지를 할당하고 물리적 메모리에 로드한다.

 

위 내용에서 '가상 메모리'에서 과정이 진행된다고 언급하였는데, 우리가 함수 호출이나 지역변수를 선언하고 이것이 스택공간에 저장될 때 바로 우리의 물리적 메모리인 RAM에 저장되는 것이 아닌 virtual memory로서 저장이 된 이후에 다른 과정이 진행된다.

언제 그러한 과정이 진행될까

 

사용되지 않는 페이지는 디스크로 이동되며 필요할 때만 다시 물리적 메모리로 가져온다.

이때 page fault가 발생한다. 프로세스가 접근하려는 페이지가 물리적 메모리에 없을 때 발생하는 것이다.

이때 virtual memory는 page fault를 처리하는 메커니즘을 통해 가상 메모리를 물리적 메모리처럼 동작하게 만든다

서론

컴퓨터 시스템에서 메모리 관리는 프로세스가 효율적이고 안정적으로 실행될 수 있도록 돕는 중요한 요소입니다. 이 과정에서 Stack 공간, Virtual Memory, 그리고 Page Fault는 서로 밀접한 관계를 가지며, 각각 독립적인 역할을 수행하면서도 상호작용하여 시스템 성능에 영향을 미칩니다. 이 글에서는 이 세 가지 개념의 연결성을 중심으로 메모리 관리의 동작 원리를 살펴보고자 합니다.


본론

프로세스 내의 가상 메모리는 크게 코드, 데이터, 힙, 스택 영역으로 나뉩니다. 이 중 Stack은 함수 호출과 지역 변수 저장을 담당하는 메모리 영역으로, 프로세스 실행의 핵심적인 역할을 합니다. 프로세스가 실행되면서 함수가 호출될 때마다 새로운 스택 프레임(Stack Frame)이 생성되며, 이 프레임에는 매개변수, 지역 변수, 반환 주소 등이 저장됩니다. 스택은 프로세스마다 독립적으로 관리되는 가상 메모리 공간 내에 위치하며, 함수 호출이나 실행 상황에 따라 동적으로 확장될 수 있습니다.

 

이처럼 Stack이 위치하는 가상 메모리는 운영체제가 프로세스에 제공하는 독립적인 주소 공간입니다. 가상 메모리는 실제 물리적 메모리 크기에 구애받지 않고 프로그램이 실행될 수 있도록 돕습니다. 이는 페이지 단위로 메모리를 관리하는 방식으로 구현되며,

 

가상 메모리의 주소는 CPU가 특정 가상 주소에 접근하려고 할 때, 먼저 가상 주소에서 페이지 번호를 추출하여 페이지 테이블에서 조회하는 과정을 거칩니다. 페이지 테이블은 해당 페이지 번호에 대응하는 물리적 메모리 주소(프레임 번호)를 반환하며, CPU는 이 정보를 이용해 실제 데이터를 물리적 메모리에서 읽거나 씁니다. 이러한 과정을 통해 가상 메모리의 주소는 물리적 메모리 주소로 변환됩니다.

 

이 과정에서 Stack이 확장되어 새로운 페이지가 필요할 경우, 운영체제는 페이지를 물리적 메모리에 로드합니다. 그러나 물리적 메모리에 필요한 페이지가 존재하지 않을 때 발생하는 Page Fault는 메모리 관리의 핵심 메커니즘 중 하나로 작동합니다.

 

Page Fault는 디스크에서 필요한 페이지를 가져오는 과정을 포함하며, 이를 통해 Stack이나 기타 메모리 공간이 동적으로 확장될 수 있습니다.

예를 들어, 함수 호출이 깊어지거나 재귀가 발생하여 Stack의 크기가 증가할 때, Page Fault는 새롭게 요구되는 페이지를 디스크에서 로드하여 가상 메모리와 물리적 메모리를 동기화합니다. 이러한 과정은 가상 메모리가 제공하는 유연성을 가능하게 하지만, 동시에 성능 저하를 유발할 수도 있습니다. 디스크 I/O가 빈번히 발생하면 시스템 전체 성능이 떨어지는 스래싱(Thrashing) 현상이 발생할 수 있기 때문입니다.

그럼에도 불구하고 Page Fault는 메모리 관리의 필수적인 요소입니다. 특히 Stack이 확장되면서 발생하는 메모리 부족 문제를 해결하며, 시스템의 안정성을 유지하는 데 중요한 역할을 합니다.

다만, Stack이 과도하게 확장되면 가상 메모리 내 다른 영역과 충돌하여 Stack Overflow가 발생할 수 있으며, 이는 시스템의 물리적 메모리 한계와 운영체제의 설정에 따라 제어됩니다.


결론

Stack, Virtual Memory, 그리고 Page Fault는 메모리 관리에서 각각 중요한 역할을 수행하며, 서로 유기적으로 연결되어 작동합니다. Stack은 프로세스 실행의 중심 역할을 하며, Virtual Memory는 이를 지원하는 유연한 환경을 제공합니다. Page Fault는 이러한 환경에서 발생할 수 있는 자연스러운 현상으로, 메모리의 효율적 사용을 가능하게 하지만, 성능 저하를 초래할 수 있는 요소로 작용하기도 합니다. 이들 간의 상호작용을 이해함으로써 컴퓨터 메모리 관리의 원리를 명확히 파악할 수 있으며, 더 나아가 시스템 설계와 최적화에도 기여할 수 있습니다.

마무리

위의 내용을 바탕으로 개발자 면접 간

1. stack과 heap이 무엇인가요?

2. stack에는 어떤 과정을 거쳐서 메모리가 저장되나요?

3.page Fault에 대해 알고있는 점?

등에 대한 질문을 생각해 볼 수 있겠다. 스스로에게 질문을 해보고 답해보자.

 

헷갈리는 부분은 보완하기! 찡긋 O.<

 

틀린 부분이나 보완해줬으면 하는 내용이 있으면 댓글로 알려주세요! 추가 설명이 필요하신 부분도 댓글로 알려주세요.

어떠한 피드백도 환영입니다. 긴 글 읽어주셔서 감사합니다.

 

출처 : ChatGPT

'개발면접준비' 카테고리의 다른 글

내적과 외적  (5) 2025.01.11
참조 매개변수  (4) 2025.01.10
어레이와 리스트의 차이  (2) 2025.01.03
포워드 렌더링과 디퍼드 렌더링  (1) 2025.01.02
stack과 heap  (1) 2024.12.30