[OS] Ch9. 가상 메모리
가상 메모리
- 물리 메모리 개념과 사용자의 논리 메모리 개념을 분리한 것
가상 주소 공간
: 프로세스가 메모리에 저장되는 논리적인 번지- 페이지 공유를 통해 파일이나 메모리가 프로세스들에 공유될 수 있는 장점이 있다.
요구 페이징 (Demand Paging)
- 메모리에 필요한 것들만 적재한다.
- 필요한 페이지는 swap in, 필요 없으면 swap out
- 스와핑 기법과 비슷 - 페이저라는 용어 사용
기본 개념
- 메모리에 존재하는 페이지에 접근하면 실행, 존재하지 않는다면 페이지 부재 트랩 발생
- 페이지 부재 처리 과정
- 메모리 참조가 유효한지, 무효한지 판단.
- 무효하다면 프로세스 중단, 유효하지만 페이지가 없다면 디스크로부터 가져오기
- 빈 공간 (자유 프레임)을 찾는다.
- 새로 할당된 프레임에 페이지를 읽어 들이도록 요청한다.
- 페이지 테이블 갱신, 프로세스의 내부 테이블 수정
- 트랩에 의해 중단된 명령어 수행.
페이지 교체
- 페이지 교체 과정
- 디스크에서 필요한 페이지의 위치를 알아낸다.
- 빈 페이지 프레임을 찾는다.
- 빈 프레임이 있다면 사용한다.
- 없다면 희생될 프레임을 선정하기 위해 페이지 교체 알고리즘을 실행한다.
- 희생될 페이지를 디스크에 기록하고, 테이블을 수정한다.
- 빼앗은 프레임에 새 페이지를 읽어오고 테이브를 수행한다.
- 트랩이 발생한 지점에서부터 프로세스를 실행한다.
페이지 교체 알고리즘
- FIFO (First In First Out)
- 가장 오래 된 페이지 교체
- 이해하기 쉽고, 구현도 쉽다.
- 성능이 항상 좋지 않다. 교체한 페이지가 자주 사용되는 페이지일 수도 있다.
Belady의 모순
프로세스에게 프레임을 더 주었는데 페이지 부재율은 더 상승한다.
- 최적 페이지 교체 (Optimal Page Replacement)
- 가장 오랫동안 사용되지 않는 페이지 교체
- 가장 낮은 페이지 부재율 보장
- 구현하기 어렵다.
- Belady 모순 X
- LRU (Least Recently Used)
- 가장 오랜 기간동안 사용되지 않은 페이지 교체
- 카운터 변수나 스택을 사용한다.
- Belady 모순 X
- LFU (Least Frequently Used)
- 가장 참조 횟수가 적은 페이지 교체
- 교체 대상이 여러 개인 경우, LRU 이용
- 구현 비용이 크다.
스레싱 (Thrashing)
- 페이지 부재가 연속적으로 발생 돼 프로세스 수행 시간보다 페이지 교체 시간이 더 많을 경우
스레싱의 원인
- 부적절한 페이지 교체 알고리즘
- Belady 모순
- 시스템 리소스 부족
- 작은 캐시
- 낮은 메모리 용량
- 프로그램 메모리 관리 실패
- 과도한 스레드 생성, 무분별한 fork
스레싱 해결 방법
- Working Set Model
- 프로세스가 많이 참조하는 페이지 집합을 메모리 공간에 계속 상주시켜 빈번한 페이지 교체현상(스레싱)을 줄이는 방법
- 다중 프로그래밍 높임, CPU 사용률 최적화
- Working set 관리 복잡, Window 사이즈 설정 모호
- 지역성 활용
- Page Fault Frequency
- 페이지 부재율의 상, 하한으로 페이지 부재율을 예측하고 조절
- 페이지 부재율이 높으면 프레임 할당, 낮으면 회수
- 페이지 부재 발생 시에만 실행, 직접 페이지 부재율 조절 가능
- 프로세스 중지 과정 발생
- Working set보다 오버헤드가 작다.