1. 가상메모리란?
각 프로세스에게 큰 전용 메모리를 제공하는 기술.
2. 부분적재
에러코드, 자주 접근되지 않는 코드들까지 한번에 적재할 필요가 있나?
Locality, Knuth's estimation : 10%의 코드가 90% 실행시간을 갖는다.
가상메모리도 일종의 캐시. 디스크와 메모리 사이의 캐시
- (fetch policy) 그러면 필요한 부분을 언제 올릴건데?
- (resident set policy) 메모리에 올라와 있는 각 프로세스의 조각들을 어떻게 효율적으로 관리할 것인가?
- (replacement policy) 메모리가 부족해서 다른 조각들을 쫓아내야할때 어떤 조각들을 쫓아낼것인가?
- 매핑테이블을 어떻게 관리할 것인가?
보통 paging 과 segmentation 기법을 사용
- 프로세스를 조각냈다-> 메모리에 연속적으로 적재할 필요가 없다. 분산적재 가능
- 물리메모리에서 재배치가 가능하다
3. 관리 정책
1) fetch policy
- demand paging
: page fault 발생 시에만, page를 가져옴. -> 시간이 지나면 자주 사용되는 페이지만 남게될것. - prepaging
: space locality 를 신경써서 주변 page 까지 가져옴. 불필요한 page 를 가져올 경우 penalty가 심각함
2) replacement policy
메모리에 가용공간이 부족할 때, 미래에 사용이 잘 안될것같은 페이지를 디스크로 쫓아내는 것. 그 victim page를 고르는 것. 페이지 별 reference 통계 정보를 가지고 선택하는 경우가 많다.
(1) Optimal
- 다른 replacement policy의 성능을 비교하기 위해 사용된다.
- 모든 미래의 workload를 다 안다고 가정하고 가장 최적의 성능을 보이는 방법이다.
- 알고리즘의 하한을 보이기 위한 이론적인 방법으로, 실제로는 구현할 수 없다.
(2) FIFO
- 가장 오래 메모리에 거주중인 page를 방출
- Belady's Anomaly : frame 이 늘어나면 page fault 가 오히려 증가하기도 하는 현상
(3) LRU(Least Recently Used)
- 가장 오래전에 접근된 page 를 방출 (가장 오랫동안 사용되지 않은 page를 방출)
- 구현하기 까다로워서 근사적인 알고리즘을 사용
- clock(second-chance) : page를 환형으로 정렬하고, 처음 적재하면 1로 설정. 지나가면서 1을 0으로 바꿈. 0인 페이지가 있으면 해당 페이지를 방출
- enhanced second-chance : (reference bit, dirty bit) 수정된거보다 수정 안된것이 더 효율적
3) resident set policy
- 각 프로세스마다 고정된 수의 frame 을 할당하는 방식. (local)
- 프로세스 별 요구사항에 맞게 frame 을 할당하는 방식.
4. Page Fault
(1) Thrash
멀티프로그래밍의 정도가 증가하면, 어느 순간 급격하게 page fault 가 발생하는 현상. swap in out 만 엄청 하고 있는 것.
(2) Working set
- 특정 시간동안 접근된 page 집합.
- hit 가 지속되면 working set 이 작고, page fault 가 많이 발생하면 working set 이 증가한다.
- 구현하기가 어렵다. window size를 적절하게 정하기가 어렵다. -> 근사해야함.
- 프로세스별로 page fault rate 을 운영한다. upper bound, lower bound 사이의 page fault frequency 를 조절해서 적절한 working set 을 유지하도록 한다.
'CS > Operating System' 카테고리의 다른 글
[논문 리뷰] SoftTRR: Protect Page Tables against Rowhammer Attacks using Software-only Target Row Refresh (0) | 2023.05.20 |
---|---|
[논문 리뷰] Drammer: Deterministic Rowhammer Attacks on Mobile Platforms (0) | 2023.05.19 |
[전공생이 설명하는 OS] 메모리 관리 - (1) Partition/Page/Segment (0) | 2022.06.02 |
[전공생이 설명하는 OS] 동기화 - (6) 식사하는 철학자 문제 (코드 포함) (0) | 2022.05.31 |
[전공생이 설명하는 OS] 동기화 - (5) Deadlock (0) | 2022.05.31 |