Demand Paging
코드 중 대부분은 한번 쓰이거나 쓰이지 않는다. 이런게 메모리 공간을 차지하여 낭비하고 있다. OS는 이런 코드에게 메모리를 안 주고 싶어한다. 크도 전체가 항상 동시에 로드되어있을 필요가 없다는 입장이다. 그런데 프로그래머는 자신이 짠 코드가 항상 메모리에 있길 원한다. 예를 들어, 100번에 한번 걸릴까말까 하는 에러 코드가 있다고 하자. 메모리는 이 에러코드는 메모리를 낭비하고 있다고 생각한다. 하지만 이 코드에게 메모리를 안 내어줄 경우 에러 상황이 오면 대처할 수 없게 된다. 프로그래머는 분명히 에러코드를 짰는데 말이다.
이를 해결하기 위해 전체 중 자주 쓰이는 일부만 메모리에 로드한다. 그러다가 로드 안된 부분을 실행하려고 하면 OS가 급하게 그 코드에게 메모리를 할당해준다. 프로그래머는 프로그램이 느려져서 의아해하지만 실행은 되니까 그냥 넘어간다. OS는 실행 후 그 코드를 다시 뺀다. 이것이 바로 Virtual Memory의 컨셉이다. LAS가 요구하는게 VAS(virtual address space)에 모두 할당되어있는 것처럼 보이는 환상이다. PAS는 VAS의 동작을 보면서 자주 쓰는 것만 골라 PAS에 할당해준다. LAS가 할당되어있지 않은 데이터를 요구하면 재빨리 PAS에 할당해주고 다시 제거한다.
Valid-Invalid Bit
페이지 테이블의 엔트리가 valid한지 표시하는 비트
v는 valid를 뜻하고 i는 invalid를 뜻한다. 이를 확인하고 매칭시키는 작업은 소프트웨어가 하면 너무 느리므로 MMU에서 한다. 예를 들어 1번 프레임과 13번 페이지가 v이면 1번 프레임이 13번 페이지에 잘 저장되어있으니 접근해도 된다는 것이다.
Page Fault와 Handling
페이지에 접근했는데 invalid한 상황. 페이지 폴트 핸들링으로 이 상황을 잘 처리해서 정상으로 바꿔준다. 핸들링의 최종 목표는 프레임 할당이다.
이 부분 그냥 ppt 보기... 타자 치기 지친다
'나도 공부한다 > 운영체제' 카테고리의 다른 글
09. Main Memory (0) | 2021.06.06 |
---|---|
08. CPU-Synchronization(2) (0) | 2021.06.06 |
07. CPU: Synchronization (0) | 2021.06.05 |
06. CPU-IPC (0) | 2021.06.05 |
05. CPU Scheduling (2) (0) | 2021.06.01 |