메모리 관리 - 3

초보개발·2022년 2월 18일
0

OS

목록 보기
29/38

물리적 메모리 할당 방식


물리적 메모리는 운영체제 상주 영역과 사용자 프로세스 영역으로 나눠진다.

  • 운영체제 상주 영역: 인터럽트 벡터와 함께 물리적 메모리의 낮은 주소 영역을 사용, 운영체제 커널이 위치함
  • 사용자 프로세스 영역: 높은 주소 영역 사용

사용자 프로세스 영역 관리 방법은 프로세스를 메모리에 올리는 방식에 따라 연속 할당(Contiguous allocation) 방식과 불연속 할당(Noncontiguous allocation) 방식으로 나눠볼 수 있다.

연속할당 방식


연속할당 방식은 물리적 메모리를 다수의 분할로 나누어 분할에 하나의 프로세스가 적재하는 방식이다.

고정분할(fixed partition allocation)

물리적 메모리를 주어진 개수만큼의 영구적인 분할로 미리 나누어두고 각 분할에 하나의 프로세스를 적재해 실행시키는 방식이다. 분할 크기는 모두 동일하거나 각각 다를 수 있으나 하나의 분할에는 하나의 프로그램만 적재 가능하다.

따라서 고정분할 방식에선 동시에 메모리에 올릴 수 있는 프로그램 수가 고정되어 있으며 수행 가능한 프로그램의 최대 크기도 제한된다는 점에서 융통성이 떨어진다.

고정분할 방식에서는 external fragmentation과 internal fragmentation이 발생할 수 있다.

  • external fragmentation: 프로그램의 크기보다 분할이 더 작은 경우 해당 분할이 비었음에도 불구하고 프로그램을 적재할 수 없을 때 발생하는 메모리 공간
  • internal fragmentation: 프로그램의 크기보다 분할이 더 클 때 해당 분할에 프로그램을 적재하고도 남는 메모리 공간

가변분할(variable partition allocation)

메모리에 적재되는 프로그램의 크기에 따라 분할의 크기, 개수가 동적으로 변하는 방식을 말한다. 따라서 프로그램의 크기를 고려한 메모리 할당 기법이 필요하다.

가변분할 방식에서는 프로그램의 크기보다 더 크게 할당하지 않으므로 내부 단편화 문제는 발생하지 않는다. 하지만, 이미 메모리에 존재하는 프로그램이 종료될 경우 중간에 빈 공간이 발생하게 되며 이 공간이 새롭게 시작되는 프로그램의 크기보다 작을 경우 외부 단편화가 발생할 수 있다.

동적 메모리 할당 문제(dynamic storage-allocation problem): 주소 공간의 크기가 n인 프로세스를 메모리에 올릴 때 물리적 메모리 내 가용 공간 중에서 어떤 위치에 올릴 것인지 결정하는 문제

동적 메모리 할당 문제를 해결하는 방법 세가지
1. first-fit: 크기가 n이상인 가용 공간 중 가장 먼저 찾아지는 곳에 프로세스를 할당, 시간적인 측면에서는 효율적
2. best-fit: 크기가 n이상인 가장 작은 가용 공간을 찾아 그곳에 새로운 프로그램을 할당, 가용 공간이 정렬되어 있지 않은 경우에는 모든 공간의 크기를 탐색해야 하므로 오버헤드가 발생하고 다수의 매우 작은 가용 공간들이 생겨날 수 있지만 공간적인 측면에서는 효율적
3. worst-fit: 가용 공간 중에서 가장 크기가 큰 곳에서 새로운 프로그램 할당, 모든 가용 공간을 탐색해야하므로 오버헤드가 발생하고, 상대적으로 더 큰 프로그램을 담을 수 있는 가용 공간을 빨리 소진한다는 문제점이 있음

외부 단편화 문제를 해결하기 위한 방법으로 compaction이 있다. 컴팩션은 물리적 메모리 중에서 프로세스에 의해 사용 중인 메모리 영역을 한쪽으로 몰고 가용 공간들을 다른 한쪽으로 모아 하나의 큰 가용 공간을 만드는 방법이다. 하지만, 현재 수행 중인 모든 프로세스의 메모리 영역을 옮겨야 하므로 비용이 매우 많이 든다는 단점이 있다. 또한, 프로세스의 주소가 동적으로 바뀔 수 있는 실행시간 바인딩 방식의 환경에서만 가능하다.

불연속할당 방식


불연속할당 방식은 하나의 프로세스를 물리적 메모리의 여러 영역에 분산해 적재하는 방식이다.

  • paging: 각 프로세스의 주소 공간을 동일한 크기의 페이지로 잘라 메모리에 페이지 단위로 적재시키는 기법
  • segmentation: 프로그램의 주소 공간을 코드, 데이터, 스택 등 크기는 일정하지 않지만 의미 있는 단위인 세그먼트로 나누어 세그먼트 단위로 적재하는 기법

0개의 댓글