Page Table의 작동 순서

2022. 9. 30. 02:39TIL💡/OS

배경

기존에는 모든 프로세스를 메모리에 로드하고, 메모리 용량보다 더 큰 프로그램을 실행시킬 수 없었다.

하지만 실제로는 코드의 일부에서만 대부분의 시간을 사용하고, 프로세스는 특정 순간에는 항상 작은 양의 주소 공간을 사용했기 때문에 이러한 방식은 매우 비효율적이었다.

 

가상 메모리는 이러한 물리적 메모리 크기의 한계를 극복하기 위해 나온 기술이다.

프로세스를 실행할 때 실행에 필요한 일부만 메모리에 로드하고 나머지는 디스크에 두는 것이다.

이를 통해 프로세스 전체가 물리적 메모리에 있는 것'처럼' 수행되는, 즉 물리적 메모리가 훨씬 많이 있는 것처럼보이게 된다.

결과적으로 메모리에 작은 양의 주소 공간만 있으면 충분히 프로세스를 수행할 수 있고, 그에 따라 더 많은 프로그램을 동시에 실행할 수 있게 된다.

 

이처럼 현재 필요한 page만 메모리에 올리는 것을 Demand Paging이라고 한다.

 

프로세스마다 Page Table이 생성되어 페이징 기법을 이용해 프로세스의 페이지와 물리적 메모리를 매핑할 수 있다.

Page Table을 통해 물리적 frame의 인덱스 외에도, 엔트리에는 다양한 정보들이 담겨있다.

 

- P(Present bit or Valid/Invalid bit): 해당 페이지가 물리 메모리에 존재하는지 확인 가능

- R/W (Read/Write bit): 해당 페이지 read/write가 가능한지 여부

- U/S (User/Supervisor bit): 유저, 커널모드 중 어느 모드에서 접근 가능한지

- A(Access bit): replacement를 위해 활용

- D(Dirty bit): 페이지가 수정되었는지 확인 가능 → Delayed write와 관련

Demand Paging 과정

1. 하드웨어가 TLB(Translation Lookaside Buffer)를 확인한다.

2. TLB hit인 경우 곧바로 주소를 변환하고, TLB miss인 경우 page table을 확인한다.(→ 3)

3. page table의 valid-invalid bit가 valid로 되어있다면 주소를 변환하고, TLB에 page를 올린다. invalid하다면 pagefault가 발생한다. (→ 4)

4. page fault가 발생하면 MMU(Memory Management Unit)가 운영체제에 Trap을 걸고 커널 모드로 들어가서 page fault handler가 invoke된다.

5. 유효하지 않은 참조인 경우 프로세스를 종료시키고, 그렇지 않다면 빈 frame을 얻는다. 만약 빈 frame이 없다면 메모리에서 victim page을 선택하여 대체한다.(여기에서 다양한 Page Replacement Algorithm이 쓰인다.)

6. 운영체제는 참조된 page를 디스크에서 메모리로 로드(I/O)하고, disk I/O가 끝날 때까지 이 프로세스는 CPU를 빼앗긴다.

7. Disk I/O가 끝나면 page table이 업데이트되고 valid-invalid bit가 valid로 바뀐다. 그리고 ready queue에 프로세스를 넣어준다.

8. 프로세스가 CPU를 잡게 되면 다시 이어서 수행한다.

 

 

 

 

 

'TIL💡 > OS' 카테고리의 다른 글

[OS] 프로세스의 생성과 복사  (0) 2022.10.11
[OS] 프로세스의 구조  (0) 2022.10.11
[OS] DMA(Direct Memory Access)이란?  (0) 2022.10.10
[OS] Interrupt(인터럽트)  (0) 2022.09.30
API와 SDK  (0) 2022.05.31