본문 바로가기

Computer Science/OS(Operating System)

[OS] 페이지 부재(page fault)와 가상기억장치의 원리

1. 가상기억장치의 필요성

 

 가상기억장치가 있는 이유가 뭘까? 잠시 운영체제가 메모리를 어떻게 할당하는지 알아볼 필요가 있다. 운영체제는 여러 프로그램이 동시에 수행되는 시분할(time sharing) 환경에서 한정된 메모리 공간을 여러 프로그램이 조금씩 나누어 사용한다. 이 과정에서 운영체제는 모든 프로그램들에게 똑같은 메모리 크기를 할당하는 것보다는 몇몇 프로그램들에게 집중적으로 메모리를 할당하고 프로그램 수행 후 메모리를 회수하여 다른 프로그램들에게 할당하는 방식을 사용한다. 이유는 ①빠른 프로세스의 수행 ②프로그램마다 최소한 확보해야하는 메모리의 크기가 존재하기 때문이다.

 

 

 프로그램이 실행되기 전에 그 프로세스의 주소 공간 전체가 메모리에 올라와 있어야 하는 것은 아니다. 따라서, 운영체제는 CPU 에서 당장 실행해야할 부분만 메모리에 올려놓고 그렇지 않은 부분은 디스크의 스왑영역(swap area)에 내려놓았다가 다시 필요해지면 메모리에 올라가 있는 부분과 교체하는 방식을 사용한다.

 

바로 이 부분 때문에 프로그램 입장에서 물리적 메모리를 고려할 필요가 없다. 가상기억장치가 존재하는 이유이기도 하다. 마치 하나의 프로그램이 메모리를 모두 사용하는 것처럼 가정해 프로그램하는 것을 지원한다. 이렇게 되면 프로그램은 0번지부터 시작하는 자기 자신만의 메모리 주소 공간을 가정할 수 있는데 이러한 메모리 공간을 우리는 가상 메모리(virtual memory) 라고 부른다. 즉, 프로세스마다 0번지로 시작하는 주소 공간을 가지게 되고 일부는 물리 메모리에 나머지는 스왑영역에 존재하게 된다.

 

 

2. 요구 페이징(Demand paging)

 

 프로그램 실행시 프로세스를 구성하는 모든 페이지를 한꺼번에 메모리에 올리는 것이 아니라 당장 사용될 페이지만을 메모리에 올리는 방식을 말한다. 따라서 요구 페이징 기법에서는 특정 페이지에 대해 CPU 의 요청이 들어온 이후에 해당 페이지를 메모리에 적재한다.

 

요구 페이징을 사용하면

 

① 당장 필요한 페이지만 메모리에 적재하기 때문에 메모리 사용량이 감소한다.

 

② 프로세스 전체를 메모리에 올리는 데 들었던 입출력 오버헤드도 줄어든다.

 

③ 시스템이 더 많은 프로세스를 수용할 수 있게 해준다.

 

프로그램이 물리적 메모리 용량의 제약에서 벗어날 수 있게 해준다. 즉, 물리 메모리보다 더 큰 프로그램도 실행할 수 있다.

 

 

 

 

 

 

 

3. 페이지 부재 발생 순서

 

 CPU가 무효 페이지에 접근, 주소 변환을 담당하는 하드웨어인 MMU(Memory Management Unit)가 페이지 부재 트랩(page fault trap)을 발생시키게 된다. 그러면 CPU의 제어권이 커널 모드(kernal mode)로 전환되고, 운영 체제의 페이지 부재 처리 루틴(page fault handler)이 호출되어 다음과 같은 순서로 페이지 부재를 처리한다.

 

1. 운영 체제는 해당 페이지에 대한 접근이 적법한지 먼제 체크한다. 사용되지 않는 주소 영역에 접근하거나 해당 페이지에 대한 접근 권한 위반일 경우에는 해당 프로세스를 종료시킨다. (예를 들어 읽기 전용인 페이지에 대해 쓰기 접근을 하려는 시도)

 

2. 적법하다면 물리적 메모리에서 비어 있는 프레임을 할당받아 그 공간에 해당 페이지를 읽어온다. 비어 있는 프레임이 없다면 페이지 교체 알고리즘을 통해 물리적 메모리에 있는 프레임 하나를 스왑 영역으로 쫓아내 비어 있는 프레임을 만든 후 적재한다. 이와 같은 행위를 swap out 이라고 부른다.

 

 ++ 추가 설명

 디스크 스왑 영역에 있던 페이지를 물리 메모리에 적재하기 위해서는 시간이 많이 소요되므로, 해당 프로세스는  CPU 제어권을 뺏기고 현재까지 수행되던 CPU 레지스터 상태 및 프로그램 카운터 값을 프로세스 제어 플록(PCB)에 저장해 둔다. 다시 CPU 를 할당받았을 때 PCB 정보를 바탕으로 정확히 같은 상태에서 다음 명령을 수행한다.

 

 

3. 페이지 테이블에서 해당 페이지의 유호-무효 비트를 유효비트로 설정하고 프로세스를 준비큐로 이동시킨다.

다시 CPU를 할당 받았을 때 PCB에 있던 값을 복원시켜 중단되었던 명령을 수행한다.

 

 

반응형