고정 분할 기법을 사용하면 내부 단편화가 발생하고 동적 분할 기법을 사용하면 외부 단편화가 발생하는 이유는 무엇일까 ?
내부 단편화와 외부 단편화의 원인
프로세스가 수행되기 위해서는 프로세스가 주기억장치, 즉 메인 메모리에 적재되어야 하는데 이 과정에서 프로세스는 일정 크기의 메모리를 요청한다.
이 때 요청한 크기보다 큰 메인 메모리의 파티션을 할당해 주었을 때 내부 단편화가 발생한다.
일반적으로 고정 분할 기법은 한 파티션에 하나의 프로세스만 적재될 수 있는데 위와 같은 상황에서는 프로세스보다 큰 파티션을 할당해 주었기 때문에 남는 메모리가 생긴다.
남는 메모리라 하더라도 한 파티션에는 하나의 프로세스만 들어갈 수 있기 때문에 그 남은 메모리는 사용할 수가 없다.
이 내부 단편화를 보완하기 위해 나온 것이 동적 분할이다.
동적 분할 기법은 프로세스가 요청하는 메모리 크기만큼 파티션을 할당해주는 것이다.
그렇기 때문에 동적 분할 기법은 내부 단편화가 존재하지 않게 된다.
하지만 동적으로 할당해주는 과정에서 외부 단편화의 문제가 발생한다.
외부 단편화(external fragmentation)는 프로세스가 메인 메모리에서 소멸할 때 다른 프로세스가 올라오는 과정에서 발생한다.
프로세스 소멸 후 그 소멸한 프로세스 파티션 자리에 그보다 작은 프로세스가 올라온다면 남은 파티션이 생긴다.
예를 들어, 위 그림에서 d~f 상황을 보면, 14M짜리 프로세스2가 소멸되면서 8M짜리 프로세스4가 올라오는데 이 과정에서 6M 크기의 남는 파티션이 생긴다.
전체적인 메인메모리를 보면 10M 크기의 메모리가 남는데 10M 크기의 프로세스는 올라갈 수가 없다.
이러한 현상이 메인 메모리 상에서 반복해서 발생하다보면 말 그대로 구멍이 숭숭 뚤린 메인 메모리가 될 것이다.
그 구멍(남는 파티션)들은 각각 사용할 수 있지만 한 프로세스가 올라가기에는 각각의 크기가 너무 작아 올라갈 수 없는 이런 현상을 외부 단편화라고 한다.
이러한 외부 단편화를 해결하기 위해서는 메모리 집약(compaction)이라는 작업을 해야한다.
메모리 집약은 메모리에 뚫린 구멍(파티션)들을 한 군데로 합쳐서 프로세스가 올라갈 수 있는 큰 파티션을 만드는 것이다.
하지만 메모리 집약은 CPU가 몇 개의 바이트씩 읽어오고, 다시 쓰는 방법으로 반복해서 재배치하기 때문에 CPU 처리시간이 증가하여 처리 효율이 크게 감소한다.
메모리 풀(memory pool)
미리 고정된 크기의 메모리를 할당받아 메모리 동적 할당을 가능하게 해준다.
new, delete와 같이 할당/해제의 기능을 제공한다.
하지만, 처음 미리 할당 받은 공간에 대해서 일정 크기의 블록을 나눠주고 회수하는 방식이라 단편화가 발생하지 않는다.
잦은 동적 할당/해제가 필요한 경우 사용하는 방식으로 프로그래머가 직접 구현해서 사용할 수 있는 방식이다.
장점
- 실행 시간으로 단편화 없이 메모리를 할당할 수 있다.
- 실행 시간에 블록을 할당하고 해제하는데 적은 비용이 든다. (잦은 동적 할당/해제에 비해)
- 다른 크기를 관리하는 여러개의 할당자를 두고 관리할 수 있다.
단점
- 사용하는 공간보다 더 많은 공간을 할당 받는 경우 낭비가 발생할 수 있다.
- 미리 할당해놓기 때문에 사용하지 않을 때에도 계속 할당되어 있어 메모리 누수가 있다.
통합과 압축
일반적인 단편화 해결 방법으로 내부, 외부 단편화 모두 해결 할 수 있다.
통합(coalescing)
인접한 둘 이상의 공백을 그들 사이의 경계를 없애고 하나의 공백으로 합치는 것
압축(compaction)
사용중인 영역과 빈 영역을 각각 한쪽으로 몰아 빈 영역들을 하나로 모으는 것
ex) 디스크 조각 모음
이외에 단편화를 해결하는 방법으로 페이징, 세그멘테이션이 있다.
참고
'CS > 운영체제' 카테고리의 다른 글
[운영체제] 고정 분할 방식과 가변 분할 방식의 메모리 관리 (0) | 2022.07.07 |
---|---|
[운영체제] 페이지 교체 알고리즘 (0) | 2022.07.07 |
[운영체제] 페이징과 세그멘테이션 (0) | 2022.07.07 |
[운영체제] 세마포어(Semaphore) & 뮤텍스(Mutex) (0) | 2022.04.04 |
[운영체제] 경쟁 상태(Race Condition) (0) | 2022.04.04 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!