2011/08/16 01:36
[내 컴퓨터/OS]
Protected 모드로 진입을 위한 Global Descriptor Table 등록을 위한
Base Address : 이 세그먼트의 시작 주소, 물리주소로 하위 16비트, 상위 16비트
Limit : 세그먼트의 한계점, 만약 넘어간다면 GP fault(Protected Mode 규약 위반) 이 발생한다. 20비트
G비트 : 0이면 세그먼트의 크기를 바이트 단위로 하며, 1이면 4KB 단위로 한다.
: 만약 Limit 이 0xFFFFF 이고, G비트가 1일때 0xFFFFF x 0xFFF = 0xFFFFFFF (4GB) 영역을 갖는다.
P비트 : 메모리 존재여부, 메모리 관리 루틴으로 사용됨, 페이징 기능과 관련됨, 처음에는 1로 set 한다.
DPL비트 : 2비트 커널, 유저레벨인지를 나타낸다. x86계열 CPU에서는 0 ~ 3레벨만 사용한다. DPL 값이 0일때
커널을 3일때 유저레벨을 타나낸다.
S비트 : 세그먼트가 시스템(0), 코드 혹은 데이터(1) 세그먼트를 지정한다.
D비트 : 이 세그먼트가 16비트인지 32비트인지를 표현한다.
Type : 4비트로 구성됨 아래와 같다.

D비트 : 이 세그먼트가 16비트인지 32비트인지를 표현한다.
Type : 4비트로 구성됨 아래와 같다.
마지막 A 비트는 어떤 프로그램이 이 세그먼트에 접근했을 때 CPU가 이곳을 찾아 A 비트를 1로 바꿔줍니다.
그러나 CPU는 이 비트를 0으로 클리어해 주지는 않습니다. 커널은 메모리 관리시 이 비트가 1이 되었는지 조사 또는 액세스된 세그먼트 디스크립터를 찾아 이 A 비트를 어느 시간이 지나면 0으로 하거나 하는일을 수행한다.
첫번째 비트는 : 데이터 또는 코드일때를 뜻한다.
두번째 E 비트 : 데이터 비트일때 EXPAND DOWN 또는 EXPAND UP를 뜻한다. 이는 세그먼트를 스택으로
사용할때 동적으로 변하도록 만들기 위한 장치이다.
이 비트가 1일때 프로그램도중 세그먼트의 Limit 값을 바꾸면 스택의 제일 밑에 스택 공간이 추가된다.
이 비트가 1일때 프로그램도중 세그먼트의 Limit 값을 바꾸면 스택의 제일 밑에 스택 공간이 추가된다.
스택을 위한 세그먼트는 항상 데이터 세그먼트여야 하고, 읽기/쓰기 모두 가능해야 한다. 프로그램 실행중
쓰기가 불가능한 세그먼트를 스택으로 사용한다면, 즉 SS 레지스터에 쓰기가 불가능한 데이터 세그먼트를로드할때 #GP 폴트가 발생한다.
GDT 등록시 첫번째 디스크립터는 형식상 항상 NULL 디스크립터를 기재해야 한다.
CPU의 GDTR 레지스터(48비트)
[16비트 GDT의 크기][GDT의 시작점 주소 32비트] 를 등록한다.
nasm에서 lgdt명령 및 gdtr의 주소를 인자로 gdtr레지스터에 48비트를 등록한다.
아래는 만들면서 배우는 OS커널 의 구조와 원리 예제의 한부분이다.
쓰기가 불가능한 세그먼트를 스택으로 사용한다면, 즉 SS 레지스터에 쓰기가 불가능한 데이터 세그먼트를로드할때 #GP 폴트가 발생한다.
GDT 등록시 첫번째 디스크립터는 형식상 항상 NULL 디스크립터를 기재해야 한다.
CPU의 GDTR 레지스터(48비트)
[16비트 GDT의 크기][GDT의 시작점 주소 32비트] 를 등록한다.
nasm에서 lgdt명령 및 gdtr의 주소를 인자로 gdtr레지스터에 48비트를 등록한다.
아래는 만들면서 배우는 OS커널 의 구조와 원리 예제의 한부분이다.
질문 : 만들면서 배우는 OS 커널 의 구조와 원리에서 Protected 모드 전환을 하기위해 GDT(Global Descriptor Table)를 등록하는데 16비트에서 ->32비트로 변경한다. 하지만 GDT 의 D 플래그는 세그먼트가 16비트인지 32비트인지를 판단한다. 그렇다면 16비트 머신에서도 Protected 모드로 전환이 가능한것인가?
질문 : 또한 Offset를 최대로 했을때 4GB 까지 할수 있다. Base Address가 32비트로 표현이 가능하다.
Base Address로부터 4GB까지 메모리 할당이 가능하다는것인데..
그렇다면 64비트 머신에서의 GDT는 형태가 다른가?
Base Address로부터 4GB까지 메모리 할당이 가능하다는것인데..
그렇다면 64비트 머신에서의 GDT는 형태가 다른가?



