[OS] Page Table

0
post-thumbnail

Page Table

  • 페이지 테이블은 배열과 같다.
  • 배열처럼, 인덱스가 페이지 번호를 가르키고, 그 배열에 담고 있는 숫자가 매핑할 프레임 번호인 것이다.
  • 페이지 테이블을 이용해서 가상 주소를 물리적 주소로 변경함.

페이지 번호

논리메모리를 자른 페이지를 셀 때에는 page number이라고 하고, 물리 메모리를 자른 프레임을 셀 때에는 frame number이라고 합니다.

페이지 크기

  • 페이지 크기는 512bytes에서 8192bytes까지 될 수 있는데, 4096bytes가 보통 전형적인 값임.(4kb). 4kb는 2의 12승 이므로 페이지 하나당 12bits를 차지합니다.
  • n개의 페이지를 가지는 프로그램을 돌리기 위해서는 n개의 프레임이 있어야함

페이지 오프셋

'page0'은 결국 주소로 따지면 0에서 2의 12승까지 값의 주소로 있는것임. page0의 0번 오프셋이라고 하면 2의 12승 위치의 논리주소가 되는것이고 page1의 0번 오프셋이라고 하면 2의 13승 위치의 주소를 가리킴.
즉 logical address의 정확한 위치 표시 가능

하나의 프로세스가 가질 수 있는 최대 크기

32비트 프로세스라 가정하고 페이지 크기가 4kb라고 가정하면
한번에 CPU가 2의 20승 개수의 페이지 번호를 구분 할 수 있다.

즉, 32비트 프로세서일때 하나의 프로세스가 가질 수 있는 logical address 전체 크기는 2의 32승, 페이지의 최대 개수는 2의 20승이 되는 것.
2의 32승은 4gb이기 때문에 32비트 프로세서는 논리적으로 4기가 까지 가능.

Page Table 문제점

  • 램에 저장해 빠르게 참조해서 주소 변환을 하기 때문에 메모리 접근하기 위해서 메모리를 두번 접근해야함. -> 비효율적
  • 캐시메모리인 TLB를 써서 해결

TLB

  • Translation lookaside buffer
  • 페이지 테이블 속도 개선을 위한 소형의 하드웨어 캐시 메모리
  • 접근 속도가 굉장히 빠름.
  • TLB내의 각 항목(entry)는 키(key)와 값(value)로 구성
  • TLB가 있는 경우 TLB에 페이지 번호를 검색 후 존재하는 경우 프레임 번호를 빠르게 가져옴.
  • 없는 경우는 페이지 테이블 이용.

기본알고리즘

  1. Translation요청이 들어오면 주소값에서 VPN(Virtual page number)을 추출함
  2. 해당하는 Translation이 TLB에 있는지 확인
  3. TLB에 있다면 VPN을 PFN으로 변환하여 반환(TLB hit)
  4. TLB에 없다면 Page Table에 접근하여 PFN으로 변환하여 반환 (TLB Miss), 그 후 해당 Translation을 TLB에 업데이트함.

0개의 댓글