1 분 소요

Paging

세그멘테이션의 크기는 매우 가변적 입니다. 이는 External fragmentation 을 발생시키고 memory compaction 해주어야 했습니다. 페이징은 이때 새그멘테이션이 갖고 있던 여러가지 문제를 해결하기 위해 고안된 방법입니다. 페이징이란 메모리를 고정된 크기의 조각들로 미리 잘라두어 메모리의 할당이 필요할때 그 크기 단위로 제공헙나더. 이것을 page frame 이라고 명칭합니다. 힙과 스택을 구분할 필요 없이 페이지 프레임 단위로 메모리를 할당해 주면 됩니다. paging을 한다면 free space management 가 매우 간편해집니다.

Page Table

virtual address 와 물리주소의 페이지를 mapping 해주기 위해 존재합니다. page table 은 cpu에 있지 않고 memory 에 존재합니다.

virtual address

  • virtual page number + offset
    예를들어 6비트를 기준으로 했을때 2비트는 VPN, 4비트는 offset 으로 사용됩니다. 즉 4개의 페이지로 구성될 수 있으며 16바이트의 페이지 사이즈를 갖습니다.

address translation

offset 은 그대로 유지됩니다. 페이지 테이블로 인해서 VPN -> PFN 으로 바뀌게 됩니다

size of page table

32 비트 시스템으로 가정하겠습니다. 20 비트의 VPN 과 12비트의 offset을 갖습니다.

  • 4KB 만큼의 offset을 표현할 수 있습니다.
  • 페이지 테이블 안에는 총 엔트리 갯수는 2^20 개가 존재하게 됩니다.
  • 테이블의 인덱스 값이 곧 vpn의 주소값이 됩니다. 일방적으로 페이지테이블의 엔트리 한개의 크기도 32비트를 사용하게 됩니다. 매핑되어있는 PFN 외에도 추가정보가 필요합니다. 엔트리 한개는 4바이트이므로 페이지 전체의 크기는 2^20 * 4 bytes = 4MB 입니다. 이 4MB는 한 address space 를 표현하기 위해서 필요한 페이지 테이블의 사이즈 입니다.

where are page tables stored?

메모리에 저장되어있고 운영체제가 이를 관리합니다. 하지만 Address Translation 은 CPU가 담당합니다.
즉, CPU가 정의해놓은 페이지테이블의 포맷들을 따라서 메모리에 구성하는 역할을 합니다.

PTE 의 PFN 외에 다른 추가 정보들

CPU 마다 포맷, 정보등이 모두 제각각 입니다.

  • valid bit : 매핑이 되어있는지 여부 - 모든 사용되지 않는 space 는 invalid 하게 mark 되어 있습니다
  • protection bits : readable writable executable 여부
  • present bit : 해당 페이지가 physical memory 혹은 disk 에 있는지의 여부
  • dirty bit : operation 이 발생한 페이지
  • referene bit - 프로세스의 페이지 접근 여부

paging 의 성능 속도

페이지 테이블은 cpu 가 아닌 메모리에 저장되어 있습니다. page-table base register 는 페이지 테이블의 시작주소를 담고 있습니다. 메모리에 접근하다보니 앞선 레지스터로 Translation 이 끝나는 방법들에 비해서 속도가 느립니다.

3번째 영상

업데이트: