가상 기억장치의 등장배경
- 여러 프로세스를 수용하는 다중프로그래밍(multiprogramming)의 출현: CPU 스케줄링과 기억장치 관리(OS에 의한 기억장치의 동적 세분화) 필요.
- 더 많은 프로세스를 기억장치에 상주시켜야 함 : 기억장치 공간의 분할(고정크기 분할, 가변크기 분할). 그러나 상당한 크기를 요하는 PCB(Process Control Block)의 크기로 인해 메모리 단편화(fragmentation) 발생
- 외부 단편화의 해결책, Paging : PCB를 일정 크기로 분할(분할된 단위: page). 기억장치 역시 일정크기로 분할(분할된 단위: frame 또는 page frame). 일반적으로 page와 frame은 동일한 크기.
- paging에서 더 나아가 필요로 한 순간에만 메모리에 프로세스의 page를 적재하는 요구 페이징(demand paging) 기법이 가능해짐 : 참조 지역성의 활용.

가상 기억장치(virtual memory)의 등장
- demand paging을 통해 PCB 전체를 memory에 적재할 필요 없다? 프로세스가 전체 memory 크기보다 더 커질 수 있음. 디스크까지 포함한 전체 memory, 나아가 이를 넘어서는 주소 공간의 확보 가능.

* demand paging은 swapping 기법과 비슷. 허나 swapping은 전체 프로세스를 memory에 올리는 반면 demand paging은 프로세스의 일부 page만을 요청되었을 때 올림. 이를 lazy swapper라고 함.
가상 기억장치의 특징
- memory의 논리적 주소와 물리적 주소의 분리 : page 번호와 offset으로 구성된 가상 또는 논리 주소와 frame과 offset으로 구성된 물리 주소간 변환을 통한 프로그래머의 memory 접근. 논리 주소와 물리 주소의 매핑은 프로세스 당 하나씩 배당되는 page table을 통함.
- 다중프로그래밍을 위한 프로그래밍 모델이 대폭 단순해짐.
- 주소 변환 및 페이지 교체는 H/W 및 OS가 담당. 프로그래머에게는 논리 주소만이 보일 뿐. 타 프로세스의 memory 영역을 건드리는 memory protection fault를 원천적으로 막을 수 있음.
- 적재되지 않은 page를 참조하는 page fault 발생시, 페이지 교체(page replacement)를 통해 해당 참조 영역이 담긴 page를 memory에 적재(LRU를 많이 사용).

가상 기억장치의 기타 사항
- 크기가 가변적인 sementation을 통해 기억 장치를 분할하기도. segment 번호, offset으로 구성됨. segmentation은 프로그래머에게 보이며 특권 속성 및 보호 속성을  명령어와 데이터에 겹합하는 수단으로 제공되나 잘 사용되지 않음.
- thrashing : 사용되기 직전의 page를 내보냈다가 다시 해당 page를 적재하는 일이 반복되는 현상. 시간 지역성을 이용한 working set(각 프로세스가 필요로 하는 최소한의 프레임 개수를 보장), PFF(Page-Fault Frequency; 프로세스의 페이지 부재율 상한, 하한 사이에서 프레임 개수 조절)을 통해 해결.
reference:
컴퓨터시스템구조론(Computer Organization & Architecture Designing for
Performance). William Stallings, 김종현 역
Operating System Concepts, 6th Ed. Silberschatz/Galvin/Gagne
Virtual Memory. Wikipedia
Posted by 어쨌건간에