GDT (Global Descriptor Table)
-------------------------------------------------------------------------------
Limit 의 15 ~ 0 비트
-------------------------------------------------------------------------------
Base Address 의 15 ~ 0 비트
-------------------------------------------------------------------------------
P | DPL | S | TYPE | Base Address 의 23~16 비트
-------------------------------------------------------------------------------
Base Address의 31~24 비트 | G | D | 0 | AVL | Limit의 19~16 Bit
-------------------------------------------------------------------------------
Limit (20 Bit)
세그먼트의 크기(한계점). 오프셋은 이 숫자를 넘어갈 수 없음.
넘어가게 되면 GP fault (Protected Mode 규약 위반) 발생.
Base Address (32 Bit)
세그먼트의 시작 주소.
G (1 Bit)
Limit 의 단위
0 : Byte
1 : 4KB
예) Limit 가 0xFFFFF 일 때
0 : 1 MB
1 : 0xFFFFF * 0xFFF (4KB) = 0xFFFFFFFF (4GB)
P (1 Bit)
메모리상에 존재하는지를 나타내는 값
페이징 기능과 관련
DPL (2 Bit)
Intel x86 계열 CPU에서의 레벨 표시 (0 ~ 3)
0 : 커널 레벨
3 : 유저 레벨
S (1 Bit)
0 : 시스템 세그먼트
1 : 코드 혹은 데이터 세그먼트
Type (4 Bit)
TEWA
0000 : DATA , 읽기 전용
0001 : DATA , 읽기 전용, 액세스
0010 : DATA , 읽기 / 쓰기
0011 : DATA , 읽기 / 쓰기 , 액세스
0100 : DATA , 읽기 전용, EXPAND DOWN
0101 : DATA , 읽기 전용, EXPAND DOWN, 액세스
0110 : DATA , 읽기 / 쓰기, EXPAND DOWN
0111 : DATA , 읽기 / 쓰기, EXPAND DOWN, 액세스
T – Data Segmant (0) / Code Segment (1)
E – EXPAND UP(0) / EXPAND DOWN(1)
W - 읽기 (0) / 읽기/쓰기 (1)
A – 세그먼트에 접근 시 CPU 가 1로 셋팅. 커널이 0으로 다시 셋팅 해야 함.
TCRA
1000 : CODE, 실행 전용
1001 : CODE, 실행 전용, 액세스
1010 : CODE, 실행/ 읽기
1011 : CODE, 실행/ 읽기. 액세스
1100 : CODE, 실행 전용, CONFORMING
1101 : CODE, 실행 전용, CONFORMING, 액세스
1110 : CODE, 실행/ 읽기, CONFORMING
1111 : CODE, 실행/ 읽기, CONFORMING, 액세스
T – Data Segmant (0) / Code Segment (1)
C – Conforming 미지원 (0) / 지원 (1)
R – 실행 O, 읽기 X (0) / 실행, 읽기 O
A – 세그먼트에 접근 시 CPU 가 1로 셋팅. 커널이 0으로 다시 셋팅 해야 함.