본문 바로가기
컴퓨터 일반/기초

세그먼테이션 (Segmentation)

by ITPro 2010. 12. 28.

코드가 있는 메모리 영역과 데이터가 있는 메모리 영역을 혼합하여 사용하면 일반 데이터를 인스트럭션 등으로 해석해버리는등의 문제가 발생할 소지가 다분하다.
따라서 코드 영역, 데이터 영역등을 구분하여 사용하는데 이것을 세그먼테이션이라고 한다.

페이징과는 달리 한 구획의 크기가 일정하지 않고 단순히 크기대로 자르는 대신 사용 용도에 따라 나누어지기 때문에 프로그래머는 세그먼트 레지스터만 설정하면 절대 주소 체계로 프로그래밍이 가능하고 사용용도 또한 논리적으로 제약이 가능해 메모리 액세스에 대한 차등 권한을 줄 수 있다.

실제로는 세그먼테이션과 페이징의 장점을 결합하여 사용된다.
CPU가 생성한 논리주소는 세그먼트 레지스터(16bit)와 오프셋(32bit)으로 구성되고 세그먼트 레지스터의 인덱스를 사용하여 세그먼트에 관련된 내용을 요약해 놓은 세그먼트 디스크립터를 찾는다.

그 후 세그먼트 디스크립터의 Base Address와 논리주소의 오프셋 부분을 합쳐서 두번째 논리주소를 형성하게 되고 이 논리주소를 이용하여 페이징을 하게된다.


세그먼트 디스크립터는 세그먼트가 가지는 권한, 세그먼트의 시작 주소,세그먼트의 최대 크기등의 정보를 가지고 있다.

Segment Register (Selector)

Index (13bit) TL (1bit) RPL (2bit)

Index
-디스크럽터 테이블의 어떤 엔트리에 접근할지 결정한다.

TL
-GDT와 LDT중 어느 것을 접근할지 결정한다.

0 GDT
1 LDT

RPL (Request Privilege Level)

-디스크립터 권한 레벨 ( 0:커널모드 ~ 3:사용자모드 )
Descriptor Table

GDT(Global Descriptor Table)
-모든 프로그램이 참조 가능한 디스크립터 테이블
LDT(Local Descriptor Table)
-해당 프로세스만 참조 가능한 디스크립터 테이블

두 테이블은 각각 8192개의 갯수를 가지고 있으며 디스크립터 테이블의 시작주소를 가지고 있는 GDTR과 LDTR 레지스터를 이용해 참조한다.



Descriptor Table


Base Address
-세그먼트 시작 주소를 나타내는 32bit 값

Segment Limit
-세그먼트 크기를 나타내는 20bit 값

G (granularity)
-0 : 64KB
-1 : 4GB

DPL(Descriptor Privilege Level)
-세그먼트 권한 레벨을 정의하는 2bit 값

P (Present)
-세그먼트의 유효성 체크

S(system)
-0 : CS,DS와 같은 어플리케이션 세그먼트
-1 : 시스템 세그먼트

D/B
-기본 코드 오퍼랜드 사이즈
0 : 16bit
1 : 32bit

AVL (available)
-프로그래머에 의해 사용이 가능한 공간

Type
-세그먼트 디스크립터 타입 속성을 나타내는 4bit 값
※Type 속성 값

DPL(Descriptor Privilege Level)
-디스크립터 권한 값

반응형

'컴퓨터 일반 > 기초' 카테고리의 다른 글

apt-get을 이용한 APM 설치  (0) 2012.07.18
페이징 (Paging)  (0) 2010.12.28
Tomcat & JDK 설치 후 설정  (0) 2010.11.27
IA-32 프로세스 구조  (0) 2010.11.27
메모리 (Memory)  (0) 2010.11.27