Soft Ware/Windows 구조와 원리

세그먼트

달려가보자 2011. 11. 9. 13:46
세그먼트 오프셋 목적
코드 세그먼트( CS ) IP 수행되어질 명령어의 위치 
스택 세그먼트( SS ) SP 또는 BP 스택 주소 참조
보조 세그먼트( ES ) 스트링 명령어를 위한 DI 스트링의 목적지 주소
데이터 세그먼트( DS ) AX, BX , CX, DX와 같은 데이터 주소 참조
범용 레지스터와 BX, DI, SI 

세그먼트 레지스터 종류와 구조

15 0
CS
DS
SS
ES
FS
GS

길이는 16bit이며 세그먼트 영역의 메모리에 주소를 지정
16bit 세그먼트 시스템에서는 좌측으로 4bit 시프트를 하고 오프셋 레지스터를 시프트한 세그먼트 레지스터와
합하여 위치를 정한다.

32bit에 들어서는 세그먼트 레지스터가 32bit로 커지는 대신 FS 와 GS가 추가 되었다.
16bit를 유지한 큰 이유는 16bit에서 32bit로 넘어가면서 호환성을 유지하기 위해서이고
아직까지 PC는 부팅시 16bit로 기동되어 OS적재시 MMU가 가동되면서 32bit로 전환된다.
32비트 전환시 16비트와는 다른 방식으로 활용되는데 과거의 세그먼테이션 기법 대신 
보호 모드에서 세그먼트 디스크립터 테이블의 인덱스 정보와 특권 권한 레벨 정보를 저장하는 용도로 사용


15 3  2  1    0
      INDEX   TI   RPL


인덱스 : 디스크립터 파일에서의 인덱스 
TI :  Table indicator 디스크립터 테이블이 Global(0) / Local(1) 인지 설정

RPL : 요구 특권 레벨 값. (00: 커널모드, 11: 유저모드)



*CS
함수나 제어문 같은 명령어들이 저장되는 코드 세그먼트의 세그먼트 셀럭터를 포함하고 있으며
이를 참조하여 EIP를 이용해 명령어의 주소를 계산

ex)

CS가 0x1b일 경우 2진값은  0b0000 0000 00001 1011 인데 TI가 0 RPL은 3 인덱스는 3번재 인덱스임을 알수 있다.

*DS
주로 전역, 정적 변수 데이터가 들어있는 데이터 세그먼트의 데이터 위치를 가르키응 레지스터

*SS
주소와 데이터를 일시적으로 저장할 목적으로 쓰이는 스택의 주소를 지정하는데 사용

*ES
추가 레지스터로 주로 문자 데이터의 주소를 지정하는데 사용

 

'Soft Ware > Windows 구조와 원리' 카테고리의 다른 글

함수 호출  (0) 2011.11.16
복귀 주소가 가지는 특징  (0) 2011.11.16
Windows 구조와 원리  (0) 2011.11.16
뮤텍스와 세마포어  (0) 2011.11.13
레지스터  (0) 2011.11.09