-
11. 메모리 관리운영체제 2022. 8. 17. 02:10
오버레이(Overlay)
할당받은 주 기억 장치의 공간보다 프로그램의 용량이 더 클 때 사용하는 방법입니다. 중첩이라 부르기도 합니다.
여러 조각으로 쪼개진 프로그램을 필요한 데이터만 메모리에 적재하여 사용합니다.
쉽게 말하면 필요한 부분만 가져다 쓰는 것입니다.
이 방법은 메모리의 용량이 부족하던 초기 시스템에서 주로 쓰이던 방법이었으며
현재는 가상 메모리라는 더 나은 방법을 사용하고 있습니다.
가상 메모리는 다음번에 자세하게 알아보겠습니다.- 오버레이는 메모리 - 보조 기억 장치 간의 상호작용이므로
커널에게 특별한 지원을 요구하지 않습니다. - 프로그램을 어떻게 쪼갤지는 프로그래머가 결정합니다.
- 이 때문에 프로그래머는 프로그램에 대해 완벽하고 정확하게 이해하고 있어야 하며,
오버레이가 복잡해질 경우 디버깅이 매우 힘들어집니다.
스와핑(Swapping)
프로세스를 주 기억 장치 → 보조 기억 장치 또는 보조 기억 장치 → 주 기억 장치로 이동시키는 방법입니다.
이전에 배웠던 라운드 로빈 방식으로 예를 들어보겠습니다.
A의 CPU 할당 시간이 초과되면 준비 큐의 맨 뒤로 돌아가게 되는데,
A는 프로세스가 가진 정보 그대로 보조 기억 장치에 적재됩니다.
그리고 일정 순서가 되면 A를 다시 주 기억 장치로 불러오고, 실행하게 됩니다.
이때 A를 보조 기억 장치에 적재하는 것을 스왑-아웃(swap-in),
메모리로 불러오는 것을 스왑-인(swap-in)이라고 합니다.
스와핑은 비교적 이용자 수가 적었던 초기의 시분할 시스템에서 많이 사용되었으며
현재 사용하는 페이징 시스템의 기초가 되었습니다.메모리 분할 방식
멀티 프로그래밍을 위해서는 여러 개의 프로세스가 메모리에 적재되어 있어야 합니다.
하지만 모든 프로그램이 메모리에 적재될 수는 없겠죠.
따라서 프로세스들에게 일정한 공간을 나누어 주어야 하는데,
이 공간을 일정하게 분할하냐, 유동적으로 분할하냐에 따라서 방식이 구분됩니다.고정 분할 방식
만약 메모리의 용량이 64K라면,
분할 1 = 10K, 분할 2 = 20K, 분할 3 = 34K
이런 방식으로 공간을 고정적으로 분할(Partition)하는 것을 말합니다.
작업 큐에 있는 작업이 5K 라면 분할 1을 할당받고,
25K라면 분할 2를 건너 뛰고 분할 3을 할당받게 됩니다.
고정 분할 방식을 사용하면 작업의 용량에 정확히 맞춰 분할할 수 없기 때문에기억 장치 단편화라는 문제가 발생하게 됩니다,
- 외부 단편화 : 작업의 용량보다 분할 공간이 너무 작아
분할 하나 전체가 남아 있을 때를 말합니다. - 내부 단편화 : 작업보다 분할 공간이 커서 남는 공간을 말합니다.
가변 분할 방식
고정 분할 방식은 공간을 분할하고 나서 공간을 재분할하기 어려운 반면
가변 분할 방식은 작업의 용량에 맞춰 유동적으로 공간을 분할합니다.
메모리의 용량이 64K일 때,작업의 용량이 10K라면 10K만큼 공간을 분할, 작업에게 할당합니다.
남은 54K 용량 중에서
다음 작업의 용량이 9K라면 9K만큼 공간을 분할, 작업에게 할당합니다.
이 작업을 반복하게 됩니다.
하지만 가변 분할 방식에서도 단편화가 일어날 수 있습니다.
초기에는 위 그림처럼 할당이 진행되는데,
시간이 지날수록 공간의 배치에 구멍이 뚫리기 시작합니다.
단편화를 해결하기 위한 방안은 두 가지가 있습니다.
- 공백의 통합 : 주변에 비어있는 분할된 공간들을 하나의 분할된 공간으로 합칩니다.
- 기억 장치 집약 : 작업들을 한 쪽으로 몰아 남은 빈 공간을 하나의 분할된 공간으로 합칩니다.
버디 시스템(Buddy System)
버디 시스템은 고정 분할 방식과 가변 분할 방식을 적절히 혼합한듯한 방식입니다.
메모리 공간이 할당되는 절차와 함께 이해해보겠습니다.
- 메모리는 항상 2^n 사이즈를 할당받습니다.
- 적당히 공간을 할당할 수 있을 만큼 공간을 반씩(/2) 줄여나갑니다.
- 2^k-1 <= 작업 용량 <= 2^k 범위 안에 포함되면 2^k 만큼 공간을 분할, 할당합니다.
예) 512(2^9) <= 작업 용량 <= 1024(2^10) 이면 1024만큼 공간을 할당합니다. - 작업이 완료되고, Buddy 공간이 비어있으면 공간을 합칩니다.
※Buddy 공간 : 반으로 쪼개진 뒤 나머지 공간(2048 -> 1024 + 1024)
즉, 2의 n제곱만큼 고정적인 공간을 할당하는데,
n은 작업의 용량에 따라 변할 수 있습니다.
하지만 버디 시스템 기법도 단편화를 피할 수는 없습니다.
어쨌든 일정 용량의 공간을 할당받기 때문이죠.
메모리를 관리하면서 단편화를 피할 수 있는 방법은 없습니다.
알고리즘을 잘 구현하여 어떻게 효율적으로 공간을 사용하느냐를 고민해야합니다.
'운영체제' 카테고리의 다른 글
13. 가상 메모리 관리 (0) 2022.08.20 12. 가상 메모리 (0) 2022.08.18 10. 프로세스 간 통신 (0) 2022.08.16 09. 프로세스 스케줄링 (0) 2022.08.13 08. 프로세스의 생성과 복사 (0) 2022.08.12 - 오버레이는 메모리 - 보조 기억 장치 간의 상호작용이므로