페이지 번호 : 페이지 테이블의 인덱스 페이지 오프셋 : 시작 주소로부터의 오프셋 페이지 크기 : 하드웨어에 의해 정의, 2의 제곱수를 갖는다. 페이지 크기가 \(2^n\)이고 논리 주소 공간의 크기가 \(2^m\)일 때 페이지 번호는 m-n이고 페이지 오프셋은 n이다.
컨텍스트 스위치가 일어날 때 페이지 테이블도 다시 불러와야한다.
- PTBR(Page Table Base Register) : 페이지 테이블을 가리키는 레지스터, 컨텍스트 스위치가 빨라지지만, 메모리 접근 시간은 느려진다. 2번의 메모리 접근이 필요하다.
- TLB(Translation Look-aside Buffer) : 페이지 테이블의 캐시
기타 배경지식
- 메모리 보호 : 비트 1개를 보호 비트로 둔다. 일반적으로 페이지 테이블의 각 엔트리에 부착된다.
- 계층적 페이징 : 페이지 테이블이 페이지 테이블을 참조한다. 대규모의 페이지 테이블을 관리하는데 사용된다.
- 해시 페이지 테이블 : 해시값을 이용해 페이지 테이블에 접근
- 역 페이지 테이블 : PID가 어떤 페이지를 가지고 있는지를 저장
스와핑
물리 메모리보다 큰 크기의 프로세스를 실행하기 위한 기술. 필요할 때만 메모리에 적재(page in)하고 그렇지 않으면 메모리에서 내린다(page out). 일반적으로 페이징과 같이 사용되어 페이징 자체를 swapping with paging이라고 하기도한다.
가상 메모리
메모리를 거대한 스토리지로 추상화해 필요할 때마다 페이지를 물리 메모리와 매핑하는 기술, 이 때 필요한 페이지를 Demand page라고 한다.
Demand Page
기초 이론
프로세스 실행 중에 몇몇 페이지는 메모리에 있고, 나머지는 스토리지에 있다. 이 두 상황을 구별하는 방법으로 유효-비유효 비트를 사용하는 것이 있다.
- valid : 메모리에 있고, 적법한 상태
- invalid : 적법하지 않거나, 스토리지에 있는 상태
Page Fault 처리
- 내부 페이지 테이블을 확인해 유효한지 확인
- 유효한 경우 프로세스를 처리
- 유효하지 않다면 비어있는 프레임을 찾는다.
- 스토리지에서 페이지를 읽는다.
- 페이지 테이블을 유효로 변경한다.
- 명령을 재실행한다.
- Pure Demand Paging : 필요하기 전에는 절대 페이지를 가져오지 않음, 메모리에 페이지를 적재하지 않고도 프로세스를 실행할 수 있다.
- Locality of Reference : 짧은 시간동안 동일한 페이지에 액세스하는 경향
페이지 재배치 알고리즘
- FIFO : 먼저 적재한 것을 먼저 제거한다.
- OPT : 앞으로 가장 사용되지 않을 것 같은 페이지를 제거한다. 미래의 정보를 알아야 가능하다.
- LRU : 최근에 가장 적게 사용된 페이지를 제거한다. 하드웨어의 지원이 필요하다.
스래싱
Page Fault가 너무 많이 발생해 프로세스 처리 시간보다 페이지 교체 시간이 더 길어지는 현상.
- Working Set : 자주 사용하는 페이지의 집합