Memory Allocation
Memory Allocation 정책
Continuous Memory Allocation
- 프로세스를 하나의 연속된 메모리 공간에 할당
- 고려 사항
- Multi programming degree : 프로그램을 연속된 메모리에 할당하는 형태로 몇 개나 올릴 수 있는가?
- 연속된 공간을 어떻게 분할하여 할당할 것인가?
- 각 프로세스에게 얼마 만큼의 메모리 공간을 할당할 것인가?
Uni-Programming
하나의 프로세스만 메모리에 할당 (가장 간단)
고려 사항
프로그램의 크기가 메모리의 크기보다 크다면?
- 현재 필요한 부분만 잘라 내어 메모리에 할당한다.
- 자르는 것은 프로그래머의 역할이다.
- 사용자가 프로그램의 흐름/자료구조를 완전히 파악하고 있어야 한다.
메모리가 커널 영역을 침범할 수 있다.
- 건드리면 안 되는 커널 영역을 정의한 경계 레지스터(Boundary register)를 사용한다.
프로그램의 크기가 메모리보다 작다면 공간이 낭비된다.
- 시스템 리소스 활용도가 낮다.
- 시스템 퍼포먼스가 낮다.
Multi-Programming
Fixed Partition Multi-Programming
- 메모리 공간을 고정된 크기로 분할(미리 분할되어 있다)
- 메모리 관리가 간편
- 각 프로세스는 하나의 partition에 적재
- partition의 경계마다 boundary register를 배치하여 다른 프로세스 침범 방지
- Multi-Programming Degree = Partition count
- Internal/External fragmentation이 발생하여 자원이 낭비될 수 있음.
Fragmentation(단편화)
외부 단편화(External fragmentation)
- 남은 메모리 크기 > Process 크기
내부 단편화(Internal fragmentation)
- Partition 크기 > Process 크기
- 메모리 낭비
- 각 프로세스가 연속된 공간을 차지하여 파티션과 파티션 사이에 남는 공간이 생김
- Partition 크기 > Process 크기
Variable Partition Multi-Programming
초기에는 전체가 하나의 영역
필요하다고 할 때 필요한 만큼 메모리 공간을 잘라서 나누어 주는 개념
프로세스를 처리하는 과정에서 메모리 공간이 동적으로 분할된다.
Internal fragmentation이 발생하지 않는다.
VPM Example
- 초기 메모리 크기 120 MB
- A 프로세스가 20 MB 요청 -> A 프로세스에 20 MB 할당
- B 프로세스가 10 MB 요청 -> A 프로세스 + 20 MB 위치에 10 MB 할당
- … (반복)
- B 프로세스가 자원 반환 -> B의 위치가 그대로 빈 공간으로 남는다.
- 시간이 지나면 빈 공간으로 인해 External fragmentation이 발생한다.
- 초기 메모리 크기 120 MB
배치 전략(Placement strategies)
최초 적합(First-fit)
- 충분한 크기를 가진 첫 번째 partition
- 단순하고 오버헤드가 적음
- 공간 활용률이 떨어질 가능성
최적 적합(Best-fit)
- 남는 공간이 가장 적은 공간을 선택
- 모든 partition을 탐색해야 하기 때문에 오버헤드가 큼
- 크기가 큰 partition 유지 가능
- 작은 크기의 partition이 많이 발생한다.
- 재활용하기 어려운 partition이 된다.
최악 적합(Worst-fit)
- 남는 공간이 가장 큰 공간 선택
- 최적적합과 마찬가지로 모든 partition 탐색
- 작은 크기의 partition 발생을 줄일 수 있음
- 큰 크기의 partition이 필요할 때 공간을 확보하기 어려울 수 있다.
순차 최초 적합(Next-fit)
- 최초 적합과 유사
- 마지막으로 탐색한 위치부터 시작한다.
- 5번 공간까지 탐색하고 그 위치의 메모리를 사용했다면 다음은 6번부터 탐색
- 오버헤드 적음
단편화 해결 방안
- 공간 통합(Coalescing holes)
- 인접 빈 영역을 하나의 partition으로 통합
- 오버헤드가 적음
- 메모리 압축(Storage Compaction)
- 남는 공간을 한 곳으로 모음
- 모으는 과정에서 옮겨야 하는 프로세스를 멈추고 재배치
- 오버헤드가 매우 큰 만큼 정말 필요한 순간에만 실행해야 한다.