본문 바로가기
Computer Science/Operating System

[운영체제] Memory Management - Segmentation

by whatamigonnabe 2023. 3. 28.

Segmentation이란

Paging 기법은 같은 크기로 page를 나누는 반면, Segmentation 기법은 의미 단위마다 각각 다른 크기로 segment를 나누는 것입니다. 여기서 의미 단위는 code, data, stack 같은 것을 의미합니다.

이 방법을 통해서 얻는 장점은 하나의 segment가 동일한 목적을 가지고 있기 때문에, 프로세스 간에 공유를 하거나 segment별로 접근권한을 다르게 주는 것입니다. paging에서는 하나의 페이지에 여러 다른 기능들이 포함되기 때문에 이런 것을 하기가 어렵죠.

또한 segment의 물리 주소를 나타태는 table의 크기가 작습니다. paging에서는 page의 크기가 작기 때문에 table크기도 엄청 컸습니다. 반면, segment는 보통 5개 정도가 된다고 합니다.

반면 이것의 단점으로는 segment의 크기가 다르기 때문에, 가변 분할 방식처럼 물리 메모리 중간에 빈 공간들이 많이 생길 수 있습니다 .

 

How It Works

segment의 논리 주소는 두 가지 파트로 이뤄집니다. 1) segment number 2) offset. 전자는 몇 번째 세그먼트인지를 나태내고, 후자는 해당 세그먼트의 시작 주소에서부터 얼마나 떨어져있는지를 의미합니다.

 

우선 해당 segment number의 유효성을 검사합니다. Segment-table length register에 저장되어 있는 세그먼트의 길이 보다 segment number이 길지는 않는지 검사합니다. 만약 더 길다면 trap을 발생시켜 에러 처리합니다.

 

그리고  Segment-table base register (STBR)에 저장되어 있는 segment table의 물리주소에서 segment number를 더해, 해당 세그먼트의 물리주소를 찾아냅니다.

이 segment table은 다음 두 가지 정보를 가지고 있습니다. 1) base(세그먼트의 시작 물리주소) 2) limit(해당 세그먼트의 길이). 이 중 lmit 보다 offset이 더 큰지를 비교하여, 만약 더 크다면 trap을 발생시킵니다.

유효성 검사를 통과한다면, base에 offset을 더해 최종 물리 주소를 반환합니다.

 

Paged Segmentation 

Paging과 Segmentation을 혼합한 방법입니다. 이는 세그먼트 하나가 여러 개의 페이지로 이뤄져있습니다. 이 방법은 물리 메모리에 저장할 때는 여러개의 페이지로 쪼개져서 저장됨으로, Segmentation의 할당문제(빈 공간이 생기는 문제)를 해결할 수 있습니다. 그러면서도 Segementation의 장점(의미단위 구분을 통한 공유의 용이성과 권한부여의 용이성)을 유지할 수 있습니다.

 

이 방법에서는 각 segment마다 page table이 존재하며, 논리주는 segment number와 offset으로 구성되고, 이 offset은 다시 page number와 이 페이지의 offset으로 이뤄집니다. 위에서 살펴본 것과 비슷한 방법으로 segmentation table과 page table을 참고하여 물리 주소를 반환합니다.

 

운영체제는 관여하지 않는다.

지난 게시글(Memory Management - paging)과 이 번글(segmentation)에서는 '주소 변환'의 여러 방법에 대해서 다뤘습니다. 그런데 사실 '주소 변환'은 운여체제가 개입하지 않습니다. 만약 운영체제가 이를 담당하게 된다면, 프로세스가 cpu를 가지고 있다가 memory에서 instruction을 읽어올 때마다 운영체제에게 cpu를 넘겨주고 다시 프로세스로 넘겨주는 것이 엄청나게 많이 발생할 것입니다. 이러한 이유로 주소 변환은 하드웨어(MMU)가 담당하게 됩니다.