본문 바로가기
Computer Science/Operating System

Segmentation이란?

by JuHy_ 2019. 4. 23.

Segment란?

Segment란 일정한 크기의 연속된 주소공간을 말하며 Code, Heap, Stack Segment로 구분한다.

이와 같이 영역을 나누는 것을 Segmentation이라 한다.

 

 

기존 할당 방식의 문제점

기존의 메모리 할당 방식에서는 Heap과 Stack영역 사이에 빈 공간을 두어 Heap이나 Stack이 모자랄 경우 확장할 수 있도록 하였다. 하지만 Heap과 Stack을 확장할 필요 없는 프로세스들이 많아지게 된다면 이와 같은 할당되었지만 사용하지 않는 공간이 많아지게 되어 메모리 낭비가 발생한다(Internal Fragmentation, 내부 단편화).

 

 

새로운 Segment 배치 방법

따라서 위 그림과 같이 Segment를 배치하게 되면, 사용하지 않는 공간이 줄어들어 메모리를 효율적으로 사용할 수 있다.

이와 같이 Segment를 배치했을 때의 Address Translation 방법을 알아보자.

 

 

Address Translation on Segmentation

위 그림은 14bit Virtual Address이다. 앞의 2비트는 어느 Segment에 위치해 있는지를 나타내고 뒤의 12비트는 Offset으로 해당 Segment 내에서 몇번째 메모리에 위치해 있는지를 나타낸다.

 

▶ Physical Address  = Base + Offset

 

따라서 물리적 주소는 각 Segment의 Base값에 Offset을 더하여 구한다.

 

※ Stack의 경우 영역이 위로 확장하기 때문에 Base를 마지막 메모리로 지정하며, Offset은 음수로 계산해야 한다.

예) Base = 28KB / Offset = 3KB 라면 Offset에 최대 크기(4KB라 하자)를 빼서 음수로 변환한다. 따라서 이 Virtual Address의 Offset은 -1KB가 되어 실제 Physical Memory는 28 - 1 = 27KB이다.

 

 

Internal Fragmentation & External Fragmentation

내부 단편화(Internal Fragmentation)란?

- 메모리를 할당받았지만 프로세스가 사용하지 않는 공간이 많아 실제 빈 공간은 있지만 메모리를 할당하지 못하는 현상

 

외부 단편화(External Fragmentation)란?

- 할당받지 않은 메모리 공간이 작고 고르게 분포되어 있어 실제 빈 공간은 있지만 메모리를 할당하지 못하는 현상

'Computer Science > Operating System' 카테고리의 다른 글

Paging이란?  (0) 2019.04.23
Free-Space Management  (0) 2019.04.23
Virtual Address Space와 Address Translation  (0) 2019.04.23
Memory API란?  (0) 2019.04.22
CPU Scheduling 기법  (0) 2019.04.22