GDT는 Protected Mode에서 커널이 메모리를 어떻게 사용하겠다라고 하는 설계서와 흡사하다.
* 그림 출처 : http://manavar.blogspot.kr/2011_05_01_archive.html
GDT의 디스크립터들은 위와 같은 형식으로 지정되는데 크게 Limit(20bit)와 Base Address (32bit) 를 지정한다. 그리고 각각의 Flag들을 지정하여 특권레벨, 세그먼트 권한 Limit 단위 등을 지정한다.
G비트 : 1이면 세그먼트 크기 4KB 단위, 0이면 바이트 단위
P비트 : 페이징과 관련이 있음
S비트 : 시스템 세그먼트일때 0, 코드 혹은 데이터 세그먼트일때 1
DPL : 특권레벨 => 커널(0) 유저(3)
X,C/D,R/W,A 는 Type으로 X가 0일때 데이터, X가 1일때 코드영역을 나타낸다.
A는 액세스 비트로 어떤 프로그램이 이 세그먼트에 접근했을 때 1로 세트된다. 0으로는 클리어해주지 않는다.
데이터 세그먼트일 때 C/D는 EXPAND DOWN, 코드 세그먼트일 때는 CONFORMING 여부
데이터 세그먼트일 때 R/W는 쓰기 권한, 코드 세그먼트일 때는 읽기 권한
데이터는 기본으로 읽기 권한을 갖고 코드는 기본으로 실행권한을 갖는다.
GDTR은 레지스터로 48비트의 크기를 갖는다.
16비트는 GDT의 크기, 하위 32비트에는 GDT의 시작 주소가 물리 주소로 들어간다.
- lgdt[포인터] 로 부른다.
'Study > Kenrel' 카테고리의 다른 글
PIC 초기화 (0) | 2015.09.24 |
---|---|
IDT(Interrupt Descriptor Table) (0) | 2015.09.24 |
Protected Mode 진입 (0) | 2015.09.23 |
Segment & Offset (0) | 2015.09.21 |
Real Mode & Protected Mode (0) | 2015.09.21 |