본문 바로가기
운영체제

운영체제 16장 - 메모리 관리(3) : 연속 메모리 할당 -

by ChocoPeanut 2017. 5. 2.

운영체제 16

- 연속 메모리 할당 -

 

컴퓨터의 구조가 발달되어 오면서 운영체제는 다중 프로그래밍 환경을 조성하게 된다. 부팅 직후 메모리에 운영체제가 하드디스크로부터 적재되고 컴퓨터가 동작을 하는 것을 기다린다. 그 후 여러 가지의 프로그램이 동시에 올라와서 스케줄링에 의해 CPUI/O를 할당받는다. 처음에 부팅 직후에는 운영체제만 적재되어 있으므로 운영체제를 제외한 공간이 모두 비어 있게 된다. 그래서 big single hole이 생기게 된다. 이 후 프로세스가 생성되고 종료되는 작업을 반복하며 컴퓨터가 동작하게 된다. 이 때는 프로세스들은 여러 위치의 메모리에 적재되기 때문에 scattered holes가 생성되게 된다. 프로세스가 순서대로 쌓이더라도 작업이 끝나는 순서는 정해져 있지 않고 다시 들어오는 프로세스와도 메모리 공간 차지 사이즈가 다르기 때문에 메모리의 빈 공간이 중간 중간에 계속 생성될 것이다.



scattered holes가 계속 발생하게 되면 hole 들이 불연속하게 흩어져 있게 되어 메모리 단편화 현상이 발생하게 된다. 이렇게 되면 메모리의 빈 공간은 많은데 사이즈가 작은 빈 공간이 많아 다른 프로세스를 적재할 수 없는 현상이 발생한다. 이러한 현상을 외부 단편화라고 한다. hole들의 크기를 모두 합치면 프로세스를 충분히 적재할 수 있는데 떨어져 있어서 프로세스가 못 들어가는 현상이다. 메모리 관리자 입장에서 보면 메모리가 충분히 비어 있는데도 프로세스를 넣지 못하니 매우 억울한 상황이다.


외부 단편화를 없애는 방식으로 연속 메모리 할당 방식을 사용한다. 연속 메모리 할당 방식에도 3가지의 방법이 존재한다.


최초 적합(First-fit)은 메모리를 순차적으로 탐색하여 제일 먼저 발견한 적절하게 들어갈 수 있는 곳을 찾아 프로세스를 적재하는 방법이다.


최적 적합(Best-fit)은 메모리를 탐색하여 메모리 공간 중에서 제일 적절하게 들어갈 수 있는 곳을 찾아 프로세스를 적재하는 방법이다.


최악 적합(Worst-fit)은 메모리에 넣는데 크기와 제일 안 맞는 공간(프로세스보다 큰 메모리 공간 중에서)에 프로세스를 넣는 방식이다.


할당 방식에 따른 성능을 비교해보면 속도 측면에서는 최초 적합이 좋다. 최초 적합은 메모리를 순서대로 탐색하여 가장 먼저 발견되는 공간에 적재하기 때문에 속도 면에서는 가장 빠르다고 할 수 있다. 이용률의 측면에서 보면 최적 적합이 좋다. 속도는 조금 떨어지지만 정확하게 맞는 위치에 들어가는 방식을 취하기 때문에 애매한 빈 공간을 창출할 일이 많이 없다. 최초 적합의 경우는 자신의 프로세스 크기보다 메모리 공간이 더 큰 경우가 발생하면 무조건 프로세스를 넣지만 최적 적합은 빈 공간을 제일 안 만드는 측면으로 프로세스를 적재한다. 하지만 대부분의 경우를 비교해보면 최초 적합과 최적 적합의 이용률의 차이가 많이 발생하지는 않는다.


연속 메모리 할당의 방식을 사용하더라도 외부 단편화로 인한 메모리 낭비가 1/3 정도 발생한다. 그러므로 비싼 메모리의 공간을 많이 사용할 수 없으니 문제가 크다고 할 수 있다. 이런 방식을 해결하는 또 다른 방법이 Compaction이다. Compactionhole 들을 한 곳으로 모으겠다는 방식이라고 할 수 있다. 한 곳으로 모으기 위해서는 메모리를 움직여야한다. 그래서 메모리 계산에 대한 부담이 크다. 또한 hole을 어디로 움직이는 게 좋은가에 대한 문제가 발생한다. 이렇기 때문에 hole을 움직이거나 프로세스를 움직이는 Compaction 방식의 최적의 알고리즘은 존재하지 않는다. 하지만 이런 방식이 있다는 것은 기억하는 것이 좋을 것 같다. 그렇다면 이렇게 메모리 낭비가 심한데 어떻게 해결을 한 것일까? 그 방법이 바로 페이징이다. 페이징은 다음 장에서 설명할 것이다.



댓글3

  • gulduk 2018.06.10 16:10

    외부단편화를 해결하기 위한 방식이 연속메모리 할당이 아니라, 연속메모리 할당에서 외부 단편화가 발생하는 겁니다.
    연속메모리 할당은 fixed size partiton과 variable size partition으로 나뉘는데 fixed size에선 내부/외부 단편화가 모두 발생하고 variable size에선 외부 단편화만 발생합니다. First/Best/Worst fit은 연속메모리 할당 방식이지 외부 단편화를 해결하는 기법이 아닙니다.
    답글

  • prohyeon 2019.10.10 18:20

    홀(Hole) : 빈 공간이기는 하지만 크기가 아주 작아서 실제로는 할당될 가능성이 희박하고, 결과적으로 낭비되는 공간을 뜻합니다. (외부단편화의 대표적인 예)

    본문의 내용의 일부 맞긴하나, 이유가 틀리니 꼭 주의해서 보세요. gulduk 님의 코멘트가 맞습니다.

    - 고정분할에서 내부/외부 단편화가 발생하는 이유
    고정된 크기로 분할된 메모리에 딱 맞는 프로세스들로 채워지기는 거의 불가능 -> 내부 단편화
    분할된 고정된 크기가 생각보다 작아서 프로세스들을 수용할 수 없다면 -> 외부 단편화

    - 가변 분할에서 내부 단편화가 발생하지 않는 이유
    프로세스가 메모리를 필요로 할 때, 처리되기 떄문에, 딱 맞는 메모리가 생성됨
    (그러나 항상 유연함 (Flexibility) 은 복잡도 (Complexity)를 동반할 수 밖에 없다는 점은 참고해두면 좋음)
    그러나, 계속해서 프로세스가 생성되고 종료될 경우 메모리에서도 공간들이 계속 가변분할되게 되는데
    여기서 프로세스에 기존의 메모리를 할당하는 기법이 first-fit(next fit), best-fit, worst-fit 임

    이 중 최적적합(Best-Fit) 은 가장 효율적인 공간활용을 보여주는데, 대부분 딱 맞지 않고 남는 메모리의 크기는 매우 작을것이고, 이런 빈공간들은 거의 활용되지 못하는 단점을 가집니다.
    위의 상황이 외부단편화이며 가장 대표적인 예가 홀(Hole) 입니다.



    답글

    • ㅇㅇ 2020.02.18 08:08

      너무 도움되었어요! 그런데 best fit에서 발생한 단편화가 내부 단편화가 아닌 외부 단편화인 이유는 무엇인가요?