--목차--
1줄 요약
개발 배경
기능
Demand Paging
페이지 교체
--------
0. 한줄 요약
가상 메모리는 프로세스 전체가 메모리 내에 올라오지 않아도 실행이 가능하도록 하는 기법으로, 다중 프로그래밍 실현이 가능함과 동시에 프로그램이 물리 메모리보다 커도 된다는 장점이 있다.
가상 메모리는 실제의 물리 메모리 개념과 사용자의 논리 메모리 개념을 분리한 것으로, 작은 메모리로 크기에 영향받지 않는 가상 주소 공간을 프로그래머에게 제공할 수 있다.
1. 개발 배경
1) 이전까지의 문제점
실행되는 코드의 전부를 물리 메모리에 존재시켜야 함
메모리 용량보다 큰 프로그램은 실행시킬 수 없음
여러 프로그램을 동시에 메모리에 올리면 용량 한계 발생.
페이지 교체 등 성능 이슈 발생.
2) 배경이 된 기본 생각
프로그램의 일부분만 메모리에 올려도 가능할지도?
(가끔만 사용되는 코드가 차지하는 메모리를 확인가능하다는 점. 전체의 프로그램이 메모리에 올라올 필요 없음)
물리 메모리 크기에 제약받지 ㅇ낳음.
더 많은 프로그램 동시 실행하면서 응답시간 유지, CPU이용률 증가, 처리율 상승
프로그램 실행 속도 증가(swap에 필요한 입출력이 줄어듦.)
3. 기능
1) 가상 주소 공간
한 프로세스가 메모리에 저장되는 논리적인 모습을 가상메모리에 구현한 공간.
프로세스가 요구하는 메모리를 가상메모리에서 제공하기 때문에 직접적으로 필요하지 않은 메모리 공간은 실제 물리 메모리에 올리지 않으므로 물리 메모리 절약 가능.
(실행까지 필요한 메모리 공간-Heap, Stack, Code, Data-만 실제 물리 메모리에 올라가고, 나머지는 가상메모리를 사용하다 필요시 물리 메모리에 요구.)
2) 프로세스간의 페이지 공유
가상 메모리는 시스템 라이브러리가 여러 프로세스 사이 공유 가능하다.
(프로세스: 공유 라이브러리를 자신의 가상 주소 공간에 두고 사용하는 것처럼 인식.
물리 메모리 페이지(라이브러리 올라가 있음)는 모든 프로세스에 공유.)
프로세스들이 서로 메모리 공유 가능, 공유 메모리를 통해 통신 가능.
(물리메모리는 공유되는 중. 프로세스는 자신의 주소 공간처럼 인식.)
fork()를 통한 프로세스 생성 과정에서 페이지 공유 가능.
4. Demand Paging
초기에 필요한 것들만 적재하는 전략.(Demand Paging, 요구 페이징)
프로그램 실행 시작 시 프로그램 전체를 디스크에서 물리 메모리에 적재하지 않음.
가상 메모리는 페이지로 관리. (1번도 접근하지 않는 페이지는 물리 메모리에 적재되지 않음.)
페이지들은 pager에 의해 관리.
(프로세스 실행에 실제 필요한 페이지들만 메모리로 읽음.
사용되지 않을 페이지를 가져오는 시간 낭비와 메모리 낭비 감소 가능.)
Page Fault Trap
5. 페이지 교체
1) 배경
페이지 부재가 발생할 경우, 원하는 페이지를 보조저장장치에서 가져옴.
물리 메모리가 모두 사용중이라면, 페이지 교체가 이뤄지거나 운영체제 프로세스를 강제 종료한다.
(요구 페이징에서 언급된대로 프로그램 실행시에 모든 항목이 물리 메모리에 올라오지 않아 프로세스의 동작에 필요한 페이지를 요청하는 과정에서 page fault(페이지 부재)가 발생함.)
2) 기본 방법
물리 메모리가 모두 사용중인 상황에서 메모리 교체 흐름
2-1) 디스크에서 필요한 페이지의 위치 찾기
2-2) 빈 페이지 프레임 찾기
페이지 교체 알고리즘을 통해 희생될 페이지 찾기
희생될 페이지를 디스크에 기록하고, 관련 페이지 테이블 수정.
2-3) 새롭게 비워진 페이지 테이블 내 프레임에 새 페이지를 읽어오고, 프레임 테이블을 수정한다.
2-4) 사용자 프로세스 재시작
3) 페이지 교체 알고리즘
3-1) FIFO 페이지 교체
가장 간단한 페이지 교체 알고리즘.
FIFO (물리 메모리에 들어온 페이지 순서대로 페이지 교체 시점에 먼저 나가게 됨.)
장점
이해하기 쉽고, 프로그래밍하기 쉬움.
단점
오래된 페이지가 항상 불필요하지 않은 정보 포함하지 않을 수 있음.(초기변수)
처음부터 활발하게 사용되는 페이지를 교체해서 페이지 부재율을 높이는 부작용 초래.
Belady의 모순(페이지를 저장할 수 있는 페이지 프레임의 갯수를 늘려도 되려 페이지 부재가 더 많이 발생하는 모순 존재.)
3-2) 최적 페이지 교체(Optimal Page Replacement)
Belady의 모순 이후 등장.
모든 알고리즘보다 낮은 페이지 부재율.
앞으로 가장 오랫동안 사용되지 않을 페이지를 찾아 교체. 주로 비교 연구 목적.
장점
알고리즘 중 가장 낮은 페이지 부재율 보장.
단점
구현의 어려움. 모은 프로세스의 메모리 참조의 계획을 미리 파악할 방법이 없기 때문.
4) LRU(Least-Recently-Used) 페이지 교체
최적 알고리즘의 근사 알고리즘. 가장 오랫동안 사용되지 않은 페이지를 선택하여 교체.
FIFO보다 우수, OPT보다 우수하지 ㅇ낳음.
5) LFU(Least Frequently Used) 페이지 교체
참조 횟수가 가장 적은 페이지 교체.
활발하게 사용되는 페이지는 참조 횟수가 많아질 것이라는 가정에서 만들어짐.
어떤 프로세스가 특정 페이지 집중적으로 사용하다, 다른 기능 사용시 더 이상 사용하지 않아도 계속 메모리에 머물러 초기 가정에 어긋나는 시점 발생.
OPT 페이지 교체를 제대로 근사하지 못함.
6) MFU(Most Frenquently Used) 페이지 교체
참조 횟수가 가장 작은 페이지가 최근에 메모리에 올라왔고, 앞으로 계속 사용될 것이라는 가정에 기반.
OPT 페이지 교체를 제대로 근사하지 못함.