Computer Science/OS

[OS] 메모리 단편화(Memory Fragmentation) : 페이징, 세그멘테이션

ooeunz 2020. 3. 30. 14:46
반응형

우리가 컴퓨터에서 어떤 프로그램을 실행하거나 어떠한 작업을 할 때 컴퓨터는 메모리에 해당 프로그램을 올리고 실행하게 됩니다. 그때 메모리의 공간을 연속적인 형태로 할당하여 사용하게 되는데요. 이러한 식으로 RAM에서 메모리 공간이 조각처럼 나뉘게 될 경우 사용 가능한 메모리가 충분히 존재하지만 할당이 불가능한 상태를 메모리 단편화가 발생한다고 이야기 합니다.

 

그렇다면 메모리 단편화의 종류에 관해 살펴보도록 하겠습니다. 메모리 단편화는 내부 단편화와 외부 단편화로 구분이 가능합니다.

 

내부 단편화(Internal Fragmentation)

메모리를 할당할 때 프로세스가 필요한 양보다 더 큰 메모리가 할당되어서 프로세스에서 사용하는 메모리 공간이 낭비되는 상황을 이야기합니다. 예를 들어 어떤 프로그램을 실행시켰을 경우, 해당 프로그램에 OS가 5mb만큼의 메모리를 할당시켜줬습니다. 그런데 실제로 해당 프로그램은 1mb만큼의 메모리만 사용하고 있을 경우, 사용하지 않음에도 필요 이상으로 프로세스가 메모리를 할당받게 되었으므로 내부 단편화가 4mb만큼 생겨난 것입니다.

 

 

외부 단편화(External Fragmentation)

위에서도 언급했듯이 OS에서 메모리를 프로세스에 할당할 때는 메모리 상의 주소를 연속적으로 할당시켜주게 됩니다. 이러한 식으로 메모리가 할당되고 해제되는 작업이 반복적으로 일어나게 될 경우 할당된 메모리와 메모리 사이에 중간중간 사용하지 않는 작은 메모리가 생겨나게 되어, 총 메모리 공간은 충분하지만 실제로는 할당할 수 없는 상황이 발생하게 됩니다. 이러한 상황을 외부 단편화라고 부릅니다.

 

한 가지 예를 들어보겠습니다. 예를 들어 0번부터 9번까지 10개의 메모리가 있는 컴퓨터가 있습니다. 그리고 메모리 4칸을 사용해야 하는 프로그램 A와 B와 메모리 두칸을 사용해야하는 프로그램 C가 있다고 가정해보겠습니다.

 

그런데 만약 A 프로그램이 1~4번, B 프로그램이 5~8번 메모리를 할당할 경우, 전체 메모리에서 사용하지 않는 메모리는 2칸이 남기 때문에 C 프로그램을 실행할만한 충분히 공간이 제공됨에도 불구하고 메모리가 0번과 9번과 같이 조각처럼 나뉘어서 사용할 수 없는 경우가 생깁니다. 이러한 경우가 외부 단편화가 발생했다고 볼 수 있습니다.

 

 

메모리 파편화 해결 방법

 

1. 페이징(Paging) 기법 : 가상 메모리 사용, 외부 단편화 해결, 내부 단편화 존재

가상 메모리를 페이지 단위로 나누어서 물리 메모리에 같은 크기인 프레임과 맵핑하여 사용하는 것을 의미합니다. 페이징 기법을 사용하면 연속적인 물리 메모리가 아니더라도 원하는 크기의 프레임을 사용할 수 있게 됩니다.

 

단지 가상 메모리에서 페이징의 크기로 메모리를 분할하면 메모리 관리 장치(MMU)에 의해 가상 메모리가 물리 메모리의 주소로 변환되어 유저가 메모리의 맵핑이 어떻게 되는지 의식할 필요 없이 가상 메모리를 활용하여 작업할 수 있습니다.

Page : 가상 메모리를 일정한 크기로 나눈 블록

Frame : 물리 메모리를 일정한 크기로 나눈 블록

※ 물리 메모리(프레임)와 가상 메모리(페이지)를 대응하기 위해 page mapping 과정이 필요하고 paging table을 설정해야 합니다.

 

Page와 Frame의 크기는 동일하게 관리됩니다. 페이지의 크기는 시스템에 따라 다르며, 크기가 작을수록 메로리를 단편화하기 쉬워지지만, 페이지의 개수가 많아지기 때문에 그만큼 page mapping 과정이 증가하게 되므로 입출력이 자주 발생하게 됩니다.

 

2. 세그멘테이션(Segmentation) 기법 : 가상 메모리 사용, 내부 단편화 해결, 외부 단편화 존재

페이징 기법에서는 가상 메모리를 같은 크기로 분할했었습니다. 반면 세그멘테이션은 서로 크기가 다른 논리적인 단위 세그먼트(Segment)로 분할하고 메모리를 할당하여 물리 메모리의 주소로 주소 변환을 하게 됩니다.

 

세그먼트들의 크기가 서로 다르기 때문에 페이징 기법처럼 미리 분할해 둘 수 없고, 메모리에 적대될 때 빈 공간을 찾아 할당하는 사용자 관점의 가상 메모리 관리 기법입니다. 

 

미리 할당하지 않기 때문에 각 프로세스에 알맞게 메모리를 할당하여 내부 단편화가 발생하지 않지만, 서로 다른 크기의 세그먼트들에 대해 필요시에 메모리에 올리고 필요 없을 경우 내리는 작업을 반복하다 보면 외부 단편화가 생기는 문제점이 발생할 수 있습니다.

반응형

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

[OS] Synchronization 동기화란?  (0) 2020.03.27
[OS] 운영체제 스케줄링  (0) 2020.03.23