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 |