본문 바로가기

별걸다하는 IT/운영체제 OS

[운영체제 OS] Fragmentation 메모리 단편화란 무엇인가? External fragmentation(외부 단편화)이란? 초 쉬운 설명으로 흐름 잡기~

안녕하세요 주인장 양햄찌입니당.

운영체제가 의외로 조회수는 작은데, 특정 계층에 인기(?)가 있나봐요! (뿌듯) 요청이 있어서 또 이렇게 열심히 들고왔습니다. 사실 이번편은 그림을 좀 다 그려야 되어서 힘든ㄷ... (칭얼칭얼) 암튼 잡소리는 여기까지..

 

저번 포스팅에서는 MMU와 contiguous allocation에 대해 다뤘었어요. 

운영체제 글은 꼭 처음부터 차근차근 읽으시는 걸 추천드려요 특히 이런 전공적인건 초반부터 flow를 매우 잘 잡는게 중요하거든요..

fragmentation은 contiguous allocation MMU 방식의 치명적인 단점입니다. paging의 발단이 되기도 하죠!

아무튼, 전 포스팅을 아직 안읽으셨다면, 아래 링크를 먼저 보고 오도록 합시당~

 

[운영체제 OS] MMU(Memory management unit)란? contiguous allocation(연속메모리 할당) MMU와 메모리분할 문제, 메모리관리장치

안녕하세요~!! 양햄찌 주인장입니다. 운영체제 관련 글을 이어서 가져왔어요 ㅎㅎ 나름 많은 포스팅을 꾸준히 작성하면서 달려왔다 생각했는데 가는 길을 멀고도 멀군요... 생각보다 이거 하나 써내려가는게 시간..

jhnyang.tistory.com

 

오늘 주제는

Fragmentation(단편화) 특히! External fragmentation에 대해서~

 

저번시간에 배운걸 다시 더듬 더듬해보면,,

contiguous allocation을 하면 일단 장점이 뭐였죠? MMU가 아주 간단해집니다. 더하기+상한선 체크만 해주면 되니까요!! 즉 간단한 덧셈과 비교만 있으면 된다 이겁니다.

 

근데 이게 현재 우리 시스템에서 안쓰인다 했었죠. 왜 안쓰일까요 이유가 있을거예요. 그 단점에 대해서 살펴보려고 하는 겁니다.

 

CONTIGUOUS ALLOCATION 연속적 할당의 단점

자자, 컴퓨터에 프로세스가 하나만 돌아가진 않죠, 우리가 인터넷도 보면서, 음악도 듣고, 그 와중에 백그라운드로는 게임 다운로드 하고, 등등.. 많은 프로세스를 돌릴거예요. 그리고 그 프로세스들도 다 크기가 다르겠죠? 작업이 빨리 끝나는 프로세스도 있고~~~ 오래걸리는 프로세스도 있고!

 

자 맨처음에 process1을 실행시켰어요. 그럼 이 프로세스는 연속적으로 배치되겠죠? Contiguos allocation이라는게 logically contiguous이면 physically contiguous라고 했잖아요! 즉 프로세스1을 반으로 쪼개서 반은 아래에 놓고 반은 위에 놓고 이게 안된다는 겁니다. 쭉 연속적으로 놔야해요. 그래야 base address를 다 일괄적으로 더하는 거니까 이렇게 배치를 할 수 밖에 없습니다. 

아무튼 1번 프로세스를 돌리다가, 다른 PROCESS2가 실행됐으면 이렇게 어딘가에 연속적으로 배치가 되겠죠? 랜덤으로 위에 배치됐다고 합시다. 그 다음에 꽤 큰 프로세스3이 들어와서 이렇게 가운대에 메모리를 연속적으로 차지했다고 가정해볼게요. 그럼 이제 메모리가 꽉 차서 프로세스가 더 실행되도 수행이 안되는 그런 상태에서 프로세스 3번이 끝났다고 합시다.

그럼 위 사진처럼 가운데 공간이 이렇게 남겼죠? 그럼 이렇게 생긴 공간을 hole이라고 부릅니다. 사실 이게 현재 쓰이는 방법은 아니니까 개념적으로만 여러분들이 이해를 하면 충분해요. 

 

