기억장치
주기억장치
- 프로그램을 수행하기 위해서는 주기억장치에 적재되어야 함
- 제한적인 용량
- 높은 가격
- 효율적인 사용을 위한 관리기법 필요
보조기억장치
- 주기억장치보다 값이 싸며 대량의 프로그램과 데이터를 처리할 수 있지만, 처리 속도가 느림
- 자기테이프 · 하드디스크 · 플로피디스크 · CD ROM · DVD ROM · 플래시 메모리
SSD
- Solid State Drive
- 하드디스크의 한계를 극복하기 위해 등장한 플래시가 들어가는 보조기억장치
- 반도체 메모리를 내장하고 있어 처리속도가 빠르고 소음이 없으며, 전력 소모량이 낮음
- 전원이 꺼지더라도 기록된 데이터가 보존되는 플래시 메모리 기반의 모델
기억장치 관리의 발전
실 기억장치 | 가상 기억장치 | ||||
단일 사용자 전용 시스템 |
실기억장치 다중 프로그래밍 |
가상 메모리 다중 프로그래밍 |
|||
상주모니터 | 고정분할 다중 프로그래밍 |
가변분할 다중 프로그래밍 |
순수 페이징 |
순수 세그멘테이션 |
세그먼트/ 페이징 |
절대 / 재배치가능 |
연속 적재 방법
- 초기 시스템에서 사용한 방식
- 실행 프로그램들을 주기억장치에 연속적으로 저장하는 방법
- 종류: 단일 사용자 기법, 고정 분할 기법, 동적 분할 기법
- 장점: 기억장치 할당을 관리하기 쉬움
- 단점: 주기억장치에 큰 공간이 생길 때까지 기다려야 다음 프로그램을 적재할 수 있음
분산 적재 방법
- 하나의 프로그램을 여러 개의 조각으로 나누어 주기억장치 내에 분산 배치하는 방식
- 프로그램을 페이지, 세그먼트라는 단위로 구성
- 실행에 필요한 부분만 주어진 공간에 적재하는 방법
- 장점: 주기억장치가 여러 개의 작은 부분으로 나누어져 기다리지 않고, 작은 프로그램들을 적재할 수 있어 다중 프로그램 구현이 가능
- 단점: 분산 기억장치 할당 관리가 어려움
주소 바인딩
- Address Binding
- 주소를 변수로 표현하는 논리적 주소가 실행되기 위해서 물리적 주소로 사상하는 것
- 논리적 주소: 중앙처리장치가 생성하는 주소
- 물리적 주소: 기억장치가 취급하는 주소
구분 | 특징 |
컴파일 시간 바인딩 (compile time) |
실행 시 위치가 바뀌면 다시 컴파일 해야 하는 주소 바인딩 |
적재 시간 바인딩 (load time) |
프로그램이 기억장치에 적재되는 시간에 적재기에 의해 이루어지는 주소 바인딩 |
실행 시간 바인딩 (execution time) |
프로세스가 실행되는 동안에 기억장치의 한 세그먼트에서 다른 세그먼트로 옮겨질 경우, 실행 시간에 이루어지는 주소 바인딩 |
가상 구조
- Virtual Address
- 논리적 주소 공간: 프로그램에 의해 생성된 모든 논리적 주소의 집합
- 물리적 주소 공간: 논리적 주소에 상응하는 모든 물리적 주소의 집합
- 기억장치관리기(MMU): 프로그램 실행 중 논리적 주소를 물리적 주소로 변환하는 사상(mapping)을 수행
재배치 레지스터를 이용한 주소 변환
- 재배치(relocation) 레지스터: 세그먼트의 시작 주소를 가짐
- 논리적 주소가 들어올 때마다 모든 주소에 재배치 레지스터가 가지고 있는 값을 더해서 물리적 주소를 만듦
- 물리적 주소 = 논리적 주소 + 재배치 레지스터의 값
- 사용자는 논리적 주소를 사용하고 보조기억장치는 논리적 주소를 물리적 주소로 바꿈
기억장치 관리 기법
반입(fetch) 기법
- 주기억장치에 적재할 다음 프로그램이나 데이터를 언제 가져올 것인가를 결정하는 기법
- 요구 반입 기법: 실행 프로그램에 의해 어떤 프로그램이나 데이터가 참조될 때 그것을 주기억장치로 옮기는 기법
- 예상 반입 기법: 앞으로 요구될 가능성이 큰 데이터 또는 프로그램을 예상하여 주기억장치로 미리 옮기는 기법
배치(placement) 기법
- 새로 인출된 데이터나 프로그램을 주기억장치의 어디에 위치시킬 것인가를 결정하는 기법
- 최초 적합(first-fit), 최적 적합(best-fit), 최악 적합(worst-fit)
교체(replacement) 기법
- 새로 들어온 프로그램이 들어갈 장소를 마련하기 위해서 어떤 프로그램 및 어떤 데이터를 제거할 것인가를 결정하는 기법
단일 사용자 연속 기억장치 할당
- 기억장치 구성
- 사용자 프로그램의 크기는 주기억장치의 용량보다 클 수 없으나, 오버레이 기법에 의해 주기억장치보다 더 큰 프로그램 실행 가능
- 오버레이: 프로그래머가 한정된 주기억장치를 확장하여 사용할 수 있는 방법을 제공하는 것 (초기단계 / 처리단계 / 출력단계)
- 단일 사용자 연속 기억장치 할당에서 기억장치의 보호
- 중앙처리장치 내에 하나의 경계 레지스터(boundary register)를 두어 사용자 프로그램이 기억장치 주소를 참조할 때마다 사용자가 운영체제를 파괴하지 않도록 확인하는 검사
- 경계 레지스터는 운영체제의 마지막 명령의 주소를 저장하고 있어 사용자가 운영체제에 들어가려고 하면 명령어의 실행은 중단되고 적절한 오류 메시지와 함께 작업을 끝냄
- 사용자는 슈퍼바이저 호출(SVC)을 하여 운영체제가 제공하는 서비스를 요청
장점
- 간단한 설계
- 이해하기 쉬움
단점
- 한 사용자만이 전체 시스템을 차지하여 기억장치와 주변장치의 낭비가 심함
- 입출력 수행 동안 중앙처리장치가 유휴(idle) 상태에 놓여 컴퓨터 자원 낭비를 초래
- 느린 입출력속도와 빈번한 입출력이 수행되는 프로그램일 경우 CPU의 유휴상태가 길어짐
고정 분할 기억장치 할당
- Fixed Partition Memory Allocation
- 주기억장치를 일정 수의 고정된 크기들로 분할하여 실행 중인 여러 프로세스에게 할당
분할
- 하나의 단일 작업이 적재될 수 있는 일정한 크기의 기억장치 영역
- 분할의 수에 의해 다중 프로그래밍의 정도가 결정됨
- 한 분할이 비어 있을 경우에만 새로운 작업 하나를 작업 큐에서 선택하여 빈 분할에 적재
다중 프로그래밍
- 여러 개의 작업이 동시에 컴퓨터의 주기억장치 내에 존재
- 여러 사용자들이 동시에 시스템의 자원을 사용하여 수행하도록 함
- 한 작업이 입출력을 요구할 때 CPU는 즉시 다른 작업으로 옮겨가서 다른 작업 수행
- 시스템 자원을 획득하기 위해 프로세스들은 경쟁해야 함
절대 번역 및 로딩
- 작업이 시스템에 들어 올 모든 작업들을 그들의 기억장치 요구량에 따라 분류
- 수행되어야 할 작업에 대해 적재되어야 할 분할이 미리 결정하여 할당된 분할에서만 작업을 수행
- 절대 어셈블러와 절대 컴파일러에 의해 번역
- 다른 분할이 비어있더라도 할당된 분할방식에 의해 기다리는 외부단편화가 생김
재배치 가능 번역 및 로딩
- 모든 작업을 하나의 작업 큐에 넣음
- 사전에 어떤 프로그램이 수행될 분할을 결정하지 않고, 그 프로그램이 수행될 시점에 충분한 크기의 분할을 선택하여 그곳에 적재하는 것
- 작업은 적합한 크기의 사용 가능한 분할이면 어느 분할이든 배치 가능
- 작업이 적재된 분할은 두 개의 경계 레지스터를 통해 하한과 상한을 나타냄
- 운영체제를 호출할 필요가 있는 사용자는 슈퍼바이저 호출 명령을 사용하여 수행
단편화
- 내부 단편화: 필요한 양보다 더 큰 메모리가 할당이 되어서 할당된 메모리 내부에 사용하는 메모리 공간 이외에 사용하지 않는 메모리 공간이 발생
- 외부 단편화: 어떤 분할이 사용되지 않고 이용 가능하지만 대기 중인 작업에게는 너무 작아서 사용할 수 없을 때 발생하는 현상 (기억장치 낭비)
가변 분할 기억장치 할당
- Variable Partition Memory Allocation
- 작업들이 필요로 하는 만큼의 기억 공간을 할당
- 고정 분할 기억장치 할당 기법에서의 단편화를 줄이기 위한 기법
- 초기 내부단편화 현상은 거의 발생하지 않으나, 작업이 끝난 후 발생
- 초기에 주기억장치의 사용자 공간 전체를 하나의 분할 영역으로 설정
- 프로세스들의 활동에 따라 분할 형태를 동적으로 변화시킴
- 분할 영역 내의 단편화 현상 발생하지 않음
- 프로세스들은 연속 공간을 할당 받음
- 관리 오버헤드 증가
배치 전략
최초 적합
- 주기억장치의 첫 번째 유용한 공백을 우선적으로 택하는 방법
- 첫 번째 공간이 클 경우 내부 단편화의 크기가 커져 활용률이 떨어짐
최적 적합
- Process가 들어갈 수 있는 partition 중 가장 작은 곳 선택
- 모든 partition을 점검하기 위해 탐색시간 요구됨
- 크기가 큰 partition을 유지할 수 있으며, 작은 partition이 많이 발생
최악 적합
- 요청 process가 들어갈 수 있는 partition 중 가장 크기가 큰 공간 선택
- 모든 partition을 찾을 탐색시간 필요
- 큰 크기의 partition 확보가 어려움
순차 최초 적합
- 최초 적합 전략과 유사
- 요청 process를 할당 후 마지막 탐색한 위치부터 탐색
- 메모리 영역의 사용 빈도 균등화
- 낮은 오버헤드
가변 분할 기억장치 통합
공간 통합
- Coalescing Holes
- 이미 있는 공백과 새로운 인접한 공백을 통합하여 하나의 공백으로 기록
- 빈 기억 장소 리스트에 새 공백공간으로 기록
- 공간의 크기 확보
- Process가 작업을 끝내고 나가는 시점에 process 수행
- 오버헤드가 적음
공간 압축
- Storage Compaction
- 현재 사용되고 있는 모든 기억 공간을 주기억장치의 한 쪽으로 모음
- 가변 분할 다중 프로그래밍에서 존재하는 여러 개의 작은 공백들을 하나의 기억 공간으로 통합
- 일반적으로 쓰레기 수집(Garbage Collection)이라고 부르기도 함
- 큰 공간이 필요할 때마다 수행
- 모든 process 작업 중지와 재배치로 높은 오버헤드 초래
기억장치 교체
- 기억장치를 차지한 작업은 입출력이나 인터럽트 등이 발생하여 더 이상 계속될 수 없을 때까지 짧은 시간 동안 사용한 후 필요에 따라 그 작업은 제거되고(swap out) 다시 다음 작업이 적재됨(swap in)
- 하나의 작업은 완료되기까지의 주기억장치와 보조기억장치를 반족하는 교체 과정을 여러 번 거침으로써 수행