가상기억장치
보조기억장치(하드디스크)의 일부를 주기억장치처럼 사용하는 것.
용량이 작은 주기억장치를 마치 큰 용량을 가진 것처럼 사용하는 기법이다.
- 프로그램을 여러 개의 작은 블록 단위로 나누어서 가상기억장치에 보관해 놓고, 프로그램 실행 시 요구되는 블록만 주기억장치에 불연속적으로 할당하여 처리한다.
- 주기억장치의 용량보다 큰 프로그램을 실행하기 위해 사용
- 주기억장치의 이용률과 다중 프로그래밍의 효율 높일 수 있다.
- 가상기억장치에 저장된 프로그램을 실행하려면 가상기억장치의 주소를 주기억장치의 주소로 바꾸는 주소 변환 작업이 필요
- 블록(보조기억장치와 주기억장치 간 전송되는 데이터의 최소 단위) 단위로 나누어 사용하므로 연속 할당 방식에서 발생할 수 있는 단편화 해결할 수 있다.
- 구현 방법에는 종류에 따라 페이징, 세그먼테이션 기법이 있다.
페이징
가상기억장치에 보관되어 있는 프로그램과 주기억장치의 영역을 동일한 크기로 나눈 후 나눠진 프로그램(페이지)을 동일하게 나눠진 주기억장치의 영역(페이지 프레임)에 적재시켜 실행하는 기법.
- 프로그램을 일정한 크기로 나눈 단위를
페이지
라고 한다. 페이지 크기로 일정하게 나눠진 주기억장치의 단위를 페이지 프레임
이라고 한다.
- 외부 단편화는 발생하지 않으나 내부 단편화는 발생할 수 있다.
- 주소 변환을 위해서 페이지의 위치 정보를 가지고 있는 페이지 맵 테이블이 필요하다.
- 페이지 맵 테이블 사용으로 비용이 증가되고 처리 속도가 감소한다.
세그먼테이션
가상기억장치에 보관되어 있는 프로그램을 다양한 크기의 논리적인 단위로 나눈 후 주기억장치에 적재시켜 실행시키는 기법
- 프로그램을 배열이나 함수 등과 같은 논리적인 크기로 나눈 단위를 세그먼트라 하며 각 세그먼트는 고유한 이름과 크기를 갖는다.
- 세그먼테이션 기법을 이용하는 궁극적인 이유는 기억공간을 절약하기 위해서이다.
- 주소 변환을 위해서 세그먼트가 존재하는 위치 정보를 가지고 있는 세그먼트 맵 테이블이 필요하다.
- 세그먼트가 주기억장치에 적재될 때 다른 세그먼트에게 할당된 영역을 침범할 수 없으며 이를 위해 기억장치 보호키가 필요하다.
- 내부 단편화는 발생하지 않으나 외부 단편화는 발생할 수 있다.
페이지 교체 알고리즘
페이지 부재
CPU가 액세스한 가상 페이지가 주기억장치에 없는 경우를 말한다. 페이지 부재가 발생하면 해당 페이지를 디스크에서 주기억장치로 가져와야 한다.
페이지 교체 알고리즘은 페이지 부재가 발생했을 때 가상기억장치의 필요한 페이지를 주기억장치에 적재해야 하는데 이때 주기억장치의 모든 페이지 프레임이 사용중이면 어떤 페이지 프레임을 선택하여 교체할 것인지를 결정하는 기법이다.
- OPT, FIFO, LRU, LFU, NUR, SCR등이 있다.
OPT(OPTimal replacement) : 최적교체
: OPT는 앞으로 가장 오랫동안 사용하지 않을 페이지를 교체
FIFO(First In First Out)
: 각 페이지가 주기억장치에 적재될 때마다 그때의 시간을 기억시켜 가장 먼저 들어와서 가장 오래 있었던 페이지를 교체
LRU(Least Recently Used)
: 최근에 가장 오랫동안 사용하지 않은 페이지를 교체
각 페이지마다 계수기나 스택을 두어 현 시점에서 가장 오랫동안 사용하지 않은 가장 오래 전에 사용된 페이지를 교체
LFU(Least Frequently Used)
: 사용 빈도가 가장 적은 페이지를 교체
NUR(Not Used Recently)
: 최근에 사용하지 않은 페이지를 교체
최근에 사용되지 않은 페이지는 향후에도 사용되지 않을 가능성이 높다는 것을 전제로 한다.
SCR(Second Chance Replacement)
: 가장 오랫동안 주기억장치에 있던 페이지 중 자주 사용되는 페이지의 교체를 방지하기 위한 것.
가상기억장치 기타 관리 사항
페이지 크기
페이징 기법을 사용하면 프로그램을 페이지 단위로 나누게 되는데 페이지의 크기에 따라 시스템에 미치는 영향이 다르다.
페이지 크기가 작을 경우
- 페이지 단편화가 감소되고, 한 개의 페이지를 주기억장치로 이동하는 시간이 줄어든다.
- 불필요한 내용이 주기억장치에 적재될 확률이 적으므로 효율적인 워킹 셋을 유지할 수 있다.
- locality에 더 일치할 수 있기 때문에 기억장치 효율이 높아진다.
- 페이지 정보를 갖는 페이지 맵 테이블의 크기가 커지고, 매핑 속도가 늦어진다.
- 디스크 접근 횟수가 많아져 전체적인 입출력 시간은 늘어난다.
페이지 크기가 클 경우
- 페이지 정보를 갖는 페이지 맵 테이블의 크기가 작아지고 매핑 속도가 빨라진다.
- 디스크 접근 횟수가 줄어들어 전체적인 입출력의 효율성이 증가된다.
- 페이지 단편화가 증가되고 한 개의 페이지를 주기억장치로 이동하는 시간이 늘어난다.
- 프로세스 수행에 불필요한 내용까지도 주기억장치에 적재될 수 있다.
Locality
프로세스가 실행되는 동안 주기억장치를 참조할 때 일부 페이지만 집중적으로 참조하는 성질이 있다는 이론.
- 스래싱을 방지하기 위한 워킹셋이론의 기반이 되었다.
- 프로세스가 집중적으로 사용하는 페이지를 알아내는 방법 중 하나. 가상기억장치 관리의 이론적인 근거가 된다.
- locality의 종류에는 시간 구역성, 공간 구역성이 있다.
- 시간 구역성 : 프로세스가 실행되면서 하나의 페이지를 일정 시간 동안 집중적으로 액세스 하는 현상. 한 번 참조한 페이지는 가까운 시간 내에 계속 참조할 가능성이 높음을 의미한다.
- 공간 구역성 : 프로세스 실행 시 일정 위치의 페이지를 집중적으로 액세스하는 현상. 어느 하나의 페이지를 참조하면 그 근처의 페이지를 계속 참조할 가능성이 높음을 의미.
워킹 셋
프로세스가 일정 시간 동안 자주 참조하는 페이지들의 집합.
자주 참조되는 워킹 셋을 주기억장치에 상주시킴으로써 페이지 부재 및 페이지 교체 현상이 줄어들어 프로세스의 기억장치 사용이 안정된다.
시간이 지남에 따라 자주 참조하는 페이지들의 집합이 변화하기 때문에 워킹 셋은 시간에 따라 변경된다.
페이지 부재 빈도 방식
페이지 부재는 프로세스 실행 시 참조할 페이지가 주기억장치에 없는 현상.
페이지 부재 빈도(PFF)는 페이지 부재가 일어나는 횟수를 의미한다.
- 페이지 부재 빈도 방식은 페이지 부재율에 따라 주기억장치에 있는 페이지 프레임의 수를 늘리거나 줄여 페이지 부재율을 적정 수준으로 유지하는 방식
- 운영체제는 프로세스 실행 초기에 임의의 페이지 프레임을 할당하고 페이지 부재율을 지속적으로 감시하고 있다가 부재율이 상한선을 넘어가면 좀 더 많은 페이지 프레임을 할당하고 부재율이 하한선을 넘어가면 페이지 프레임을 회수하는 방식을 사용한다.
프리페이징
처음의 과도한 페이지 부재를 방지하기 위해 필요할 것 같은 모든 페이지를 한꺼번에 페이지 프레임에 적재하는 기법.
기억장치에 들어온 페이지들 중에서 사용되지 않는 페이지가 많을 수도 있다.
스래싱
프로세스의 처리 시간 < 페이지 교체에 소요되는 시간.
- 다중 프로그래밍 시스템이나 가상기억장치를 사용하는 시스템에서 하나의 프로세스 수행 과정 중 자주 페이지 부재가 발생함으로써 나타나는 현상. 전체 시스템의 성능이 저하된다.
- 다중 프로그래밍의 정도가 높아짐에 따라 CPU의 이용률은 어느 특정 시점까지는 높아지지만, 다중 프로그래밍의 정도가 더욱 커지면 스래싱이 나타나고, CPU의 이용률은 급격히 갑소하게 된다.
스래싱 현상 방지 방법
- 다중 프로그래밍의 정도를 적정 수준으로 유지한다.
- 페이지 부재 빈도를 조절하여 사용한다.
- 워킹 셋을 유지한다.
- 부족한 자원을 증설하고, 일부 프로세스를 중단시킨다.
- CPU 성능에 대한 자료의 지속적 관리 및 분석으로 임계치를 예상하여 운영한다.