페이지 테이블: 두 판 사이의 차이

(새 문서: 분류: 메모리 관리 == 개요 == 컴퓨터 과학에서 페이지 테이블(page table)은 페이징 기법에서 사용되는 자료구조로서, 프로세스의 페이지 정보를 저장하고 있는 테이블이다. 하나의 프로세스는 하나의 페이지 테이블을 가진다. 테이블은 다음과 같이 색인과 내용으로 구성되어 있다. * 색인 : 페이지 번호. * 내용 : 해당 페이지에 할당된 물리 메모리(프레임)의 시작...)
 
편집 요약 없음
16번째 줄: 16번째 줄:
== Recursive Page Table ==
== Recursive Page Table ==
Recursive page table이란 페이지 테이블 말단에 자기자신을 향하는 주소를 할당하는 것을 말한다. 이 방식을 통해서 각각의 페이지 테이블에 대한 인덱스를 page table walking없이도 찾아 올 수 있다.
Recursive page table이란 페이지 테이블 말단에 자기자신을 향하는 주소를 할당하는 것을 말한다. 이 방식을 통해서 각각의 페이지 테이블에 대한 인덱스를 page table walking없이도 찾아 올 수 있다.
== 페이지 테이블 엔트리 ==
[[파일:Page table entry.png|섬네일]]
페이지 테이블 엔트리는 [[페이지 테이블]]에서 최하위에 위치한 실제 Physical memory를 가르치는 엔트리이다.
* S, Page Size: 하나의 페이지 엔트리가 가르키는 페이지 테이블 크기
* A, Accessed: 페이지가 읽히거나 써졌는지를 나타낸다. A비트는 CPU에서 의해서 정리되지 않고 OS의 특정한 목표로 인해서 clear된다.
* D, Dirty Flag: 페이지 테이블에 write이 있었는지
* C, Cached: 페이지 테이블을 TLB에 올려서 캐싱할것인지. (Page directory에서는 다른 비트)
* P, Present: 페이지가 존재하는지. 즉 Present란 현재 페이지가 Physical memory에 있다는 것을 나타낸다. 만약 swap-out되면 present는 clear되게 된다.
* R, Read/Write: R비트가 표시되어 있으면 read/write이 가능하며 아니면 read-only이다.
* U, User/Supervisor: U가 표시되어 있으면 CPL=3에서도 사용가능하나, 아니면 CPL=0에서만 사용가능하다.
* W, Write-Through: 페이지 교체 Policy를 Write-back 으로 할 것인가 아니면 Write-Back으로 할 것인가.
* G, Global: cr3 리셋에서 이 페이지를 TLB에서 제거하지 않는다.

2023년 2월 11일 (토) 02:50 판


개요

컴퓨터 과학에서 페이지 테이블(page table)은 페이징 기법에서 사용되는 자료구조로서, 프로세스의 페이지 정보를 저장하고 있는 테이블이다. 하나의 프로세스는 하나의 페이지 테이블을 가진다. 테이블은 다음과 같이 색인과 내용으로 구성되어 있다.

  • 색인 : 페이지 번호.
  • 내용 : 해당 페이지에 할당된 물리 메모리(프레임)의 시작 주소. 이 시작 주소와 페이지 주소를 결합하여 물리 메모리 주소를 알 수 있다.

리눅스에서는 4단계 페이지 테이블을

PGD PUD PMD PTE (global direcotry / upper directory / mid-level directory / table entry)

로 구분한다.

Page Directory
각각의 페이지 테이블은, 전체내용을 모두 적기에는 주소 공간이 부족함으로 recursive하게 정리하여 페이지 테이블에 대한 크기를 줄였다. (모든 데이터를 저장한다면 크기는 오히려 page directory를 사용한 쪽이 조금 더 클 것이다, 그러나 그런 경우는 절대 없음으로 sparse하게 분포되는 경우 이 방식이 훨씬 데이터 크기를 적게 유지할 수 있다.) 이중 말단을 제외한 부분을 page direcotry라고 한다.
Page Table entry
page table에서 끝에 위치한 부분을 의미한다.

Recursive Page Table

Recursive page table이란 페이지 테이블 말단에 자기자신을 향하는 주소를 할당하는 것을 말한다. 이 방식을 통해서 각각의 페이지 테이블에 대한 인덱스를 page table walking없이도 찾아 올 수 있다.

페이지 테이블 엔트리

Page table entry.png

페이지 테이블 엔트리는 페이지 테이블에서 최하위에 위치한 실제 Physical memory를 가르치는 엔트리이다.

  • S, Page Size: 하나의 페이지 엔트리가 가르키는 페이지 테이블 크기
  • A, Accessed: 페이지가 읽히거나 써졌는지를 나타낸다. A비트는 CPU에서 의해서 정리되지 않고 OS의 특정한 목표로 인해서 clear된다.
  • D, Dirty Flag: 페이지 테이블에 write이 있었는지
  • C, Cached: 페이지 테이블을 TLB에 올려서 캐싱할것인지. (Page directory에서는 다른 비트)
  • P, Present: 페이지가 존재하는지. 즉 Present란 현재 페이지가 Physical memory에 있다는 것을 나타낸다. 만약 swap-out되면 present는 clear되게 된다.
  • R, Read/Write: R비트가 표시되어 있으면 read/write이 가능하며 아니면 read-only이다.
  • U, User/Supervisor: U가 표시되어 있으면 CPL=3에서도 사용가능하나, 아니면 CPL=0에서만 사용가능하다.
  • W, Write-Through: 페이지 교체 Policy를 Write-back 으로 할 것인가 아니면 Write-Back으로 할 것인가.
  • G, Global: cr3 리셋에서 이 페이지를 TLB에서 제거하지 않는다.