일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 1%d
- 1065
- 이더리움
- 별 찍기 - 11
- Baekjoon
- 블록 체인
- 세 수
- Mist
- if문 사용해보기
- 10871
- 자바스크립트
- Remix
- 비트 코인
- 함수 사용하기
- 단계별로 풀어보기
- 그대로 출력하기
- 10817
- 1546
- 솔리디티
- 알고리즘 문제풀이
- 더하기 사이클
- Dapp
- for문 사용해보기
- X보다 작은 수
- 평균은 넘겠지
- 백준
- 2448
- 1110
- 가상 화폐
- 시험 성적
- Today
- Total
블링블링 범블링
[OS 16장] 메모리 관리 - 연속 메모리 할당 본문
컴퓨터의 구조가 발달되어 오면서 운영체제는 다중 프로그래밍 환경을 조성하게 된다. 부팅 직후 메모리에 운영체제가 하드디스크로부터 적재되고 컴퓨터가 동작을 하는 것을 기다린다. 그 후 여러 가지의 프로그램이 동시에 올라와서 스케줄링에 의해 CPU나 I/O를 할당받는다. 처음에 부팅 직후에는 운영체제만 적재되어 있으므로 운영체제를 제외한 공간이 모두 비어 있게 된다. 그래서 big single hole이 생기게 된다. 이 후 프로세스가 생성되고 종료되는 작업을 반복하며 컴퓨터가 동작하게 된다. 이 때는 프로세스들은 여러 위치의 메모리에 적재되기 때문에 scattered holes가 생성되게 된다. 프로세스가 순서대로 쌓이더라도 작업이 끝나는 순서는 정해져 있지 않고 다시 들어오는 프로세스와도 메모리 공간 차지 사이즈가 다르기 때문에 메모리의 빈 공간이 중간 중간에 계속 생성될 것이다.
scattered holes가 계속 발생하게 되면 hole 들이 불연속하게 흩어져 있게 되어 메모리 단편화 현상이 발생하게 된다. 이렇게 되면 메모리의 빈 공간은 많은데 사이즈가 작은 빈 공간이 많아 다른 프로세스를 적재할 수 없는 현상이 발생한다. 이러한 현상을 외부 단편화라고 한다. hole들의 크기를 모두 합치면 프로세스를 충분히 적재할 수 있는데 떨어져 있어서 프로세스가 못 들어가는 현상이다. 메모리 관리자 입장에서 보면 메모리가 충분히 비어 있는데도 프로세스를 넣지 못하니 매우 억울한 상황이다.
외부 단편화를 없애는 방식으로 연속 메모리 할당 방식을 사용한다. 연속 메모리 할당 방식에도 3가지의 방법이 존재한다.
최초 적합(First-fit)은 메모리를 순차적으로 탐색하여 제일 먼저 발견한 적절하게 들어갈 수 있는 곳을 찾아 프로세스를 적재하는 방법이다.
최적 적합(Best-fit)은 메모리를 탐색하여 메모리 공간 중에서 제일 적절하게 들어갈 수 있는 곳을 찾아 프로세스를 적재하는 방법이다.
최악 적합(Worst-fit)은 메모리에 넣는데 크기와 제일 안 맞는 공간(프로세스보다 큰 메모리 공간 중에서)에 프로세스를 넣는 방식이다.
할당 방식에 따른 성능을 비교해보면 속도 측면에서는 최초 적합이 좋다. 최초 적합은 메모리를 순서대로 탐색하여 가장 먼저 발견되는 공간에 적재하기 때문에 속도 면에서는 가장 빠르다고 할 수 있다. 이용률의 측면에서 보면 최적 적합이 좋다. 속도는 조금 떨어지지만 정확하게 맞는 위치에 들어가는 방식을 취하기 때문에 애매한 빈 공간을 창출할 일이 많이 없다. 최초 적합의 경우는 자신의 프로세스 크기보다 메모리 공간이 더 큰 경우가 발생하면 무조건 프로세스를 넣지만 최적 적합은 빈 공간을 제일 안 만드는 측면으로 프로세스를 적재한다. 하지만 대부분의 경우를 비교해보면 최초 적합과 최적 적합의 이용률의 차이가 많이 발생하지는 않는다.
연속 메모리 할당의 방식을 사용하더라도 외부 단편화로 인한 메모리 낭비가 1/3 정도 발생한다. 그러므로 비싼 메모리의 공간을 많이 사용할 수 없으니 문제가 크다고 할 수 있다. 이런 방식을 해결하는 또 다른 방법이 Compaction이다. Compaction은 hole 들을 한 곳으로 모으겠다는 방식이라고 할 수 있다. 한 곳으로 모으기 위해서는 메모리를 움직여야한다. 그래서 메모리 계산에 대한 부담이 크다. 또한 hole을 어디로 움직이는 게 좋은가에 대한 문제가 발생한다. 이렇기 때문에 hole을 움직이거나 프로세스를 움직이는 Compaction 방식의 최적의 알고리즘은 존재하지 않는다. 하지만 이런 방식이 있다는 것은 기억하는 것이 좋을 것 같다. 그렇다면 이렇게 메모리 낭비가 심한데 어떻게 해결을 한 것일까? 그 방법이 바로 페이징이다. 페이징은 다음 장에서 설명할 것이다.
'Technology > 오퍼레이팅 시스템' 카테고리의 다른 글
[OS 18장] 메모리 관리 - 세그멘테이션(Segmentation) (0) | 2018.04.17 |
---|---|
[OS 17장] 메모리 관리 - 페이징 (0) | 2018.04.17 |
[OS 15장] 메모리 관리 - 메모리 낭비 방지 (0) | 2018.04.17 |
[OS 14장] 메모리 관리 - 주기억장치(메인 메모리) 개요 (0) | 2018.04.17 |
[OS 13장] 프로세스 관리 - 모니터 (0) | 2018.04.17 |