Virtual Memory
가상 메모리(Virtual Memory)
가상 메모리(Virtual Memory)는 실제 물리 메모리와 사용자의 논리 메모리를 분리하여, 적은 물리 메모리로도 프로그래머에게 큰 가상 주소 공간을 제공할 수 있다. 이는 페이지 공유를 통해 둘 이상의 프로세스에서 파일과 메모리를 공유하여 메모리 사용의 효율성을 높인다.
요구 페이징(Demand Paging)
요구 페이징(Demand Paging)은 가상 메모리 관리 기법 중 하나로, 프로그램이 실제로 필요로 하는 페이지(데이터 또는 코드)만을 물리 메모리에 로드하는 방식이다. 메모리에 존재하는 페이지와 디스크에 존재하는 페이지를 구별하기 위해 어떤 형태의 하드웨어 지원이 필요하다. 이를 위해 유효-무효 비트(Valid-Invalid Bit)를 사용한다.
유효(Vaild) 비트일 때 관련 페이지가 메모리에 존재하고, 무효(Invaild) 비트일 때 페이지가 유효하지 않거나 유효하지만 현재 메모리에 존재하지 않고 보조 저장소에 있다. 프로세스가 해당 페이지에 접근을 시도하지 않는다면, 페이지를 무효로 표시해도 된다.
페이지 폴트(Page Fault)
페이지 폴트(Page Fault)는 프로그램이 가상 메모리 내의 페이지에 접근하려 할 때, 해당 페이지가 물리 메모리에 존재하지 않는 경우 발생하는 인터럽트이다.
페이지 폴트의 처리절차는 다음과 같다.
- 유효한 메모리 접근인지 무효한 메모리 접근인지 확인을 위해 프로세스 내부 테이블을 확인
- 유효하지 않은 경우 프로세스를 종료하고, 유효하지만 아직 해당 페이지를 가져오지 않은 경우는 페이지를 입력
- 비어있는 프레임을 검색
- 원하는 페이지를 새로 할당된 프레임으로 읽어 들이기 위해 2차 저장작업을 예약
- 저장소 읽기가 완료되면 프로세스와 함께 유지되는 내부 테이블과 페이지 테이블을 수정하여 페이지가 현재 메모리에 있음을 나타냄
- 트랩에 의해 중단된 명령을 재개하고, 프로세스는 메모리에 있었던 것처럼 페이지 접근이 가능
순수한 요구 페이징(Pure Demand Paging)
순수한 요구 페이징(Pure Demand Paging)은 프로그램이 실행될 때 필요한 페이지만을 메모리에 적재하는 가상 메모리 관리 기법이다. 프로그램이 시작될 때는 필요한 모든 페이지를 메모리에 로드하지 않고, 프로그램이 실행되면서 실제로 접근하는 페이지들만 순차적으로 메모리에 적재한다.
페이지 교체(Page Replacement)
페이지 교체(Page Replacement)는 운영 체제가 물리 메모리를 효율적으로 관리하기 위해 사용하는 기법 중 하나로, 물리 메모리가 꽉 찼을 때 새로 필요한 페이지를 적재하기 위해 기존에 메모리에 있던 페이지를 내보내는 과정이다. 페이지 교체는 페이지 폴트가 발생하여 새로운 페이지를 메모리에 적재해야 할 때, 빈 프레임이 없으면 기존의 페이지를 교체해야 하는 상황에서 발생한다.
페이지 교체 과정은 다음과 같다.
- 보조 저장소에서 원하는 페이지의 위치를 검색
- 빈 프레임 찾기
- 빈 프레임이 존재한다면 사용
- 빈 프레임이 존재하지 않는다면, 페이지 교체 알고리즘을 사용하여 희생 프레임을 선택
- 원하는 페이지를 새롭게 비게 된 프레임으로 읽고, 페이지 및 프레임 테이블 변경
- 페이지 폴트가 발생한 유저 프로세스를 계속 진행
수정 비트(Dirty Bit)
수정 비트(Dirty Bit)는 페이지가 메모리에 적재된 후 수정되었는지를 표시하는 비트 플래그이다. 수정 비트는 페이지의 바이트가 기록 될 때마다 하드웨어에 의해 설정되어 페이지가 수정되었음을 나타낸다. 페이지가 처음 메모리에 적재될 때 수정 비트는 0으로 설정되고, 프로세스가 페이지를 수정하면 수정 비트가 1로 설정된다. 이 방식은 페이지가 수정되지 않은 경우 I/O 시간을 $^1/_2$로 줄이기 때문에 페이지 폴트를 처리하는데 필요한 시간을 크게 줄일 수 있다.
요구 페이징 시스템 필요 알고리즘
- 프레임 할당 알고리즘: 메모리에 여러 프로세스가 있는 경우 각 프로세스에 할당할 프레임 수 결정이 필요
- 페이지 교체 알고리즘: 페이지 교체가 필요한 경우 교체할 프레임을 선택해야 함
- 참조열(Reference String): 프로그램이 실행되는 동안 발생하는 페이지 참조 순서
페이지 교체 알고리즘
FIFO Page Replacement
FIFO는 가장 간단한 페이지 교체 알고리즘이다. 페이지를 교체해야 하는 경우 가장 오래된 페이지가 선택된다.
Optimal Page Replacement
최적화 교체 알고리즘은 장기간 사용하지 않을 페이지 교체하는 알고리즘이다. 모든 알고리즘 중 가장 낮은 페이지 폴트율을 유지할 수 있다.
Ref
[1] Operating System Concepts(Silberschatz, Galvin and Gagne)