프로세스는 다음과 같이 구성되어 있다.
Main program, Heap, Stack, Library Func, Symbol table, ...
Segment: 프로세스의 논리적 내용 단위
- Global Variables
Segmentation: Virtual Address Space를 Segment로 나누어 관리하는 것
CPU에서 나온 Virtual Address를 Physical Address로
변환할 때 참조하는 테이블을 Segment Table이라 한다.
이 때 Page Table과는 Virtual Address를 다루는 방식이 다르다.
Virtual Address: <segment_number, offset>
Segment Table은 <Base, Limit>으로 구성되어 있다.
위 사진에서, s
는 Segment Table의 인덱스를 나타낸다.
s
를 참조해 Segment Table에서 해당 세그먼트의 limit
을 가져오고,
그 limit
과 d
를 비교하여 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 권한)