프로세스 전체가 메모리 내에 올라오지 않더라도 실행이 가능하도록 하는 기법이다.
프로세스를 실행할 때 실행에 필요한 일부만 메모리에 올리고 나머지는 디스크에 저장한다.
프로세스가 실행되는 코드의 전부가 물리 메모리에 존재해야 한다.
하지만 실제로는 코드의 일부에서만 대부분의 시간을 사용하고, 특정 순간에는 작은 양의 주소 공간을 사용한다.
메모리 용량보다 큰 프로그램은 실행시킬 수 없다.
물리 메모리 크기에 제약받지 않는다.
더 많은 프로그램을 동시에 실행할 수 있어 CPU의 활용률이 높다.
사용자에게 논리적 메모리와 물리적 메모리를 분리하여 인식하도록 한다.
가상 주소 공간(Virtual Address Space)
: 적은 양의 물리적 메모리만 사용 가능할 때에도 사용자에게 대용량의 가상 주소 공간을 제공할 수 있다.
프로세스 간의 페이지 공유
: 둘 이상의 프로세스가 파일 또는 메모리를 공유하게 해준다.
프로세스의 모든 데이터를 메모리에 적재하지 않고, 실제 필요한 page만 메모리에 올리는 것을 Demand Paging(요구 페이징)이라고 한다. 이를 통해 메모리 사용량이 감소하고, 프로세스 전체를 메모리에 적재하는 입출력 오버헤드가 감소한다.
유효/무효 비트(valid/invalid bit)를 사용하여 page table에서 해당 page가 메모리에 있는지 확인한다.
CPU가 접근하려는 페이지가 메모리에 없는 경우(무효 비트)를 Page Fault(페이지 부재)라고 한다. 페이지 부재가 발생할 경우 다음과 같은 과정을 통해 그 페이지를 메모리에 적재한다.
MMU가 운영체제에 Page Fault Trap(페이지 부재 트랩)을 발생시킨다.
유효하지 않은 참조인 경우 프로세스를 종료시키고, 그렇지 않다면 빈 프레임을 찾아 페이지를 할당한다.
프레임 번호를 설정하고, valid bit를 1로 변경시켜 페이지 테이블을 갱신한다.
다시 명령어로 돌아가서 실행한다.
이미 메모리에 있는 페이지 중 하나를 backing store에 보내고(page-out), 새로운 페이지를 메모리에 올리는(page-in) 작업을 페이지 교체라고 한다. 메모리가 가득 찼을 때 다른 프로그램이 새로 실행되거나 실행중인 프로세스가 다른 페이지를 요구할 때 발생한다. 이 때, page-out되는 페이지를 Victim Page(희생 페이지)라고 하는데, 희생 페이지를 정하는 것이 페이지 교체 알고리즘이다.
FIFO(First-In, First-Out)
: 가장 단순한 알고리즘으로, 가장 먼저 page-in 한 페이지를 먼저 page-out 시킨다.
OPT(OPTimal)
: 가장 오랫동안 사용되지 않을 페이지를 교체하는 방식이다. 미래의 참조를 모두 알고 있어야 하므로 구현이 어렵다.
LRU(Least-Recently-Used)
: 가장 오랫동안 사용하지 않은 페이지를 교체하는 방식이다. OPT 알고리즘과 비슷한 효과를 내어 성능이 좋은 편이다.
LFU(Least-Frequently-Used)
: 가장 참조 횟수가 적은 페이지를 교체하는 방식이다.
MFU(Most-Frequently-Used)
: 가장 참조 횟수가 많은 페이지를 교체하는 방식이다.
Thrashing(스레싱)은 프로세스가 원활한 수행에 필요한 최소한의 page frame을 할당받지 못해서 반복적으로 page fault가 발생하고, 실행보다 swapping 하는데 더 많은 시간을 소모하여 CPU 이용률이 떨어지는 현상을 말한다.
CPU 이용률이 떨어지면 다중 프로그래밍의 정도(MPD, Multi-Programming Degree)를 높이게 되는데, 동시에 실행하는 프로세스가 많아질수록 각 프로세스에 할당된 메모리 page frame들은 더 작아지게 된다. 너무 적은 page frame을 할당받은 프로세스들은 page fault가 증가하게 되어 swapping이 증가하게 되고 결국 cpu의 이용률이 더 떨어지게 되는 악순환이 생긴다.
Thrashing을 해결하기 위해서 프로세스에게 적절한 frame을 할당해야 한다.
Working set
: 지역성의 원리(프로세스가 특정 시간 동안 일정 장소를 집중적으로 참조하는 성질)를 이용하여 지역성 집합이 메모리에 동시에 올라갈 수 있도록 보장하는 메모리 관리 방법이다.
PFF(Page Fault Frequency)
: page fault의 상한값과 하한값을 두고, page fault rate가 상한값을 넘으면 frame을 더 할당하고, 하한값보다 낮아지면 할당된 frame 수를 줄이는 방법이다.