R&D/OS

GDT vs .LDT

sunshout 2013. 11. 8. 18:46

ㅇ GDT 란

GDT(global descriptor table)란 Real Mode 에서 Protected Mode 로 변화되면서 추가된 테이블로써 해당 세그먼트의 베이스 주소와 세그먼트 제한 길이 등의 정보가 들어있다. 제한 길이가 들어있기 때문에 보호기능이 제공되며, 베이스 주소를 제공하기 때문에 16bit에서 24-31bit까지의 베이스 주소를 확장시킬수 있다. 그럼으로써 1b에서 4g까지 자유롭게 설정이 가능하게 된다. 또한 이 테이블에 권한설정까지 적어 넣을 수 있기 때문에 메모리에 대한 권한까지 부여할 수 있게 된다.

 

ㅇ GDT vs LDT

 - GDT(Global Descriptor Table) : 커널모드에서 사용하는 테이블 / 커널모드용 하나 생성 / 전체내용

 - LDT(Local descriptor Table) : 사용자모드에서 사용하는 테이블 / 각 프로세스별로 만들어지는 테이블


테이블 시작 위치는 각각 GDTR, LDTR이라는 레지스터가 가리키고 있다.


ㅇ GDT와 LDT의 관계

- LDT의 위치를 나타내는 세그멘트 디스크립터를 GDT 안에 저장한 뒤에, 그때의 인덱스를 LDTR 레지스터에 넣어주면, CPU는 LDT를 읽어들임으로써 테스크의 전환이 일어나게 됨


ㅇ IDT(Interrupt Descriptor Table)

- 인터럽트가 발생했을 때 처리해주는 함수의 루틴을 포함하는 테이블

- 프로세스가 여러개라면 IDT도 프로세스 개수에 맞춰서 존재함 


인용:

http://taesun1114.tistory.com/entry/IDT-LDT-GDT-SSDT

http://cafe.naver.com/doprogrammer.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=825