페이징과 세그멘테이션에 대해 공부하던 중 고정 분할 방식과 가변 분할 방식의 차이점에 대해 잘 설명된 글을 찾았다.
연속 메모리 관리
프로그램 전체가 메모리에 연속적으로 할당되어야 하는 관리 기법
고정 분할 기법 : 메모리가 고정된 파티션으로 분할 → 내부 단편화 발생
동적(=가변) 분할 기법 : 파티션들이 동적 생성, 프로세스는 자신의 크기와 같은 파티션에 적재 → 외부 단편화 발생
가변 분할 방식 vs 고정 분할 방식
가변 분할 방식 | 고정 분할 방식 | |
장점 | 가변 분할 방식에서는 프로세스를 한 덩어리로 처리하여 하나의 프로세스를 연속된 메모리 공간에 배치한다. | 고정 분할 방식에서는 메모리를 일정한 크기로 나누어 관리하기 때문에 메모리 관리가 수월하다. 가변 분할 방식의 메모리 통합 같은 부가적인 작업을 할 필요가 없다. |
단점 | 가변 분할 방식은 메모리 통합 등의 부가적인 작업이 필요하므로 메모리 관리가 복잡하다. 예를 들어 프로세스 B, 프로세스 D가 작업을 마쳤다고 하자, 그러면 메모리가 14kb, 27kb가 남는다. 이 때 27kb가 넘는 프로세스가 메모리에 올라오려고 한다면 어떻게 될까 ? 빈 공간이 떨어져 있기 때문에 올라올 수가 없다. 19kb가 넘는 프로세스를 실행하려면 비어 있는 공간을 하나로 합쳐야 하며, 이 과정에서 프로세스 C의 자리도 옮겨야 한다. |
고정 분할 방식에서는 쓸모없는 공간으로 인해 메모리 낭비가 발생할 수 있다. 즉 일정하게 나누어진 공간보다 작은 프로세스가 올라올 경우 메모리 낭비가 발생한다. 예를 들어, 프로세스 B의 크기가 14kb인데 20kb메모리 공간을 할당해준다면 6kb가 비어있지만 다른 프로세스를 배치할 수 없으므로 낭비된다. |
가변 분할 방식의 메모리 관리 (+ 외부 단편화)
가변 분할 방식으로 메모리를 할당했을 때의 방식이다.
프로세스 K가 메모리에 적재되길 기다리고 있고 프로세스 B, D가 작동을 중지하고 메모리에서 쫓겨난다고 해보자
메모리에서는 14 + 27 = 41kb 라는 추가 공간이 생겼지만 프로세스 K가 33kb의 크기를 가졌음에도 불구하고 할당될 수 없다.
이는 가변 분할 방식은 프로세스를 연속적으로 메모리에 배치해야하기 때문이다.
이러한 작은 빈 공간을 외부 단편화(external fragmentation)이라고 한다.
프로세스 밖에서 조각이 발생하기 때문에 이렇게 불린다.
가변 분할 방식에서는 외부 단편화로 인한 문제를 해결하기위해 메모리 배치 방식이나 조각 모음을 사용한다.
메모리 배치 방식은 작은 조각이 발생하지 않도록 프로세스를 배치하는 것이며, 조각 모음은 조각이 발생했을 때 작은 조각들을 모아서 하나의 큰 덩어리로 만드는 작업이다.
메모리 배치 방식은 가변 분할 방식에서 선처리에 해당하고 조각 모음은 후처리에 해당한다.
메모리 배치 방식
가변 분할 방식의 외부 단편화 문제를 해결하기 위해 대표적인 메모리 배치 방식으로는 최초 배치(first fit), 최적 배치(best fit), 최악 배치(worst fit) 이 외에도 버디 시스템(buddy system)이 있다.
1. 최초 배치 : 최초 배치(first fit)은 단편화를 고려하지 않은 것으로, 프로세스를 메모리의 빈 공간에 배치할 때 메모리에서 적재 가능한 공간을 순서대로 찾다가 첫번째로 발견한 공간에 프로세스를 배치하는 방법이다.
2. 최적 배치 : 최적 배치는 메모리의 빈 공간을 모두 확보한 후 적당한 크기 가운데 가장 작은 공간에 프로세스를 배치하는 방법이다.
3. 최악 배치 : 최적 배치와 정반대로 최악 배치는 빈 공간을 모두 확인한 후 가장 큰 공간에 프로세스를 배치하는 방식이다.
→ 결과적으로 어떤 배치 방식을 사용해도 단편화 현상은 발생한다.
조각 모음
가변 분할 방식의 뭔래 목적은 프로세스를 한 덩어리로 취급하여 메모리 관리의 효율성을 높이는 것인데, 메모리 배치 방식으로는 근본적으로 문제를 해결할 수 없다.
가변 분할 방식에서는 메모리에 올라오는 프로세스가 차례대로 배치되기 때문에 공간 사용에 큰 문제가 없다.
그러나 작은 프로세스가 작업을 마치고 메모리에서 나가면 그 공간이 조각으로 남아 쓸모 없어질 가능성이 크다.
이렇게 단편화가 발생하면 이미 배치된 프로세스를 옆으로 옮겨 빈 공간들을 하나의 큰 덩어리로 만들어야 하는데 이것이 바로 조각 모음이다.
→ 즉, 조각 모음은 서로 떨어져 있는 여러개의 빈 공간을 합치는 작업이다.
조각 모음은 다음의 과정을 거친다.
1. 조각 모음을 하기위해 이동할 프로세스의 동작을 멈춘다.
2. 프로세스를 적당한 위치로 이동한다. 프로세스가 원래의 위치에서 이동하기 때문에 프로세스의 상대 주소값을 바꾼다.
3. 이러한 작업을 다 마친 후 프로세스를 다시 시작한다.
조각 모음을 하려면 프로세스를 중지시키고, 이동하고, 주소를 바꾸고, 다시 시작하는 작업을 해야하기 때문에 시간이 많이 걸린다.
이처럼 가변 분할 방식은 외부 단편화로 인해 조각 모음 같은 부가적인 작업이 필요하므로 메모리 관리가 복잡하다.
고정 분할 방식의 메모리 관리 (+ 내부 단편화)
가변 분할 방식과 달리 고정 분할 방식은 프로세스의 크기에 상관없이 메모리를 같은 크기로 나누기 때문에 관리하기가 편하다.
그러나 프로세스가 메모리의 여러 조각에 나뉘어 저장되는 것이 문제이다.
고정 분할 방식은 가변 분할 방식보다 공간을 더욱 효율적으로 사용하는데, 이는 프로세스를 정해진 크기로 잘라내어 불연속적으로 관리할 수 있기 때문이다.
빈공간 20kb가 두개 남은 다음의 상황에서 가변 분할 방식을 사용한다면 33kb 프로세스 K를 메모리에 배치하지 못했을 것이다.
하지만, 고정 분할 방식은 프로세스를 잘라내어 20kb, 13kb로 나누어 배치할 수 있으므로 프로세스 K를 메모리에 배치할 수 있게된다.
따라서 고정 분할 방식은 메모리 관리에 있어 더욱 효율적이고, 가변 분할 방식처럼 외부 단편화가 발생하지 않아 조각 모음을 할 필요가 없다.
현대의 메모리 관리 시스템은 고정 분할 방식을 기본으로 사용하고 있다.
그러나 고정 분할 방식은 일정하게 나뉜 메모리의 크기보다 작은 프로세스가 배치될 경우 낭비되는 공간이 생긴다는 단점이 있다.
고정 메모리 영역은 20kb이고 프로세스의 크기는 33kb이므로 20 + 13kb로 나누어 배치할 수 밖에 없다.
따라서, 하나는 20kb 중 13kb만 사용하게 되는 것이다.
이때 7kb는 사용하지 못하게 되는데 이를 내부 단편화(internal fragmentation)이라고 한다.
즉, 고정 분할 방식에서 일정한 크기로 나뉜 파티션 안쪽으로 작은 조각이 발생하고, 메모리 조각에 프로세스를 배치하고 공간이 남는 현상을 말한다.
가변 분할 방식의 외부 단편화는 조각 모음으로 조정했으나 고정 분할 방식에서는 내부 단편화를 해결하기 위해 조각 모음을 할 수 없고 남는 공간을 다른 프로세스에 배정할 수도 없다.
대신 동일하게 분할되는 공간의 크기를 조절하여 내부 단편화를 최소화한다.
지금까지 가변 분할 방식과 고정 분할 방식을 정리하면 다음과 같다.
구분 | 가변 분할 방식 | 고정 분할 방식 |
메모리 단위 | 세그먼테이션 | 페이징 |
특징 | 연속 메모리 할당 | 비연속 메모리 할당 |
장점 | 프로세스를 한 덩어리로 관리 가능 | 메모리 관리가 편리 |
단점 | 빈 공간의 관리가 어렵다 | 프로세스가 분할되어 처리된다 |
단편화 | 외부 단편화 | 내부 단편화 |
'CS > 운영체제' 카테고리의 다른 글
[운영체제] Memory Management (메모리 관리) (0) | 2022.07.11 |
---|---|
[운영체제] 페이지 교체 알고리즘 (0) | 2022.07.07 |
[운영체제] 내부 단편화 vs 외부 단편화 (0) | 2022.07.07 |
[운영체제] 페이징과 세그멘테이션 (0) | 2022.07.07 |
[운영체제] 세마포어(Semaphore) & 뮤텍스(Mutex) (0) | 2022.04.04 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!