1. Demand Paging(요구 페이징)
1) 정의
프로세스를 실행할 때 실행에 필요한 부분만 페이지 단위로 메모리에 올리는 가상 메모리 기법 중 하나이다.
2) 특징
한 번도 접근되지 않은 페이지는 물리 메모리에 적재되지 않는다.
프로세스 내의 개별 페이지들은 페이저에 의해 관리된다.(페이저-프로세스 실행에 실제 필요한 페이지들만 메모리로 읽어 옴으로써 사용되지 않을 페이지를 가져오는 시간낭비와 메모리 낭비를 줄일 수 있다.
3) 실행 과정
i. 메인 메모리에 페이지가 존재하지 않을 때, pager은 page table의 valid-invalid bit를 통해 physical memory에 어떤 페이지가 올라가 있는지 확인한다.
(valid : page가 legal하면서 메인 메모리에 존재.
invalid : page가 not valid / Secondary Storage(HDD, SDD)에 존재한다.)
ii. 프로세스가 메모리에 없는 페이지를 접근하려 할 때 page-fault-trap을 발생시키고, 페이징 하드웨어는 페이지 테이블을 이용한 주소 변환 과정에 무효 비트를 발견하고 운영체제에 트랩을 건다.
iii) page fault 처리 과정
프로세스 내부 테이블을 검사해 메모리 참조가 valid/not valid인지 판별한다.
무효한 페이지에 대한 참조라면 프로세스는 중단되고, 유효한 참조인 경우 메모리에 없으면 디스크로부터 가져온다.
free frame을 찾는다.
디스크에 새로이 할당된 프레임으로 해당 페이지를 읽어들이도록 요청한다.
디스크 읽기가 끝나면 이 페이지가 메모리에 있다는 것을 알리기 위해 페이지 테이블을 갱신하며 프로세스가 유지되고 있는 내부테이블을 수정한다.
트랩에 의해 중단되었던 명령을 다시 수행하며 프로세스는 그 페이지가 항상 메모리에 있었던 것처럼 간주하여 해당 페이지를 접근 가능하게 만든다.
페이지가 적재되고 나면 프로세스는 수행을 계속 진행하는데 프로세스가 사용하는 모든 페이지가 메모리에 올라올 때까지 필요할 때마다 page fault가 발생한다. 일단 필요한 모든 페이지가 적재되고 나면 더 이상 부재 오류가 발생하지 않는데 이것이 순수 요구 페이징(pure deman paging)이다.
++ pure demand paging vs prepaging
pure demand paging : 필수적인 페이지만 가져오는 것. 프로그램이 처음 시작할 때 현재 필요한 부분이 아니면 아무것도 들고 오지 않아서 처음 시작할 때부터 page fault가 발생함. 속도는 느리지만 메모리가 절약됨.
prepaging : 지금 필요하지 않아도 미리 페이지들을 가져오는 것. 속도는 빠르지만(page fault 적음), 메모리 낭비가 있다.
2. 유효 접근 시간
cpu가 주소를 낼 때 빠르게 읽히는 부분과 느리게 읽히는 부분의 평균 속도이다.
- Effective Access Time
- probability of a page fault = page fault rate
- T = (1-p)T + pT
- 유효접근시간 = (1-page fault가 일어날 확률) * 메모리 읽는 데 걸리는 시간 + page fault가 일어나면 걸리는 시간
실행 과정에 대한 설명은 아래 링크를 참고.
https://coder-in-war.tistory.com/entry/OS-16-메모리-관리-전략-가상-메모리-Paging-Demand-Paging
'이론 공부 내용 정리' 카테고리의 다른 글
| [CS 스터디] 프로세스와 스레드 차이 (0) | 2022.10.30 |
|---|---|
| c# 단위테스트 진행하기(xUnit) (0) | 2022.07.28 |
| OS-가상메모리1(용어 정의 및 특징 정리) (0) | 2021.07.19 |
| OS-메모리 관리 전략 (0) | 2021.07.19 |
| OS-프로세스동기화 (0) | 2021.06.24 |