Chapter 8-2. Memory Management II
Allocation of Physical Memory
메모리에는 OS가 상주하는 영역이 있고 그 나머지 메모리공간에 사용자 프로그램이 올라가게 된다.
OS는 Interrupt vector와 함께 낮은 주소를 사용한다.
사용자 프로세스 영역 할당방법에는 두 가지로 나눌 수 있다.
Contiguous allocation (연속 할당)
각각의 프로세스가 메모리의 연속적인 공간에 적재되는 방법이다.
고정 분할 방식
가변 분할 방식
두 가지 방식으로 나뉜다.
Noncontiguous allocation (불연속 할당)
하나의 프로세스가 메모리의 여러 영역에 분산되어 올라갈 수 있는 방법이다.
Paing
Segmentation
Paged Segmentation
세 가지 방식이 있다.
고정 분할 방식
메모리를 미리 파티션으로 나누어 두는 방식이다.
미리 나눠둔 파티션의 크기보다 큰 프로세스는 해당 파티션에 적재되지 못한다.
운이 좋아서 미리 나눠둔 파티션에 요청되는 프로세스의 크기가 딱딱 맞아 떨어지면 좋겠지만,
대부분의 경우 프로세스의 크기가 파티션보다 크거나 작다.
파티션 보다 큰 경우에는 파티션으로 아예 적재조차 되지 않으므로 그 파티션이 무용지물이 된다.
이를 외부조각(외부 단편화)라고 한다.
그리고 파티션 보다 작은 경우에는 파티션 안에 낭비되는 공간이 생긴다.
이를 내부조각(내부 단편화)라고 한다.
너무 비효율적인 방법이라,
미리 나눠두지 않고 사용자로부터 요청이 오면 그때 그 크기만큼 할당해주는 방법을 도입했다.
그것이 가변 분할 방식이다.
가변 분할 방식
요청한 프로세스 크기만큼만 할당해준다.
여기서 중요한 것은 요청한 순서대로 차곡차곡 할당해준다는 것이다.
하지만 프로세스의 시작과 종료는 먼저 요청을 하고 먼저 할당을 받았다고 해서 먼저 반환하는 것이 아니다.
즉, 메모리를 할당받고 반환하는 순서가 프로세스마다 다르다는 것이다.
이로 인해 가변적으로 할당을 해줬던 메모리가 군데 군데 빈 공간이 생기게 된다.
그 빈 공간을 hole이라고 한다.
*Hole
가용 메모리 공간으로 다양한 크기의 hole들이 여러 곳에 흩어져 존재하게 된다.
운영체제는 메모리에서 어느 부분이 사용중이고, 어느 부분이 hole상태인지 모두 파악하고 있어야 한다.
그래야 새로 요청한 프로세스를 어느 hole에 할당할지 결정할 수 있기 때문이다.
이 문제를 Dynamic Allocation Problem이라고 한다.
Dynamic Allocation Problem
Size가 n인 프로세스를 할당할 가장 적절한 hole을 찾는 문제
First Fit
Size가 n인 것을 찾기 시작해서 가장 먼저 찾아지는 hole에 할당하는 방법
n보다 크기만 하면 할당해주는 것이다.
Best Fit
Size가 n이상인 hole들 중 가장 작은 hole을 찾아서 할당한다.
모든 hole들을 검색해야한다는 시간적 문제가 발생한다.
또 이렇게 해도 아주 작은 hole들이 계속해서 생성된다.
Worst Fit
Size가 n이상인 hole등 중 가장 큰 hole에 할당한다.
이 역시 모든 hole들을 검색해야한다.
Hole을 한 군데로 모으는 방법이 도입되었다.
Compaction
외부 조각 문제를 해결하기 위한 방법으로 hole들을 모아 큰 hole을 만든다.
디스크 조각모음이 그 예이다.
hole을 찾는 시간을 줄이기 때문에, 컴퓨터가 빨라지는 것이다.
하지만 이 compaction방법은 비용이 많이 소요되는 방법이다.
최소한의 메모리 이동으로 최대한의 효율을 낼 방법을 찾아야 한다.
이 방법은 Runtime binding의 경우에만 수행될 수 있다.
Chapter 8-2. 끝
이 포스팅은 이화여대 반효경 교수님 강의를 듣고 요약한 내용을 담고 있습니다.
'Dev.Basic > 운영체제' 카테고리의 다른 글
[OS] 8-4. Memory Management IV (1) | 2016.06.05 |
---|---|
[OS] 8-3. Memory Management III (0) | 2016.06.05 |
[OS] 8-1. Memory Management I (0) | 2016.06.05 |
[OS] 7. Deadlock (0) | 2016.06.04 |
[OS] 6-2. Process Synchronization II (0) | 2016.06.04 |