< 기억장치 계층 >
■ 가상기억장치 (Virtual Memory)
: 보조기억장치인 하드디스크 일부를 주기억장치처럼 사용하는 기술
■ 가상 디스크 (Virtual Disk) -- 지금말고 과거에 사용!
: 주기억장치 일부를 보조기억장치인 하드디스크처럼 사용하는 기술
■ 인터리빙 (Interleaving)
: 효율적인 주기억장치 접근을 위하여 주기억장치를 독립된 기억장치 모듈로 나누어 동시에 주기억장치 모듈에 접근할 수 있도록 하는 방법
: 메모리 이너리빙은 단위시간에 여러 메모리에 동시 접근이 가능하도록 하여 메모리의 대역폭(속도)를 높이기 위한 구조이다.
즉, 주기억장치의 엑세스 속도를 빠르게 한다.
■ 사이클 스틸링(Cycle Stealing)
: CPU가 입출력 전용 프로세서인 채널에게 주기억장치의 접근을 양보하여 입출력의 효율을 높이기 위한 방법
CPU는 보조기억장치에 직접 접근할 수 없기 때문에 운영체제는 보조기억장치에 저장된 프로그램을 주기억장치에 적재하여 CPU가 실행할 수 있도록 한다.
☞ 주기억장치의 크기는 제한되어 있으므로 운영체제는 하나 or 여러 개의 프로그램을 어떻게 주기억장치에 적재할 것인가?
☞ 단일 프로그래밍 시절, 하나의 프로그램만 적재하기 때문에 특별한 기술 필요하지 않았음
☞ 프로그램이 주기억장치보다 큰 경우 주기억장치 크기만큼 프로그램 파일을 분할하여 순차적으로 적재해 실행하는 방법 = "오버레이"
☞ 운영체제 입장에서 CPU가 하나의 프로그램을 실행하는 것은 CPU 이용률이 너무 낮아 동시에 여러 개의 프로그램을 적재하여 CPU 이용률을 극대화하기 원함
∴ 운영체제는 주기억장치를 분할하여 여러 개의 프로그램을 적재하였고, 주기억장치보다 큰 프로그램을 실행하기 위해 보조기억장치를 주기억장치처럼 사용하는 가상기억장치 기술을 개발하여 현재까지 사용 중
▶고정분할 (정적분할) 할당 기법
주기억장치의 크기를 다르게 분할하되 항상 고정된 크기를 갖는 형태로 분할하는 방식
※ 같은 크기로 분할하는 것 아님!!
분할된 영역이 고정되어 있어 프로그램이 적재되고 남는 공간 발생 => 내부 단편화 (Internal Fragmentation)
프로그램이 주어진 분할 안에 다 들어갈 수 없는 경우 발생 => 외부 단편화 (External Fragmentation)
내부, 외부 단편화 모두 존재
단편화가 많아 효율적이지 못함
분할된 최대 영역보다 더 큰 프로그램은 적재 불가능
▶가변분할 (동적분할) 할당 기법
프로그램의 크기에 따라 주기억장치 분할 크기를 동적으로 분할하는 방식
미리 크기를 결정하지 않고 실행할 프로세스의 크기에 맞게 기억 장소 분할
외부 단편화만 존재
기억장소 활용율이 높아짐
고정 분할 방식에 비해 실행될 프로세스 크기에 대한 제약 완화
주기억장치의 크기를 넘지 않는 범위에서 큰 프로그램 적재 가능
: 주기억장치는 물리적으로 연속적인 공간
: 주기억장치의 분할 영역, 프로그램 적재 위치, 프로그램 시작 위치 등을 CPU 내 레지스터가 기억하고 있다!
■ 경계 레지스터 (Boundary Register)
사용자 영역에 존재하는 프로그램이 운영체제 영역을 침범하지 못하도로 한다
■ 차폐 레지스터 (Fence Register)
분할된 영역을 다른 프로그램이 사용하지 못하도록 분할 영역의 위치(주소)를 기억한다
■ 베이스 레지스터 = 기준 레지스터 (Base Register)
주기억장치에 적재된 프로그램의 시작 위치를 기억한다
■ 재배치 레지스터 (Relocation Register)
프로그램이 한 영역에서 다른 영역으로 옮겨지더라도 명령의 주소 부분을 바꾸지 않고 정상적으로 실행될 수 있도록 한다