본문 바로가기
Security/Windows System

Segmentation과 Paging(2) - 세그먼테이션

by Winduck 2017. 6. 15.
반응형

1) segmentation정의

- 사용자 지정 메모리로부터 Linear Address(메모리주소 + 세그먼트 레지스터)까지 얻어지는 과정



2) Segmentation과정

 ① GDTR(Global Descriptor Table Register) 참조하여 GDT(Global Descriptor Table) Base주소를 찾습니다.



  - GDTR GDT Base Address 얻습니다.

  - GDTR Size (Table Limit = Descriptor 개수 X 8-1이므로 8192 ) : 첫번째 Descriptor는 null Descriptor임 


Segment Selector Index GDT[Index]하여 SegmentDescriptor 찾습니다.

  GDTR로부터 얻은 GDT Base Address로부터 GDT 배열주소를 얻습니다.

  이후 Segment Register 저장된 Segment Selector(cs, ss, ds) 인덱스로 Segment Descriptor  참조합니다.



- Base Address (16bit ~ 39bit , 56bit ~ 63bit) : 최종적으로 세그먼트를 통해 메모리에 접근할때 offset 더해지는

- S : system bit

    -> 0 : LDT 또는 CallGate 같은 특수한 목적으로 사용되는 시스템 디스크립터

    -> 1 : 코드세그먼트,데이터세그먼트,스택세그먼트등

- Type : 세그먼트 타입(Code/Data) 세그먼트의 속성(읽기/실행) 정보를 담습니다.



타입에 따른 속성은 다음의 표와 같습니다.



Segment  Descriptor BaseAddress영역과 Offset 더하여 Linear Address 생성합니다.



Segment

Offset(메모리주소)

목적

코드 Segment( CS)

IP

수행되어질 명렁어의 위치

스택 Segment(SS)

SP또는 BP

스택 주소 참조

데이터 Segment(Data Segment)

AX,BX,CX 같은 범용레지스터와 DI,SI

데이터주소 참조

보조 Segment(ES)

스트링 명령어를 위한 DI

스트링 목적지주소



3) 멀티테스킹환경

 ○ LDT(Local DescriptorTable)참조 과정



 - LDT : Task당 독립적으로 존재하는 Descriptor Table

 - LDT Descriptor : 프로세스당 할당되는 LDT의 정보를 담은 Descriptor ( GDT상에 존재 )

  ( DPL : 00 / S : 0 / Type : 0010b )


 

 - LDTR( Segment Selector )

Index GDT or LDT의 Index를 참조

TI = 0 : GDT사용 / 1 : LDT사용

RPL : Descriptor 요구 특권레벨


 


반응형

댓글