① 내부 단편화(internal fragmentation)
분할의 사용하고 남은 일부분을 말한다. 예를 들어 '100'크기를 갖는 분할에 '80'크기를 갖는 프로그램을 배치하였을 경우 '20'의 공간이 내부 단편화 공간이 된다.
② 외부 단편화(external fragmentation)
분할의 크기가 프로그램의 크기보다 작아서 사용되지 못한 것을 말한다. 예를 들어 '100' 크기를 갖는 분할이 있을 때 '120' 크기를 갖는 프로그램은 배치 되지 못하며 '100'의 공간이 외부 단편화 공간이 된다.
출처 : http://blog.naver.com/PostView.nhn?blogId=bizzbuzz&logNo=140067101479
아무리 날고기는 슈퍼 컴퓨터라 할지라도 디스크 공간을 마구마구 할당하다보면 이 내.외부 단편화가 일어나게 되어 있습니다. 컴퓨터의 처리 속도에 관련이 있는 이 두개의 단편화에 대해 알아보겠습니다.
일단 외부 단편화는 메모리를 할당하는 대표적인 세가지 방법인 최초적합(맨처음 찾은 알맞은 공간에 공간을 할당.),최적적합(사용 가능한 공간들중 가장 작은것을 선택) 최악적합(사용 가능한 것중 가장 큰 것을 할당)중 어느걸 하더라도 결국은 일어날 수 밖에 없습니다.
공간을 프로세스의 실행을 위해 할당해주고 프로세스가 끝나면 다시 공간을 돌려 받게 되는데 보통 컴퓨터는 되돌아온 공간 블록과 인접해 있는 블록을 합쳐서 하나의 큰 블록을 만드는 식으로 자원관리를 합니다.
하지만 워낙 빠르게 일을 처리해야 하다보니 프로세스들에게 공간 할당이 마구마구 이루어 지게 되고 중간중간에 남긴 하지만 너무나 작아 별 쓸모 없는 '잉여 공간' 들이 생기게 됩니다.
외부 단편화는 이런 잉여 공간들이 곳곳에 흩어져 있는 문제입니다. 물론 잉여 공간들을 합친다면 다시 프로세스를 충분히 실행 시킬 수 있는 정도가 되겠지만 그건 일이 활발하게 진행되고 있는 컴퓨터의 실행 중에는 불가능 합니다.
그래서 컴퓨터가 너무 과다한 사용으로 느려지게 되었을때는 재부팅을 해주시면 컴퓨터가 부팅중에 공간들을 정리하기 때문에 다시 속도가 향상됩니다.
내부 단편화는 외부 단편화와 조금 헷갈릴 수도 있으실텐데 여기서는 '블록' 에 대한 개념으로 생각하시면 쉽습니다.
컴퓨터가 블록 단위로 공간을 할당하기 때문에 예를들어 블록 당 512바이트라 치고 실행해야 할 프로세스의 크기가 1930 이라면 적어도 4블록은 할당해 주어야 이를 감당하게 될텐데 2048 바이트에서 1930 바이트를 뺀 나머지 잉여 바이트들이 남게 됩니다. 이것이 내부 단편화 입니다. 이렇게 아깝지만 쓸수는 없는 크기의 잉여 공간들이 생기는 것을 내부 단편화라 합니다.
그래서 컴퓨터는 이런 공간 할당을 위해 '스케쥴링' 이라는 관리를 계속 하고 있습니다. 그래봐야 딱 놓고 봤을때는 아주 자그마한 차이지만 확장하게 되면 컴퓨터의 성능향상에 아주 큰 도움이 됩니다.
출처 : http://gksrnek.tistory.com/tag/%EB%82%B4%EB%B6%80%20%EB%8B%A8%ED%8E%B8%ED%99%94