1. Segmentation 기법
Paging 기법이 프로그램의 주소 공간을 같은 크기의 Page 단위로 쪼갠 것이라면, Segmentation 기법은 크기를 기준으로 자르는 것이 아닌 의미 있는 단위로 자르는 것을 말합니다.
프로그램이 의미 있는 단위인 Segment로 구성되고, 일반적으로는 하나 씩의 세그먼트가 code, data, stack으로 구성됩니다.
(1) Segmentation Architecture
Segmentation에서의 주소 변환은 페이징 기법과 비슷한 측면이 있습니다.
우선 논리적 주소를 Segment-number와 segment table안에서 얼마만큼 떨어져있는지 나타내는 Offset으로 구성합니다. 각 세그먼트 별로 서로 다른 물리적 메모리 주소에 올라갈 수 있기에 세그먼트 별로 주소 변환을 실행해야합니다. 그래서 Segment table을 두고 있습니다.
Segment table의 각각의 엔트리에는 Segment-table base register(STBR)와 Segment-table length register(STLR, Limit Register)가 있습니다. STBR은 세그먼트의 시작 위치를 나타내고, STLR은 세그먼트의 길이를 나타냅니다.
(2) Segmentation Hardware
CPU가 논리 주소를 주게 되면, 이 논리 주소는 Segment 번호(그림의 s)와 Segment Offset(그림의 d)으로 나뉩니다. 그리고 Segment Table의 시작 위치는 STBR이 가지고 있습니다. Offset 만큼 떨어진 곳에 가면 이 세그먼트가 물리적 메모리의 어디에 위치하는지에 대한 정보가 있습니다.
Segment Table은 Paging과 다르게 엔트리에 두 가지 정보를 가지고 있습니다.
우선, 물리적인 시작 위치 Base 외에 Limit이라는 세그먼트 길이를 가집니다. Paging 기법에서는 나눈 크기가 동일했지만, Segmentation 기법에서는 의미 단위로 나뉘어 있기 때문에 Table마다 길이가 다를 수 있기 때문입니다.
그리고 Paging 기법에서는 물리적 메모리도 같은 크기의 프레임으로 나뉘어 있기 때문에, 시작 주소가 Frame번호로 주어집니다.
하지만 Segment 기법에서는 Segment 크기가 각각 다를 수 있기 때문에 Segment의 시작 위치를 정확한 Byte 주소로 매겨주어야 합니다.
또 Segment의 크기가 서로 다르기 때문에 연속 할당 방식에서의 가변 분할 방식처럼 중간 중간 사용되지 않는 메모리 공간(Hole)이 생기게 됩니다.
주소 변환 시 유의 사항
주소 변환 시에 확인해야할 것이 두 가지가 있습니다.
우선, CPU로 부터 얻어진 논리 주소의 Segment번호가 STLR(프로그램이 사용하는 Segment 개수)보다 작아야 합니다. STLR 보다 큰 값의 Segment가 요청되었다면 주소 범위를 넘어가게 되어 Trap에 걸리게 됩니다.
그리고 Segment의 Length보다 Segment Offset 값이 더 작아야 합니다. Segment 길이가 100바이트인데 Segment Offset이 200바이트를 요청하게 되면 잘못된 요청이기 때문에 마찬가지로 Trap에 걸리게 됩니다.
Paging 기법과의 비교
Segment 기법은 Paging 기법에 비해 공유(Sharing)과 보안(Protection)에 있어서 매우 효과적입니다. Paging 기법은 동일한 크기의 Page 단위로 나누기 때문에 해당 작업이 불리합니다.
하지만 Segment는 의미 단위이기 때문에 예를 들어 Protection을 하는 경우 Read/Write 부분, Read-Only 부분 등으로 권한을 부여해야한다면, Code는 Read-Only, Data는 Read/Write 등으로 의미 단위로 권한을 부여하기가 훨씬 수월합니다.
정리
Segment 기법에서 Table의 엔트리 개수는 이 프로그램이 사용하는 Segment의 개수로 정해집니다. 위에서 설명한 주소 변환 과정을 다시 한번 정리해보겠습니다.
Segment Table의 해당 엔트리에 가면 Base 주소 값이 있습니다. 각각의 Base 주소 값은 해당 Segment의 물리적 메모리의 시작 위치입니다. 그리고 Limit 주소 값은 Base 주소 값에서 얼마나 떨어져있는지를 나타내는 Offset 값입니다.
Page 기법에서는 Page의 갯수가 많아 테이블을 위한 공간 낭비가 컸습니다. 하지만 Segmentation 기법에서는 Segment의 갯수가 매우 적습니다. 그렇기 때문에 Paging 기법과 비교한다면, 의미 단위로 처리해야하는 일(Protection, Memory)은 Segmentation이 매우 유리합니다.
참고자료
[KOCW 이화여대 반효경 교수님 - Memory Management 3]
https://core.ewha.ac.kr/publicview/C0101020140502151452123728?vmode=f
[ Operating System Concepts - Abraham Silberschatz ]
https://www.yes24.com/Product/Goods/89496122
'CS > 운영체제' 카테고리의 다른 글
[운영체제] 9. 가상 메모리 : 페이지 교체 알고리즘 (Virtual Memory 1) (0) | 2024.01.24 |
---|---|
[운영체제] 9. 가상 메모리 : Demand Paging (Virtual Memory1) (0) | 2024.01.22 |
[운영체제] 8. 메모리 관리 : Memory Protection, Inverted Page Table, Shared page (Memory Management 3) (0) | 2024.01.20 |
[운영체제] 8. 메모리 관리 : 불연속 할당, Paging 기법 (Memory Management 2) (0) | 2024.01.19 |
[운영체제] 8. 메모리 관리 : 연속 할당 (Memory Management 1) (0) | 2024.01.19 |