출처: 인프런 강의
어떤 프로세스의 실행을, 메모리에 전부 적재하지 않더라도 허용해주는 기술이다. 여기서 주 메모리를 매우 큰 저장소로 추상화하여, 논리적 메모리와 물리적 메모리를 분리할 수 있다.

가상 메모리를 통해 파일과 메모리가 복수의 프로세스에서의 공유를 원할하게 한다.(by page sharing)

0부터 시작하여, 프로세스가 메모리에 저장되어있는 모습을 논리적 위치로 나타냄
프로그램을 실행하기 위한 선택지는 두 개가 있다. 첫 번째는 2차 저장소에 있는 프로그램 전체를 메모리에 적재하는 방법이다. 두 번째는 디맨드 페이징이다. 이는 필요한 페이지만을 메모리에 적재한다.
디맨드 페이징의 기본 개념

Page Fault를 처리하는 방법
1. 내부 테이블의 valid-invalid bit를 검사
2. 무효라면 프로세스를 종료하고, 유효하다면 보조장치로부터 페이지를 가져온다.
3. 비어있는 메모리를 찾는다.
4. 2차 저장소에 새로 할당된 프레임으로 해당 페이지를 읽어 들이도록 요청한다.
5. 읽기가 끝나면, 페이지 테이블을 갱신하고, 프로세스가 유지하는 내부 테이블을 수정한다.
6. 트랩에 의해 중단된 명령어를 다시 수행한다.

요청이 이뤄질 때까지 페이지를 메모리에 가져오지 않는다. 순수 요구 페이징 하에서 프로세스는 메모리에 페이지를 적재하지 않은채 실행을 시작한다.
어떤 프로그램이 명령어마다 복수의 새로운 페이지에 접근하는 경우, multiple page fault를 일으킨다.
다행히 실행중인 프로세스를 분석했을때, 이런 경우는 드물었다. 참조 국부성을 띄는 프로그램은 요구 페이징에서 상당한 성능을 보여주었다.
요구 페이징의 가장 중요한 요구사항은 page fault 이후에 명령어를 다시 시작하는 것이다.
page fault가 발생하면 인터럽트된 프로세스의 상태가 저장된다. 따라서 프로세스는 정확히 같은 지점, 상태에서 재시작하게 된다.
page fault가 발생했을 때, 운영체제는 반드시 필요한 페이지를 보조저장장치에서 메모리로 가져와야한다. page fault를 해결하기 위해 운영체제는 free frame list를 유지한다. free frame들은 스택 혹은 힙 세그먼트로 관리된다.
성능 측정 방법은, EAT = (1-p) ma + p (page fault time)이다.
페이지 폴트 처리시간은 인터럽트 거는 시간, 페이지를 읽어들이는 시간, 프로세스를 재시작하는 시간, 세 가지로 구성된다.(사실 두 번째가 관건이다.)
shared page는 shared page에 쓰기를 할 때에만 copy가 일어난다.

free frame이 없는 경우, 물리 메모리 내의 페이지를 교체할 필요가 있다.

요구 페이징을 구현하는데 큰 문제가 있다.
(1) 각 프로세스에 할당되는 페이지 수 결정
(2) 교체될 페이지를 선택하는 알고리즘
페이지 교체 알고리즘 평가 기준
Belady's Anomaly
할당 프레임의 수가 증가함에도 페이지 폴트의 비율이 증가하는 것.
종류

(1) Equal: 각 프로세스에 동등하게 할당.
(2) Proportional: 프로세스 크기에 비례해서 할당
(3) Global: 할당 된 자신의 프레임 중에서 교체 프레임 선택
(4) Local: 다른 프로세스의 프레임 중에서 교체 프레임 선택

프로세스가 페이지를 매우 빈번하게 교체하는 상황. 프로세스가 충분한 페이지를 갖지 못하는 경우, 페이지 폴트 비율은 매우 높다.
국부성에 기반하여 woking set 윈도우를 정의한다. 이는 최근에 참조된 페이지에 기반하여 구성된다.