[Computer Science]/[운영체제(OS)]

[운영체제(OS)] 10-1) Demand Paging

극꼼 2023. 3. 22. 18:02
반응형


<가상 메모리(Virtual Memory)>

: 기존에는 프로세스 전체를 메모리에 로드했는데, 프로세스가 코드의 일부분에서만 시간을 사용하여 차지한 메모리보다 더 작은 부분을 사용했기 때문에 비효율적이었고 메모리 용량보다 더 큰 프로그램은 실행시킬 수 없었습니다. 가상 메모리는 프로세스를 실행할 때 필요한 일부 메모리만 로드하고 나머지는 보조기억장치에 둬서 이런 물리적 메모리 크기의 한계를 극복합니다.

 

가상 메모리를 통해 프로세스는 전체가 물리적 메모리에 있는 것처럼 보이되, 작은 양의 메모리를 차지하며 프로세스를 수행할 수 있게 되었고, 더 많은 프로그램을 동시에 실행할 수 있게 되었습니다.

 


<Demand Paging>

: 현재 필요한 page에만 메모리를 올리는 것입니다. CPU 이용률과 처리율이 높아지고, 더 많은 사용자를 수용할 수 있습니다.

 

* valid-invalid bit : page table에서 해당 page가 메모리에 있는지를 나타냅니다. bit가 invalid면 page가 물리적 메모리에 없다는 것을 의미합니다.

* 처음에는 모든 page entry를 invalid로 초기화합니다.

* 주소 변환할 때 bit가 invalid로 되어있으면 page fault 오류를 발생시킵니다.

 

아래는 주소를 변환하는 과정입니다.

 

* TLB(Translation Look-aside Buffer) : CPU는 메인 메모리에 2번 접근(page table에 접근, page table을 기반으로 한 실제 메모리에 접근)해야 원하는 데이터를 얻을 수 있는데, 이런 접근을 줄이고자 나온게 TLB입니다. 하드웨어적으로 지원하며, 최근에 읽은 page table을 임시 저장하는 cache 역할을 합니다. 

 

1. 하드웨어가 TLB를 확인합니다.

2. TLB 를 탐색합니다.

  • TLB hit(캐싱해둔 TLB 있음) -> 바로 물리적 주소에 접근 -> 끝!
  • TLB miss => page table 확인 -> 3번

3. page table의 valid-invalid bit를 확인합니다.

  • valid -> 주소를 변환하여 TLB에 page를 올림 -> 끝!
  • invalid -> page fault 발생 -> 4번

4. MMU(Memory Management Unit)가 운영체제에 Trap을 걸고, 커널 모드가 되어 page fault handler를 invoke 합니다.

5. 유효하지 않은 참조면 프로세스를 종료시키고, 유효하다면 빈 page frame을 얻습니다. 빈 page frame이 없으면 메모리에서 victim page를 선택해서 대체합니다.

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

7. disk I/O가 끝나면 page table이 업데이트되고, valid-invalid bit가 valid로 바뀝니다. 이후 ready queue에 프로세스를 넣어줍니다.

8. 프로세스가 CPU를 사용하게 되면 이어서 수행합니다.

 

 

5번에서 어떤 frame의 victim page를 대체할지를 정해야하는데, 다음 포스팅에서 이에 대한 알고리즘들을 알아보겠습니다. 

 

 

반응형