반응형
분할(Partition) 방법
- 여러 개의 프로그램을 적재하기 위해 메모리 공간을 여러개로 분할한다.
- 분할의 수가 다중 프로그래밍 가능의 정도가 된다.
- 이는 다시 고정분할 방법과 가변 분할 방법으로 나뉜다.
고정분할 방법
- 고정분할 방법은 분할의 단위가 되는 'Partition'의 크기가 고정된 것이다. 따라서 분할의 수도 고정된다.
- 이 경우 주소결속 방법이 간단하다.상한 레지스터와 하한 레지스터를 두고,상한 레지스터에는 영역의 크기가, 하한 레지스터에는 영역의 시작주소가 기록된다. CPU가 논리주소로 메모리를 접근하려 하면 먼저 그 논리주소값이 상한 레지스터에 기록된 영역의 크기값을 초과하는지 확인한다. 만약 초과한다면 이를 진행시킬 경우 다른 영역을 침범하게 될 것이므로 에러처리한다. 이러한 문제가 없다면 논리주소값을 하한 레지스터에 더해 물리주소로 변환한다.
- 각 영역마다 별도의 큐를 두어 프로그램이 들어오면 해당 큐에 고정적으로 배정한다. 하지만 이러한 고정 분할방법은 분할 크기보다 프로그램 주소가 커지면 수행이 불가능하고, 분할마다 남는 공간도 발생할 수 있어 메모리를 효과적으로 사용한다고 하기 어렵다.
가변분할 방법
- 메모리를 고정분할하는 대신 다중 프로그래밍의 정도, 즉 몇 개의 프로그램을 동시에 수행시킬지 정도만 결정하고 메모리 전체를 하나의 연속된 공간으로 보고 적절한 장소에 프로그램을 적재하는 방식이다.
- 여기서 '적절한 장소'란 최초 적합, 최적 적합, 최악 적합 세가지 관점으로 나누어 접근할 수 있다.
- 최초 적합 : 첫 번째 사용 가능한 공간에 바로 할당하는 방법이다. 빈 공간 혹은 지난 번 검색이 끝난 시점부터 적절한 공간을 찾다가 프로그램이 들어가기 충분한 가용공간이 있으면 바로 해당 위치에 할당한다.
- 최적 적합 : 사용 가능 공간들 중 가장 작은 것을 선택한다. 해당 방법은 작은 자투리 공간(fragment)가 많이 발생한다. 또한 가용 공간의 집합이 크기 순으로 정렬되어 있지 않다면 집합 전체를 검색해야 한다.
- 최악 적합 : 가장 큰 공간을 선택한다. 해당 방법은 남는 공간의 크기가 커져 다른 프로세스가 이를 또 활용할 수 있게 된다. 최적 적합과 마찬가지로 가용 공간의 집합이 크기 순으로 정렬되어 있지 않다면 집합 전체를 검색해야 한다.
- 효율성 측면에서는 최초적합=최적적합>최악적합 순으로 좋고, 속도 측면에서는 최초적합>최적적합>최악적합 순으로 좋다고 한다.
- 가변분할 방법의 주소결속은 고정분할 방식과 유사하게 수행된다. 단, 상한 레지스터와 하한 레지스터의 역할을 리미트 레지스터와 재배치 레지스터가 수행한다.
단편화와 압축
- 가변분할에서 프로그램 적재를 진행하면서 생기는자투리 공간을'외부단편'이라 부르고, 해당 공간이 생기는 현상을'외부단편화'라고 하자. (내부단편이라는 것도 있는데, 이는 페이징 기법을 학습할 때 알아볼 것이다.)
- 최적적합 방식을 사용했을 경우를 통계적으로 분석해보면, N개의 블록이 할당되었을 때 0.5N개의 블록이 단편화로 사용 불가능해진다. 이를 50% 규칙이라고 한다. 즉, 메모리의 3분의 1을 사용할 수 없게 된 것이다.
- 이러한외부 단편들을 한 곳으로 모으는 것을'압축(compaction)'이라 한다. 단편들을 한 곳으로 모아 사용할 수 있도록 하는 것이다. 하지만 이러한 압축은 항상 가능하지 않다. 프로세스들의 재배치가 로딩시에만 이루어진다면 압축이 불가능하다. 주소결속이 실행시간에 동적으로 이루어질 수 있는 주소체계이어야 한다. 그래야 압축과정 후에도 해당 프로세스의 재배치 레지스터 값을 수정해서 사용할 수 있게될 것이다.
- 하지만 이러한 압축도 메모리를 이동하는 것이므로 비용이 든다. 이러한 비용을 '압축 비용'이라고 부른다. 단편들을 한 곳으로 모으기 위해 이동되는 메모리의 양이 압축 비용인 것이다.
- 이러한 압축이 필요한 이유는 메모리 상 연속된 공간에 프로그램을 탑재하기 때문이다. 이러한 사고에서 탈피하여 접근한 것이 다음에 배울 '세그멘테이션'과 '페이징'이다.
- 단편화 문제는 메인 메모리 뿐만 아니라 일반적인 저장장치에서 언제든 발생하는 문제이다.
반응형
'💻 CS > 운영체제' 카테고리의 다른 글
[운영체제] 페이지 테이블 (0) | 2020.05.19 |
---|---|
[운영체제] 페이징 (0) | 2020.05.16 |
[운영체제] 메모리 경영 (0) | 2020.05.14 |
[운영체제] 교착상태 처리 (0) | 2020.05.12 |
[운영체제] 교착상태 (0) | 2020.05.08 |