반응형
✅ 메모리 할당 (Memory Allocation)
멀티프로그래밍 환경에서는 여러 개의 프로세스가 동시에 메모리에 올라와 실행되어야 한다.
이때 각 프로세스에 얼마만큼의 메모리를 어떻게 할당할지 결정하는 과정이 바로 메모리 할당이다.
메모리 할당 방식은 크게 두 가지로 나뉜다.
- 연속 메모리 할당(Contiguous Allocation)
- 비연속 메모리 할당(Non-Contiguous Allocation)
✅ 연속 메모리 할당 (Contiguous Memory Allocation)
: 프로세스가 요청한 메모리 크기만큼 물리 메모리에서 연속된 공간을 할당하는 방식
연속 메모리 할당 방식은 다시 고정 분할 방식과 가변 분할 방식으로 나뉜다.
- 고정 분할 방식: 물리적 메모리를 미리 같은 크기로 분할해서 할당
- 외부/내부 단편화 발생 가능
- 가변 분할 방식: 프로세스의 크기에 따라 동적으로 할당
- 외부 단편화 발생 가능
가변 분할 방식에는 최초 적합, 최적 적합, 최악 적합 3가지 방식이 있다.
📍 최초 적합 (first-fit)
: 처음으로 맞는 공간에 할당
- 메모리 공간 목록을 앞에서부터 탐색하고
- 요청 크기보다 같거나 큰 첫 번째 공간에 할당
- 속도다 빠름
💡 언제 사용?
- 속도가 중요한 경우
- 시스템 부하가 적고, 메모리 크기가 비교적 여유로운 환경
📍최적 적합 (best-fit)
: 전체 메모리 중 요청 크기와 가장 비슷한 최소한의 공간을 찾아 할당
- 공간 낭비 최소화할 수 있음
- 전체를 탐색해야 하므로 속도가 느림
- 작은 조각이 많이 남아 단편화 심해질 수 있음
💡 언제 사용?
- 메모리 사용률 최적화가 중요한 시스템 ex. 임베디드 시스템
- 자주 할당/해제가 일어나지 않는 정적 환경
📍 최악 적합 (worst-fit)
: 여유 공간 중 가장 큰 블록을 잘라서 할당
- 남은 공간이 충분히 커서 재사용 가능성이 높음
- 전체를 탐색해야 하므로 속도가 느림
- 큰 공간을 계속 유지해 큰 프로세스 수용 가능성 증가
- 실제로는 공간 활용도가 낮아 단편화 증가
- 성능이 가장 떨어지는 것으로 알려짐
💡 언제 사용?
- 계속해서 큰 메모리 요청이 들어오는 시스템 ex. 대용량 미디어 처리
📍 first-fit vs. best-fit vs. worst-fit
| 기준 | first-fit | best-fit | worst-fit |
| 속도 | 빠름 | 느림 | 느림 |
| 단편화 | 외부 단편화 발생 가능 | 외부 단편화 발생 가능 | 외부 단편화 발생 가능 |
| 구현 복잡도 | 단순 | 복잡 | 복잡 |
| 실무 채택 | 가장 많이 사용 | 제한적 | 거의 사용되지 않음 |
✅ 단편화 (Memory Fragmentation)
: 기억 장치의 빈 공간이 여러 개의 조각으로 나뉘는 현상
📍 외부 단편화 (External Fragmentation)
: 프로세스가 들어갈 공간이 충분한데도 불구하고 hole들이 흩어져있어 적재를 못하는 현상
= 메모리는 남아 있는 데 사용할 수 없는 상황
hole: 하나의 사용 가능한 메모리 블록
💡 해결 방법
- 압축(Compression): 메모리의 모든 내용을 한 군데로 몰고, 모든 가용 공간을 다른 한 군데로 몰아서 큰 블록을 만드는 것
- 단, 프로세스 재배치가 동적으로 이루어지는 경우에만 가능
- 페이징(Paging): 한 프로세스의 논리 주소 공간을 여러 개의 비연속적인 공간으로 나누어, 필요한 크기의 공간이 가용해지는 경우 물리 메모리를 프로세스에 할당하기
📍 내부 단편화 (Internal Fragmentation)
: 할당된 메모리 블록 내부에 사용되지 않는 공간이 생기는 현상
= 블록 크기에 비해 실제로 필요한 메모리 양이 적은 상황
- 고정 크기 메모리 할당에서 요청된 크기보다 더 큰 블록이 할당되는 경우 발생할 수 있다.
- 즉, 페이지 크기가 클수록 내부 단편화가 커진다.
반응형
'⚙️ CS > 운영체제' 카테고리의 다른 글
| [운영체제] 페이지 교체 알고리즘 (0) | 2025.05.06 |
|---|---|
| [운영체제] 가상 메모리 & 페이징 & 세그멘테이션 (1) | 2025.05.06 |
| [운영체제] 캐시 메모리 (Cache Memory) (1) | 2025.04.29 |
| [운영체제] Thread Pool & Fork-Join (0) | 2025.04.29 |