Segmentation

김세영·2021년 6월 11일
0

Segmentation

프로세스는 다음과 같이 구성되어 있다.
Main program, Heap, Stack, Library Func, Symbol table, ...

Segment

Segment: 프로세스의 논리적 내용 단위

  • Text Code
    • Global Variables
  • Heap
  • Stack
  • Imported Library
  • ...

Segmentation: Virtual Address SpaceSegment로 나누어 관리하는 것

Segment Table

CPU에서 나온 Virtual Address를 Physical Address로
변환할 때 참조하는 테이블을 Segment Table이라 한다.

이 때 Page Table과는 Virtual Address를 다루는 방식이 다르다.
Virtual Address: <segment_number, offset>

Segment Table은 <Base, Limit>으로 구성되어 있다.

위 사진에서, sSegment Table의 인덱스를 나타낸다.
s를 참조해 Segment Table에서 해당 세그먼트의 limit을 가져오고,
limitd를 비교하여 d(offset)limit을 초과하는지 검사한다.
검사를 통과하면, base를 더해 실제 Physical Address를 얻게 된다.

Case: Intel Pentium


MMU안에 Segmentation Unit, Paging Unit이 존재한다.

CPU에서 Virtual Address가 나오면,
이 주소는 MMU의 Segmentation Unit으로 들어간다.
이 유닛을 거쳐 Linear Address라는 것이 나오는데,
이는 Page 기반의 주소이다.

Paging Unit은 전달받은 Linear Address를 통해
Page of Page Table, Page Table, frame을 순차적으로 참조한 후
마지막으로 원하는 Physical Address를 획득하게 된다.

Pentium Segmentation

Intel은 Segmentation Table을 Descriptor Table이라 한다.
이는 Local / Global Descriptor Table로 나뉜다.
(각각 LDT, GDT)
LDT: Private Segment (각각의 process마다 독립적인 데이터)
GDT: Shared Segment

s: Segment Number
g: LDT / GDT
p: Protection (read, write 권한)

profile
초보 iOS 개발자입니다ㅏ

0개의 댓글