다중 프로그래밍 환경
-
옛날에는 OS가 없었기 때문에 단순히 메모리에 하나의 프로세스만 올려서 사용하였다.
-
그 이후, 메모리에 하나의 프로세스와 OS가 함께 올라가는 형태를 취하다가
-
현대에 들어와서 OS와 여러개의 프로세스를 동시에 메모리에 올려놓는 다중 프로그래밍 환경에 들어오게 되었다.
- 다중 프로그래밍 환경에서 부팅 직후의 메모리 상태
- OS 하나와 아주 큰 크기의 메모리 빈 공간이 존재
- 부팅 이후, 여러개의 프로세스가 사용될때의 메모리 상태
- 프로세스들이 빈번하게 생성되고 종료되면서 중간중간마다 메모리 빈 공간이 생김
- 위 와 같은 상황을 메모리 단편화라고 한다
메모리 단편화 (Memory fragmentation)
- Hole (메모리 빈 공간)들이 불연속하게 흩어져 있기 때문에 프로세스 적재 불가
- 빈 공간보다 큰 크기의 프로세스들이 들어가지 못함
- 외부 단편화 (external fragmentation) 발생
- 외부 단편화?
- 모든 Hole의 크기의 합이 크더라도, Hole들이 메모리에서 따로따로 분리되어 있어서 프로세스들이 들어가지 못하는 상황
- 해결 방법
- 연속 메모리 할당 사용
- 방식1. First-fit : 최초 적합
- 메모리의 빈 공간을 전부 탐색해서, 프로세스가 들어갈 수 있으면 바로 무조건 해당 Hole에 프로세스 넣기
- 방식2. Best-fit : 최적 적합
- 메모리의 빈 공간 중에서 프로세스의 크기와 제일 적합한(비슷한) 크기를 가진 메모리를 사용하는 방법
- 방식3. Worst-fit : 최악 적합
- 메모리의 빈 공간 중에서 프로세스의 크기와 가장 안맞는(빈 공간의 크기가 프로세스의 크기보다 커야함, 들어가도 빈공간이 많이 남는 경우) 크기를 가진 메모리 부분을 사용하는 방법
- 위 해결 방법을 사용하더라도 외부 단편화는 일어날 수 밖에 없다....
- 그렇다면 더 좋은 해결 방법은 무엇일까?
- Compaction
- 메모리 Hole 들을 한 곳으로 모으는 방식
- 한 곳으로 모으기 위한 최적의 알고리즘은 없다.
- Hole을 한 곳으로 모으기 위해서 메모리 계산에 대한 부담이 크다.
이번 포스팅을 통해 연속 메모리 할당에 대해서 알아보았습니다.
다음 포스팅 부터 메모리를 더욱 효율적으로 할당할 수 있는 페이징 기법에 대해서 알아보도록 하겠습니다.