개요

Global Descriptor Table(GDT)는 CPU에게 memory segment에 대한 정보를 포함하고 있다.

GDT는 lgdt명령어를 통해서 로딩되며, 전체 GDT Table은 각각의 gdt descriptor을 포함하고 있다. lgdt를 통해서 로딩되는 GDTR (gdt register)는 GDT Description strcture를 위치하게 된다. gdt descriptor은 size와 offset으로 구성되게 되는데, size는 전체 gdt table의 크기 -1 (왜냐하면 0은 무의미 하기 때문에), 그리고 offset은 table자체의 linear address를 가르킨다. 즉 IDTR과 같이 GDTR에는 GDT 테이블의 길이와 GDT테이블의 위치에 해당하는 Linear Address가 저장되어 있다.

GDTR -> SIZE and ADDRESS -> GDT TABLE -> GDTE1, GDTE2, GDTE3 ... (Max length uint16_t)

구조

GDT Table은 GDT Entry로 구성되어 있다. 각각의 GDT Entry는 https://wiki.osdev.org/Global_Descriptor_Table여기 참고!

Long mode

gdt의 segmentation 기능은 longmode에서 완전히 꺼지고 대신 각각 배정된 dpl이랑 type 이것만 적용되게 된다. gdt의 longmode에서의 역활은 dpl, type이랑 tss segmentation 제공 이렇게 되는 것이다. 제공하는 tss도 64비트에서는 그냥 현재 user process의 rsp저장 정도만 되는거고, 이렇게 복잡하게 제공하는 이유는 이전 버전 호환성과 software적으로 구현하는 것이 훨씬 빠르게 작동하기 때문이다.