10.1 Background (배경)
지금까지 살펴본 메모리 관리 기법은 명령어가 반드시 물리적 메모리에서 실행되어야 한다는 필요에 의해 사용되었다.
실제로 거의 사용되지 않는 코드가 실행되거나 & 자료구조가 실제 필요한 양보다 더 많은 메모리를 할당받는 것은 비효율적이다.
따라서, 프로그램의 일부만 실제 메모리를 할당하여 실행한다.
-
Virtual Memory(가상메모리)
실제 물리 메모리 개념과 개발자의 논리 메모리 개념을 분리한 것
→ 작은 메모리를 가지고 얼마든지 큰 가상 주소 공간 제공 가능

-
Virtual Adress Space (가상 주소 공간)
한 프로세스의 가상 주소 공간은 그 프로세스가 메모리에 저장되는 논리적인(가상적인) 모습

- 위 그림과 같이 특정 논리 주소는 0번지에서 시작하여 연속적인 공간을 차지
- Heap은 동적 메모리를 사용함에 따라 주소 공간 상에서 위쪽으로 확장
- Stack은 함수 호출을 거듭함에 따라 주소 공간 상에서 아래쪽으로 확장
- Heap와 Stack 사이의 공간은 논리적 주소 공간으로는 존재하지만, 실제 물리적 페이지를 필요로 하는 순간은 오직 Heap과 Stack이 그만큼 커졌을 때이다.
-
가상 메모리를 통한 라이브러리의 공유

논리 메모리를 물리 메모리로부터 분리해주는 것 외에 가상 메모리는 페이지 공유를 통해 파일이나 메모리가 둘 또는 그 이상의 프로세스들에 의해 공유되는 것을 가능하게 한다.
10.2 Demand Paging (요구 페이징)
- 실행 프로그램을 보조 저장장치에서 메모리로 적재하는 방법
- 프로그램 실행 시작 시 프로그램 전부를 물리 메모리에 적재하는 기법
- 초기에는 프로그램의 전체가 메모리에 있을 필요가 없다
- demand paging: 필요한 페이지만 적재하는 기법
- 프로그램 실행 중 필요할 때만 페이지 적재
- 따라서 접근 되지 않은 페이지는 물리 메모리로 적재되지 않는다
10.2.1 Basic Concepts (기본 개념)
-
요구 페이징은 결과적으로 프로세스가 실행되는 동안 일부는 메모리에 있고, 일부는 보조 저장 장치에 있다.
→ 따라서 이 둘을 구분하기 위해 하드웨어 지원이 필요하다.
-
유효Valid/무효 기법Invalid 기법이 여기에 적용될 수 있다.
- 비트가 유효하다고 설정되면 해당 페이지가 메모리에 있다는 것을 의미
- 비트가 무효하다고 설정되면 해당 페이지가 유효하지 않거나(가상 주소 공간상에 정의되지 않거나), 유효하지만 보조 저장장치에 있다는 것을 의미
