물리적인 메모리 관리를 어떻게 할 것인가
Allocation of Physival Memory
메모리는 일반적으로 두 영역으로 나누어 사용
- OS 상주 영역: 높은 영역, 커널 코드
- 사용자 프로세스 영역: 낮은 영역, 사용자 코드
사용자 프로세스 영역의 할당 방법
1) Contiguous allocation
- 연속 할당
- 프로그램이 메모리에 통째로 올라가는 방법
- 프로세스가 메모리에 연속적인 공간에 적재
- Fixed partition allocation, Variable partition allocation
2) Noncontiguous allocation
- 불연속 할당
- 하나의 프로세스가 메모리 영역에 분산되어 올라가는 방법
- 현재 시스템에서 사용하는 방법
- Paging, Segmentation, Paged Segmentation
Contiguous allocation
1) Fixed partition allocation
- 고정 분할 방식
- 사용자의 프로그램이 들어갈 부분을 영구적 분할(partition)로 나눠놓는 방법
- 균일한 크기인 방식도 있고 여러 크기의 방식도 존재
- 분할 당 하나의 프로그램을 적재
- 낭비되는 메모리 조각이 발생 -> 융통성이 없음
- 외부 조각: 크기가 너무 작아서 프로그램이 들어가지 못하는 공간
- 내부 조각: 프로그램을 넣었는데 남는 공간
2) Variable partition allocation
- 가변 분할 방식
- 프로그램이 들어갈 부분을 나눠놓지 않는 방식
- 프로그램이 실행될 때마다 차곡차곡 올림
- 이전 올라간 프로그램이 종료되어 빈 공간이 생겨도 다음 프로그램이 더 크면 사용할 수 없음(외부조각)
Hole
- 가용 메모리 공간인 다양한 크기의 Hole이 메모리 여러 곳에 흩어져 있게 됨
- 운영체제는 두 정보를 알고 있어야 함 -
할당된 공간 / 가용 공간(hole)
➡️ 가용 공간(Hole) 중 어디에 프로그램을 넣을까?
Dynamic Storage Allocation Problem
가변 분할 방식에서 크기가 n인 프로그램 할당을 만족하는 가장 적절한 hole을 찾는 문제
(1) First fit
- 크기가 n이상인 공간 중 최초로 찾아지는 hole에 할당
(2) Best fit
- 크기가 n이상인 공간 중 가장 작은 hole을 찾아 할당
- hole이 크기순으로 정렬되지 않은 경우 모든 hole을 탐색해야 함
- 아주 작은 hole들이 생성됨
(3) Worst fit
- 가장 큰 hole에 할당
- 모든 hole을 탐색해야 함
- 상대적으로 큰 hole들이 생성됨
- First fit과 Best fit에 비해 속도와 공간 이용 측면에서 비효과적임
Compaction
외부 조각을 해결하는 방법
- hole들을 한 곳으로 몰아 하나의 큰 hole로 만들기
- 많은 프로그램을 바인딩해야 하는 비용이 많이 드는 방법
- 최소한의 메모리 이동을 찾는 것도 매우 복잡한 문제
- 실행 시간에 동적으로 재배치가 가능한 런타임 바인딩 방식인 경우에만 가능
참고 링크
반효경 교수님 강의