목차
- 💥 Contiguous allocation의 문제점
- 🤔 External Fragmentation이란?
- 👀 Compaction(압축)을 활용한 외부 단편화 해결
💥 Contiguous allocation의 문제점
이전 포스팅에서 Contiguous allocation은 프로세스를 메모리에 분할해서 적재하지 않고 한 번에 통째로 적재하는 방법론이라고 설명했습니다.
Contiguous allocation은 CPU의 MMU(Memory Management Unit)가 논리 주소를 물리 주소로 translation 함에 있어 단순함을 제공해준다는 장점이 있었습니다.
그러나, 단지 단순함때문에 값비싼 HW자원 중 하나인 Memory를 낭비하는 문제가 발생했습니다.
🤔 External Fragmentation이란?
연속 할당을 하다보면, Memory에 프로세스를 할당하고 해제하고를 반복하면서 메모리 사이에 빈 공간이 발생합니다.
이 빈 공간을 Hole 이라고 부릅니다.
위 그림에서 처음 Process 8을 할당하고 있다가 해제하면서 하나의 큰 Hole이 발생합니다.
이 공간에 Process 9를 할당하고, 다시 Process 5를 할당 해제하는 과정을 거치면서 최종적으로 조그마한 2개의 Hole이 발생합니다.
그런데 여기서 문제가 발생합니다.
메모리의 공간은 충분하지만, 연속 할당을 해야 한다는 이유만으로 Hole보다 큰 프로세스를 메모리에 적재하는 것이 불가능하다는 것입니다.
메모리의 총 남은 공간은 충분하나, 사용하기에는 작은 Hole들로 이루어져 있어서 연속 할당으로는 새로운 프로세스 적재가 불가능한 상황
이것을 외부단편화, External Fragmentation이라고 부릅니다.
👀 Compaction(압축)을 활용한 외부 단편화 해결
외부단편화를 해결하기 위한 방법 중 하나로 Compaction이라는 기법이 있습니다.
이 방법은 메모리에서 프로세스를 한쪽으로 밀어버려서 사이사이에 작은 Hole들을 없애자는 아이디어에서 고안되었습니다.
그림을 보면, compaction 이후에 2개의 작은 Hole들이 하나의 큰 Hole로 합쳐진 모습을 확인할 수 있습니다.
그러나, Compaction은 그리 좋은 방법은 아니었습니다.
Compaction의 원리는 메모리에 올라가 있는 프로세스의 데이터를 seconday storage에 임시로 저장해놓고 다시 새로운 메모리 위치에 불러오는 것을 반복하는 것입니다.
결국 거의 모든 프로세스를 다시 메모리에 load 시켜주어야 하는데, 이러한 방법은 너무 많은 시간적 오버헤드를 초래합니다.
이러한 문제를 해결하기 위해서 비연속 할당 기법인 Segmentation과 Paging이라는 새로운 기법이 등장합니다.
자세한 내용은 이후 포스팅에서 다루겠습니다.
github : https://github.com/tmdgh1592
'CS > 운영체제' 카테고리의 다른 글
[운영체제] 비연속할당(Noncontiguous allocation) - 페이징(Paging) (0) | 2023.01.10 |
---|---|
[운영체제] 비연속할당(Noncontiguous allocation) - 세그먼테이션(Segmentation) (0) | 2023.01.06 |
[운영체제] Address Binding - Compile, Load, Execution time binding (0) | 2022.12.30 |
[운영체제] 식사하는 철학자들 문제 (Dining philosophers problem) - Deadlock, Starvation (8) | 2022.11.30 |
[운영체제] CPU 스케쥴러 (Short-Term, Long-Term, Midium-Term 스케쥴러) (2) | 2022.11.15 |