[운영체제]메모리 Segmentation과 Paging 기법 (feat. Fragmentation)

JANG SEONG SU·2023년 8월 30일
0
post-custom-banner


1. Segmentation(세그멘테이션)

Segmentation 이란?

프로세스를 서로 크기가 다른 논리적인 블록 단위인 Segment(세그먼트)로 분할하여 메모리에 할당하는 기법이다.
이때 핵심은 각 Segment는 쪼개지지 않고 연속적인(contiguous allocation) 메모리 공간에 할당된다.

세그먼트들의 크기가 서로 다르기 때문에 프로세스가 메모리에 적재될 때, Segment Table에 의해 빈 공간을 찾아 할당한다.

하지만 Segmentation의 치명적인 단점은 외부 단편화(External Fragmentation)이 발생한다는 점이다.

외부 단편화(External Fragmentation)

위 그림을 보면 메모리의 두 Empty의 공간을 합치면 프로세스 C가 메모리에 적재될 수 있듯이, 충분한 메모리 공간이 있음에도 그 공간들이 연속적이지 않을 때, 외부 단편화가 발생한다.

이렇듯 놀고 있는 메모리 공간이 있지만, 이를 활용하지 못해 효율적이지 않다.

Compaction(압축)

Compaction은 위 외부 단편화의 해결법으로 등장하였다.

위 그림처럼 흩어져 있는 메모리 빈 공간을 합치는 방식을 Compaction이라고 한다.
하지만 빈 메모리 공간을 합치기 위해 1,3,5번 프로세스를 메모리의 다른 공간으로 욺기는 것은 매우 어려운 일이다. 1,3,5번 프로세스를 욺기기 위해서는 Disk와 같은 Secondary Storage에 1,3,5번 프로세스를 임시로 복사한 뒤, 메모리를 청소하고, Disk에 잠시 복사했던 프로세스들을 가져와야 한다.

Disk의 접근 속도는 느리고, 이러한 과정을 거치는 것은 결국 좋은 방법이 아니다.

따라서 Compaction이라는 개념만 알아두고, 실제로는 앞으로 다룰 Paging기법으로 외부 단편화를 보완하였다.

📗Segmentation vs Fragmentation

  • Segmentation : 서로 다른 크기의 블록 단위인 세그먼트로 분할하는 기법
  • Fragmentation : 단편화. 사용 가능한 메모리가 충분하지만 사용할 수 없는 상태

이 둘의 용어를 혼동하지 말자


2. Paging(페이징)

Paging 이란?

프로세스의 주소 공간을 고정된 사이즈Page단위로 나누어 메모리에 불연속적으로 할당하는 기법이다.

Segment를 메모리에 연속적으로 할당한 Segmentation과 다르게, Paging에서는 Page불연속적으로 할당하여 외부 단편화를 방지하였다는 점을 기억해두자.

위 그림을 보면 ProcessA ProcessBPage라는 단위로 쪼개어져 Paging Table에 의해 불연속적으로 메모리에 배치된다. 그림을 보면 왜 Paging외부 단편화가 발생하지 않는지 알 수 있다.

Page와 Frame

Page Frame는 크기가 같고, 어떤 대상이냐에 따라 구별하기 위해 명칭만 다르다.
메모리는 Frame이라는 고정크기로 분할되고, 프로세스는 Page라는 고정크기로 분할된다.

하지만 Paging 기법도 여전히 문제가 있다. 바로 내부 단편화가 발생할 수 있다.

내부 단편화(Internal Fragmentation)

위 그림에서는 Process로 나누었지만 이를 Page라고 가정하고 본다면, 메모리에 할당 받은 Page가 실제로는 모두 쓰이지 않고 일부가 낭비되고 있는 것을 내부 단편화라고 한다.

이는 프로세스가 할당받은 메모리 공간이 실제 그 크기보다 크기 때문에 발생한다.

예를 들어, 프로세스가 4KB 메모리를 할당받았을 때 실제로 사용하는 데이터가 3KB라면 1KB의 메모리가 낭비되는 것이 내부 단편화이다.


profile
Software Developer Lv.0
post-custom-banner

0개의 댓글