Page Fault
CPU가 MMU를 통해서 가상주소를 물리주소로 바꾼 후에 메모리에 접근을 했는데 만약 원하는 페이지가 없다면 하드웨어에서 페이지를 가져와야 할 것이다. 이 때 페이지가 없는 경우를 Page Fault라고 하며 Page Fault발생시 OS에 interrupt를 걸게 된다.
그럼 OS는 IDT(Interrupt Descriptor Table)에 따라 Page Fault관련 인터럽트 처리를 실행하게 되는데 그럼 하드웨어에서 페이지를 가져온 후 다시 MMU를 통해 가상주소를 물리주소로 변환 후 페이지를 실행한다.
* MMU가 메모리로부터 가상주소를 물리주소로 변환하기 위해
1. 가상주소를 토대로 메모리에 요청
2. 메모리는 물리주소를 MMU에게 가르쳐줌
3. 메모리로부터 받은 물리주소로 페이지 탐색
이렇게 3가지 과정을 거친다. 그런데 메모리접근은 레지스터 등에 비해 훨씬더 많은 시간이 필요하고 이를 줄이기 위해 TLB라는 하드웨어를 따로 설치해서 TLB에 물리주소를 캐시해놓는 방식으로 속도를 높인다.
페이지 교체 알고리즘
Page Fault가 발생하여서 하드웨어로부터 페이지를 가져와야 하는데 현재 메모리에 페이지가 꽉 차있다면 메모리에 있는 페이지중 하나를 하드웨어로 보내고 새로운 페이지를 가져와야 할 것이다. 이때 어떤 페이지를 보내느냐를 결정하는게 페이지 교체 알고리즘이다.
가장 이상적인 것은 미래에 가장 안쓰일 페이지를 교체하는 것이지만 현실적으로 이걸 예측하기란 매우 힘드므로
LRU(Least Recently Used)라고 최근에 가장 안쓰인 페이지를 교체하는 방식이다.
NUR(Not Used Recently)라고 LRU처럼 최근에 사용하지 않는 페이지를 교체하는 알고리즘인데 이 알고리즘의 경우 각 페이지마다 참조비트(R)와 수정(M)비트를 둔다.
예를들어 page1, page2, page3가 있고 page1은 최근에 읽기와 쓰기, page2는 읽기만, page3는 최근에 읽히지도 쓰이지도 않았다면 아래와 같은 비트상태가 된다.
page1 (1, 1)
page2 (1, 0)
page3 (0, 0)
NUR알고리즘은 (0,0), (0,1), (1,0), (1,1)의 순서로 교체를 하기 때문에 새로운 페이지가 들어올 경우 page3이 제일 먼저 교체된다.
'운영체제' 카테고리의 다른 글
운영체제 가상메모리#1 (0) | 2020.12.13 |
---|---|
운영체제 파이썬의 gil과 멀티쓰레딩 (0) | 2020.12.12 |
운영체제 Context Switching (0) | 2020.11.27 |
운영체제 프로세스 구조 (0) | 2020.11.25 |
운영체제 인터럽트란? (0) | 2020.11.24 |