Programming/System

GDT (Global Descriptor Table)

appHunter 2009. 6. 17. 14:38

-------------------------------------------------------------------------------
                         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으로 다시 셋팅 해야 함.