개요(Overview)
오늘은 기억장치에 대해 알아보도록 하겠습니다.
기억장치는 컴퓨터 시스템에서 매우 중요한 자원 중 하나입니다.
우리가 흔히 메모리(Memory)라고 부르는 하드웨어 장치를 주로 기억 장치라고 정의하는데요. 컴퓨터 시스템에서 모든 프로그램은 각각의 고유한 작업을 수행하기 위해 기억장치, 즉 메모리에 적재되어야 하는 과정을 필요로 합니다.
그러나, 메모리(Memory)라고 하는 장치는 컴퓨터 시스템에서 무한한 자원이 아니기 때문에 각각의 컴퓨터 시스템 및 프로그램의 종류에 따른 적절한 관리가 필요합니다.
따라서, 본 포스팅에서는 기억장치, 특히 주 기억장치의 효율적인 사용을 위한 관리 기법에 대하여 알아보도록 하겠습니다.
기억장치의 종류
종류 | 기억 장치 |
자기 디스크 | 전축, 플로피 디스크, 하드 디스크 드라이브 |
광 디스크 | 레이저 디스크, 콤팩트 디스크, 광자기 디스크, MD, CD-ROM, CD-R, 상변화 디스크, DVD, 블루레이 디스크, HD-DVD |
ROM (Read-Only Memory) |
마스크 롬, PROM, EPROM, UVEPROM, EEPROM, 플래시 메모리 |
RAM (Random Access Memory) |
DRAM, SRAM, 플래시 메모리, FeRAM, Z-RAM, TTRAM |
비휘발성 메모리 | ROM, PROM, EAROM, EPROM, EEPROM, 플래시 메모리, FeRAM, MRAM, PRAM, SONOS, RRAM, NRAM |
테이프 | 자기 테이프, 천공 테이프 |
1. 기억장치의 관리 기법 (실기억장치 vs 가상기억장치)
컴퓨터의 기억 장치는 주 기억 장치의 실제 크기,
즉 실 기억 용량 이내에서만 프로그램을 수행할 수 있도록 하는 실기억장치 기법과,
실제 크기보다 더 큰 기억장치가 있는 것처럼 관리하여 사용할 수 있는 가상 기억장치 기법으로 구분할 수 있습니다.
실기억장치 | 가상기억장치 | ||||
실기억장치 다중 프로그래밍 시스템 | 가상 기억장치 다중 프로그래밍 시스템 | ||||
고정분할 다중 프로그래밍 | 가변분할 다중 프로그래밍 | 순수 페이징 | 순수 세그먼테이션 | 페이징/세그먼테이션 혼용 기법 | |
절대번역 절대로딩 |
재배치기능 번역로딩 |
1.1. 기억장치의 구성
‘기억장치의 구성’이라는 의미는 주 기억장치를 바라보는 관점을 의미합니다.
즉, 주 기억장치의 용도와 목적을 뜻하며 다음과 같은 기준으로 구분할 수 있습니다.
- 주 기억장치 내에 몇 명의 사용자를 둘 것인가 ? (단일 / 다중)
- 주 기억장치를 분할하는 방법 (고정 분할 / 가변분할)
- 사용자 작업이 수행될 분할 선정 방법 (지정된 분할 / 수행 가능한 분할)
- 사용자의 작업이 연속된 분할에 할당되는가? (연속 block / 여러 block)
1.2. 기억장치의 관리 전략
컴퓨터 시스템에서 기억장치의 구성과 상관없이
어떤 전략을 통해 자원을 활용하게 할 지 전략을 설계하는 것은 매우 중요한 일입니다.
이러한 전략을 컴퓨터 기억장치의 관리 전략이라고 일컬으며, 아래와 같이 세 가지 주요한 전략이 존재합니다.
- 반입(fetch) 전략*
- 요구 반입(demand fetch) 전략
- 예상반입(anticipatory fetch) 전략
- 배치(placement) 전략*
- 교체(replacemen) 전략*
반입(fetch) 전략 : 주 기억장치에 넣을 다음 프로그램이나 데이터를 언제 가져올 것인지 결정
- 요구 반입(demand fetch) 전략 : 다음에 수행될 프로그램이나 데이터를 현재 실행되고 있는 프로그램에 의해 참조될 때, 주 기억장치에 옮기는 방법
- 예상반입(anticipatory fetch) 전략 : 앞으로 요구될 가능성이 큰 프로그램 또는 데이터를 예상하여 미리 주 기억장치에 옮기는 방법
배치(placement) 전략 : 반입(fetch) 전략에 의해 반입된 프로그램이나 데이터를 주기억 장치의 어디에 위치시킬 것인가 결정하는 전략
- 최초 적합 (first-fit)
- 최적 적합 (best-fit)
- 최악 적합 (worst-fit)
교체(replacement) 전략 : 반입 전략에 의해 새로 들어온 프로그램이나 데이터가 들어갈 장소를 마련하기 위하여 기존의 프로그램 이나 데이터 중 무엇을 제거할 지 결정하는 전략
1.3. 단일 사용자 연속 기억 장치 할당
1.3.1. 기억 장치 할당
초기 컴퓨터 시스템에서는 한 번에 한 사용자만 사용할 수 있어서,
시스템의 모든 자원은 그 사용자가 마음대로 사용할 수 있었습니다.
하지만 위와 같은 방식에서는 사용자의 프로그램이 주 기억장치의 용량보다 클 수 없다는 태생적인 한계가 존재합니다.
이 경우, 아래와 같이 오버레이(overlay) 기법을 사용하면 주 기억장치 용량보다 큰 프로그램을 수행할 수 있습니다.
그러나 오버레이 기법은 제한된 주기억 장치를 사용하여 보다 큰 프로그램을 사용할 수 있다는 장점이 있지만,
사용자가 직접 오버레이 작업을 해주어야 하므로, 시간과 추가적인 작업이 많이 필요로 한다는 단점이 있습니다.
따라서, 가상 기억 장치 시스템에서는 프로그래머가
직접 오버레이를 통제하지 않더라도 오버레이가 가능하도록 기능을 지원합니다.
1.3.2. 시스템의 보호
단일 사용자인 컴퓨터 시스템에서는 운영체제가 사용하는 부분,
그리고 사용자가 사용하는 부분으로 나뉘기 때문에 또 다른 프로그램 또는 사용자로 인해
실행중인 프로그램이 침범되거나, 운영체제의 영역을 침범할 우려가 적었습니다.
그러나, 컴퓨터 시스템이 고도화되면서 한 개 이상의 프로그램,
한 명 이상의 사용자가 컴퓨터 시스템을 사용할 수 있게 되면서
운영체제는 이러한 사용자 또는 프로그램으로부터 운영체제와 같이 중요한 구역이나,
실행중인 프로그램이 있는 구역을 다른 프로그램이 침범하지 못하도록 하는
‘보호(Protection)’ 작업이 필요하게 되었습니다.
특히, 운영체제가 사용하는 기억장치의 영역(=주소)을 임의의 사용자나,
악의를 가진 프로그래머가 침범하도록 허용한다면 이는 치명적인 문제를 야기시킬 수 있기 때문에
운영체제는 사용자 프로그램으로부터 강력하게 보호되어야 할 필요가 생겼습니다.
그렇기에, 운영체제와 같이 중요한 프로그램이 위치한 구역을 마음대로 침범하거나,
변조 또는 조작될 수 없도록 특별한 장치를 마련하였습니다.
이러한 특별한 장치의 이름은 바로 경계 레지스터(Boundary Register)입니다.
CPU 내의 하나의 경계 레지스터를 두어 운영체제가 위치하는 가장 마지막 주소 부분을 기억하도록 하였는데,
이러한 레지스터를 통해 사용자 프로그램은 자신이 사용할 기억장치의 특정 구역,
즉 메모리의 주소를 요청할 때마다 이 경계 값을 기준으로 비교하여
만약 운영체제의 주소를 침범하려 한다면 프로그램 수행을 중단시키고 에러를 발생시켜
운영체제를 안전하게 보호하도록 설계되어 있습니다.
이를 실현하기 위한 방법으로는 위와 같이 CPU 내의 하나의 경계 레지스터를 두어
프로그램이 사용할 주소를 침범하지 못하도록 검사함으로 실현될 수 있습니다.
그러나, 사용자가 입출력과 같은 기능을 사용하기 위해서는 운영체제를 통해 제공받아야만 하는데,
이와 같은 경우에는 SVC(슈퍼 바이저 콜, Super Visor Call)이라는 특수한 명령을 통해서 기능을 사용할 수 있도록 하고 있습니다.
1.4. 고정 분할 다중 프로그래밍
만약 컴퓨터 시스템을 한 명의 사용자만 사용하게 된다면, 운영체제는 이 사용자에게 사용 가능한 기억 장치를 제공하여 어떤 프로그램이든 사용할 수 있도록 충분한 공간을 내어주면 되므로 설계가 매우 간단할 것입니다.
하지만, 이렇게 메모리의 할당이 간단하는 의미는 곧 단위 시간당 사용 가능한 프로그램 또는 사용자의 수가 가장 적고 한 번에 한 개의 작업 또는 사용자만 컴퓨터의 자원을 점유할 수 있기 때문에 굉장히 비효율적인 관리 전략이 됩니다.
이와 같이 한 사용자 또는 프로그램에만 자원을 모두 내어준다는 것은,
오늘날 컴퓨터를 사용할 때, 아래와 같이 컴퓨터를 사용한다는 것을 의미합니다.
- MS 오피스 프로그램 중 하나만 사용하기(Word, Excel, Power Point 중 하나)
- 인터넷 익스플로러 하나만 사용하기 (크롬 쓰면서 엣지 사용 불가)
- 파일 탐색기만 사용하기
- 음악 플레이어를 통해 음악 감상만 하기 (유튜브와 같은 영상 시청 X)
이는 곧 컴퓨터 자원의 낭비를 초래하게 되고, 따라서 컴퓨터를 사용하는 다양한 사용자 및 프로그램이 자신이 필요한 자원만 빠르게 사용하고 반납하도록 관리할 필요가 있는 것입니다.
그렇기에 이처럼 한 명 이상의 사용자 및 프로그램이 동시에 시스템을 자원을 사용하여 각각 수행할 작업을 처리할 수 있도록 하는 ‘다중 프로그래밍 시스템’이 등장하게 되었습니다.
1.4.1. 절대번역과 절대로딩
어떤 프로그램이 수행할 작업을 처리하기 위해서는 먼저 주 기억장치의 어떤 한 분할에 적재(load) 되어야 합니다.
‘절대번역과 절대로딩’은 수행되어야 할 각 작업별로 기억장치의 공간을 나누어
그 영역에서만 사용할 수 있도록 하는 것입니다.
위와 같은 방법에서는 하나의 작업이 실행준비되어 있는데,
자신의 분할이 다른 작업에 의해 할당되어 사용중이라면 다른 분할이 비어 있어 사용중이 아니더라도(=Idle),
그 작업은 기다려야 한다는 한계를 가지고 있습니다.
1.4.2. 재배치 가능 번역과 로딩
절대번역과 절대로딩에서는 어떤 작업은 자신의 분할에서만 처리되어야 한다는 단점이 있었습니다.
‘재배치 가능 번역과 로딩’ 전략에서는 이러한 단점을 보완하기 위해 작업을 관리하기 위한 대기열,
즉 큐(Queue)를 하나로 통합하고, 어떤 분할인지 상관 없이 비어 있는 분할이 존재하고,
해당 작업이 적재될 수 있는 크기의 분할이라면 임의의 분할에서 처리될 수 있도록 합니다.
위의 그림처럼 재배치 가능 번역과 로딩을 위해서는 이 작업이 수행될 시점에 이르러
작업 수행에 필요한 충분한 크기의 분할을 결정하고, 적재(load)하게 되는데
이러한 과정에 사용되는 것이 재배치 가능 번역 및 로더 입니다.
1.4.3. 다중 프로그래밍에서의 시스템 보호
다중 프로그래밍 시스템에서는 여러 사용자가 동시에 시스템을 공유하여 사용하기 때문에,
운영체제와 같은 시스템에 대한 보호 뿐만 아니라 다른 사용자나 프로그램에 대한 보호도 이루어져야 합니다.
다중 프로그래밍에서는 두 개의 레지스터를 사용하여 사용자 분할의 상한과 하한선을 나타내 이 범위를 초과하지 못하도록 처리합니다.
또 다른 방법으로는 분할의 상한 또는 하한 값과 분할을 크기를 기억함으로써 시스템을 보호하는 방법도 가능합니다.
(상한 값 + 크기, 하한 값 + 크기)
1.4.4. 단편화(fragmentation)
고정 분할 다중프로그래밍에서 사용자의 작업 크기는 분할에 정확히 맞지 않거나
분할이 너무 작아서 대기중인 작업이 하나도 맞지 않을 수도 있습니다.
따라서, 이러한 상황일 때 해당 분할은 사용되지 않은 상태로 오래 방치될 수 있는데
이러한 현상을 단편화(fragmentation)이라고 합니다.
1.5. 가변 분할 다중 프로그래밍
고정 분할 다중 프로그래밍 기법은 메모리의 크기를 미리 고정된 크기,
즉 고정된 분할(Partition)을 프로그램 및 사용자가 활용해야한다는 단점이 있었습니다.
하지만, 가변 분할 다중 프로그래밍에서는 이러한 분할 사이의 경계를 없애고,
각 작업이 필요로 하는 만큼 기억 장치를 배분하여 동시에 여러 작업을 수행할 수 있도록 지원합니다.
단, 이러한 기억장치, 메모리의 할당은 시작 주소와 끝 주소가 연속적으로 존재하는 연속 할당만을 다룹니다.
가변분할(variable partition) 다중 프로그래밍에서는 프로그램이 아래와 같이 기억장치를 할당 받습니다.
그러나, 모든 기억 장치 구성 방법은 각각의 단점을 보완할 수 있다고 하더라도
결과적으로 어느 정도의 낭비는 피하기 어렵습니다.
고정 분할 다중 프로그래밍에서 알게 된, 여러 단점들을 보완했음에도,
시간이 지날수록 다양한 프로그램이 컴퓨터 시스템을 사용하게 되면서 필연적으로 기억 장치의
공간 낭비가 발생하게 되고, 프로그램에 따라 가변적인 사용이 가능하도록 했음에도 낭비가 발생하게 되었습니다.
1.5.1. 기억장소의 통합과 집약
가변 분할 다중 프로그래밍의 이러한 공간 낭비를 줄이기 위해서, 기억장소의 통합과 집약이라는 대안이 제시되었습니다.
이 방법은, 시간의 흐름에 따라 다양한 작업이 수행되고 난 후,
잉여분의 기억 장치를 인접한 분할끼리 합쳐서 큰 작업이 할당되어 사용할 수 있도록 하였습니다.
그리고 이러한 방법을 통합(coalescing)이라고 일컬으며, 아래와 같이 진행됩니다.
하지만, 잉여분의 인접한 분할을 합한다고 할 지라도, 다양한 원인으로 인해 그 분할이 서로 인접하게 위치하지 않았다면, 사용되지 않는 기억장치의 크기를 극대화하는 것에는 한계가 발생하게 됩니다.
따라서, 이러한 문제를 해결하기 위해 사용중인 작업을 연속적인 순서를 갖도록 한 쪽으로 합쳐서 커다란 여유 공간을 확보할 수 있습니다.
이와 같이 사용중인 작업을 연속적인 기억장치의 한 쪽으로 정렬하여,
하나의 커다란 여유 기억 공간을 마련하는 것을 기억장치 집약(compaction)이라고 하며,
다른 용어로는 Garbage Collection(=쓰레기 수집)이라고 부르기도 합니다.
이러한 집약(compaction) 작업은 아래와 같은 단점이 있습니다.
- 집약 수행 시, 다른 모든 작업이 멈추어야 한다.
- 실시간시스템에서는 원활한 서비스가 불가능할 수 있고, 대화형 시스템에서는 응답속도가 일정하지 않다는 문제를 발생시킬 수 있다.
- 사용중인 작업들에 대한 재배치 관련 정보를 잘 관리하여야 한다.
- 집약이 너무 자주 수행되면 시스템 전체의 속도 저하를 발생시킬 수 있다.
1.5.2 기억 장치 배치전략
기억장치 배치전략이란, 새로 들어오는 프로그램과 데이터를 주기억장치 내의 어디에 배치할 지 결정하는 전략입니다.
이번 챕터에서 다루게 될 내용은 기억장치를 어떻게 나누어 쓸 것인가에 대한 전략이 아닌,
나누어진 분할(Partition)이 있을 때, 수행할 작업 및 프로그램을 어디에 배치할 것인지 결정하는 방법에 대해 설명합니다.
기억 장치의 배치 전략은 아래와 같이 총 3가지가 존재합니다.
- 최초 적합 (first-fit)
- 최적 적합 (best-fit)
- 최악 적합 (worst-fit)
1) 최초 적합 (first-fit)
작업 대기열에 새로 추가된 프로그램과 데이터를
주 기억장치의 사용 가능한 공간 중에서 그 작업을 수용할 수 있는 첫번째 공간에 빠르게 배치하는 방법입니다.
이 전략은, 가장 빠른 배치 결정을 내릴 수 있다는 장점이 있습니다.
2) 최적 적합 (best-fit)
최적 적합(best-fit)은 주 기억장치의 사용 가능한 공간 중에서
가장 그 작업에 딱 맞는(= 여백이 적은) 공간에 할당함으로써 단편화(fragmentation) 현상을 최소로 줄이는 전략입니다.
3) 최악 적합 (worst-fit)
최악 적합(worst-fit)은 프로그램이나 데이터를 주 기억장치의 사용 가능한 공간 중에서
가장 큰 공간에(= 가장 여백을 많이 남기는) 먼저 배치하는 방법입니다.
이 전략은 직관적으로 해석하기에는 다소 비효율적인 방법이라고 간주되었지만,
큰 공간을 필요로 하는 작업이 남기고 간 공간을 다른 작은 크기를 필요로 하는 작업들이 사용하게 함으로써 시간의 흐름에 따른, 단편화 현상을 줄이고 공간 부족으로 인한 새로운 분할의 생성을 최소한으로 해주어 다른 큰 공간을 필요로 하는 프로그램이 빠르게 공간을 확보할 수 있도록 하다는 장점이 특징인 전략입니다.
즉, 단위 시간당 분할 공간에 대한 재활용 비율을 극대화할 수 있는 전략이라고 할 수 있습니다.
참고 자료
- 김완규, 고정국, 진광윤, 최신형, 하성권, 허덕행 | 핵심 운영 체제론 | 두양사
- https://ko.wikipedia.org/wiki/%EC%A3%BC%EA%B8%B0%EC%96%B5%EC%9E%A5%EC%B9%98
'CS BASIC > 운영체제(Operation System)' 카테고리의 다른 글
[운영체제] 디스크 스케줄링 (0) | 2024.04.01 |
---|---|
[운영체제] 선점 스케줄링(Preemptive)과 비선점 스케줄링(Nonpreemptive) 기법 (0) | 2024.02.05 |
[운영체제] CPU 스케줄링과 평가 기준 (1) | 2024.01.29 |
[운영체제] 프로세스와 상태 전이 (0) | 2024.01.22 |
[운영체제] 운영체제 일반 (1) | 2024.01.15 |