자 이제 메모리에 여유가 생겼으니까 다음 프로세스4가 들어왔어요. 그럼 여기 빈 공간에 넣어주면 되겠죠? 또 다음 프로세스5가 들어오면 남는 공간에 넣어주면 돼요. 이 예시는 메모리가 아주아주 잘 사용되는 그런 예입니다. 그런데 매번 저렇게 이쁘게만 실행되지는 않겠죠.

 

자 다른 예시를 봅시다.

이렇게 프로세스가 꽉 차있고 6번이 들어오려고 대기중입니다. 그런데 여기서 프로세스 4번이 끝나면 문제가 없었겠지만 5번이 끝났다고 해봐요! hole이 생겼지만 너무 공간이 쪼끄매서 프로세스 6번이 들어올 수가 없죠!!!

그리고 다음 프로세스가 1번이 종료되었다고 합시다. 그런데도 6번은 들어올 수가 없어요! 

이것이 EXTERNAL FRAGMENTATION

External fragmentation exists when there is enough total memory space to satisfy a request but the available spaces are not contiguous: storage is fragmented into a large number of small holes.

총 공간을 계산해봤을 때 요청을 만족할만한 충분한 메모리가 있음에도, 가능한 공간들이 연속적이지 않을 때 (즉 저장공간이 많은 작은 hole들로 조각조각 나있을 때) External fragmentation은 발생합니다. 

 

자 이런 문제를 fragmentation이라고 부르는거예요. 정확히 fragmentation은 internal fragmentation이랑 external fragmentation으로 나뉘는데 이런 현상을 external fragmentation이라고 합니다. (internal은 차차 따라오다보면 배우게 될거예요) fragmentatin은 조각, 단편화 라는 뜻이죠? 즉 조각이라 하면 메모리가 이만큼이나 있는데 이런 조각 이런 조각으로 막 나뉘는거예요. 

메모리가 할당되고 해제되는 작업이 반복될 때 작은 메모리 중간중간에 사용하지 않는 메모리가 많이 존재해서 
총 메모리 공간은 충분하지만 실제로 할당할 수 없는 문제를 external fragmentation, 외부 단편화라고 합니다. 

메모리는 엄청나게 비싼 자원인데!! 이렇게 메모리가 놀고 있음에도 프로세스를 실행하지 못하니까 메모리가 낭비되는거죠! 효율적으로 사용이 안되는 겁니다. 

이전 사람들도 해결하려 생각을 해봤겠지 - COMPACTION

또 해결방안이 나왔겠죠! 여러분이라면 어떤 방법을 고안하셨을 것 같나요?

일단 쉽게 생각해보면, 3,4번을 밑으로 배치하고 2번을 위로 올리면 자투리 공간이 사라지고 이렇게 공간이 넓어지죠! 이렇게 프로세스를 이동시켜 공간을 확보한 후 대기중인 프로세스를 넣어주면 될 거같아요.

가장 쉽게 생각할 수 있는 방법이죠. 그런데 이 방법은 6번 프로세스가 들어갈 크기를 만들기 위해서 2,3,4번을 옮기기 위해서는 어디 temporary한 공간으로 복사를 해야하잖아요. 그 다음에다가 이 메모리에다가 다시 복사해서 가져와야 할 거예요. 즉 secondary storage 하드디스크에다가 임시로 복사해서 저장을 해야하는데, 하드디스크는 엄청 느리잖아요. 그러니까 이 방법은 현 시점에 별로 실행가능한 방법은 아닙니다.

암튼 이렇게 비어있는 공간을 연속적인 공간으로 만들고 움직이는 작업을 compaction이라고 합니다.

 

compaction 방법은 external fragmentation을 줄일 수 있는 방법이 될 수 있긴 한데 메모리를 copy하는 데 있어서 반드시 I/O problem이 나옵니다.  하드디스크가 병목이 되기 때문에 좋은 방법은 아니라는거 --> 새로운 방법을 강구해야 한다!!

결국 paging의 배경인거죠, 다음 포스팅에서는 paging에 들어가기 앞서, first-fit, best-fit, worst-fit에 대해 정리를 하고 가도록 할게요.

 

오늘은 external framentation에 대해 알아봤습니다. 다음 시간에 또 뵈어요! 도움이 되셨다면, 공감/댓글/광고보답은 정보공유에 큰 힘이 됩니다.