가상 메모리 요구 페이징(Demand Paging)

By 01/11/2018OS Concept

가상 메모리 요구 페이징(Demand Paging)

 

요구 페이징은 필요한 프로그램만 메모리에 적재하는 방법으로 가상 메모리 시스템에서 많이 사용된다. 요구 페이징을 사용하는 가상메모리에서는 페이지들이 실행 과정에서 실제로 필요해질 때 적재 된다.

 

요구 페이징은 일부 스와핑 기법과 유사하다. 프로세스를 실행하고 싶으면 메모리로 읽어 들이며 이때 전체 프로세스를 읽어오지 않고 lazy swapper를 사용한다. lazy swapper는 그 페이지가 필요하지 않는 한 메모리에 적재 되지 않는다.

 

스와퍼는 전체 프로세스를 관리하는 반면 페이저(pager)는 프로세스 내의 개별 페이지들을 관리한다. 요구 페이징과 관련해서는 스와퍼 보다 페이저가 더욱 가깝다.

 

스왑인(swap in)시에 페이저는 프로세스가 다시 스왑아웃(swap out)되기 전에 실제로 사용 될 페이지들이 어떤 것인지 추측한다. 페이저는 프로세스 전체를 스왑인하는 대신에 실제 필요한 페이지들만 메모리로 읽어온다. 사용되지 않을 페이지를 메모리로 가져오지 않음으로써 시간 낭비와 메모리 공간 낭비를 줄일 수 있다.

 

페이저는 어느 페이지가 디스크에만 있고 어느 페이지가 메모리에 올라와 있는지 구별할 수 있어야 한다. 이때 유효/무효(valid-invalid)비트 기법을 사용하여 비트가 유효하면 메모리에 있는 것을 의미하고 유효하지 않으면 메모리에 없거나(디스크에 있거나) 해당 페이지가 유효하지 않다는 것이다.

 

프로세스가 메모리에 없는 페이지를 접근하려 할 때 페이지 부재 트랩(page-fault-trap)을 발생 시킨다. 페이징 하드웨어는 페이지 테이블을 이용한 주소 변환 과정에 무효 비트를 발견하고 운영체제에 트랩을 건다.

 

[페이지 부재를 처리하는 과정]

  1. 프로세스에 대한 내부 테이블(internal table)을 검사해서 그 메모리 참조가 유효/무효인지를 알아 낸다.
  2. 무효한 페이지에 대한 참조라면 프로세스는 중단 된다. 유효한 참조인 경우 메모리에 없으면 디스크로 부터 가져와야 한다.
  3. 빈 공간, 자유 프레임(free frame)을 찾는다.
  4. 디스크에 새로이 할당된 프레임으로 해당 페이지를 읽어 들이도록 요청
  5. 디스크 읽기가 끝나면 이 페이지가 메모리에 있다는 것을 알리기 위해 페이지 테이블을 갱신하며 프로세스가 유지하고 있는 내부 테이블을 수정 한다.
  6. 트랩에 의해 중단되었던 명령을 다시 수행하며 프로세스는 그 페이지가 항상 메모리에 있었던 것처럼 간주하여 해당 페이지를 접근 할 수 있다.

 

페이지가 적재 되고 나면 프로세스는 수행을 계속 하는데 프로세스가 사용하는 모든 페이지가 메모리에 올라올 때까지 필요할 때마다 페이지 부재가 발생 한다. 일단 필요한 모든 페이지가 적재되고 나면 더 이상 부재 오류가 발생하지 않는데 이것이 순수 요구 페이징(pure demand paging)이다.

 

모든 프로그램은 참조의 지역성(locality of reference)이라는 성질이 있어서 프로그램의 어느 한 특정 작은 부분만 한 동안 집중적으로 참조하는데 이렇나 성질 때문에 요구 페이징은 만족할 만한 성능을 보인다.

 

요구 페이징의 필수적인 요구 사항은 페이지 부재 오류 처리 후에 명령 처리를 다시 시작할 수 있어야 한다. 만약 페이지 부재가 명령 인출(instruction fetch)시에 발생 했다면 명령을 메모리로 읽어 온 후 다시 수행을 시도하면 된다.

 

요구 페이징은 컴퓨터 시스템의 성능에 중요한 영향을 미친다. 페이지 부재가 발생하지 않는 한 실질 접근 시간은 메모리 접근시간과 같다. 그러나 페이지 부재가 발생하면 디스크로부터 관련되는 페이지를 읽어 온 뒤 필요한 워드를 접근해야 한다.

 

요구 페이징의 또 다른 특성은 스왑 공간의 관리이다. 스왑 공간에서의 디스크 입/출력은 일반적으로 파일 시스템에서의 입/출력보다 빠른데 그 이유는 스왑 공간은 파일 시스템보다 더 큰 블록을 사용하기 때문이고 또 스왑 공간과 입/출력을 할 때는 파일 찾기(lookup)나 간접 할당 방법 등은 사용하지 않기 때문이다.

 

시스템은 한 프로세스를 시작시킬 때 그 파일 이미지(file image)를 스왑 공간으로 복사한 후 스왑 공간으로부터 요구 페이징을 처리함으로써 보다 나은 페이징 처리율(paging throughput)을 얻을 수 있다. 또 다른 가능한 방법은 프로그램을 처음 시작시킬 때에는 파일 시스템으로부터 요구 페이징을 처리하지만 그 페이지들이 교체될 때는 스왑 공간에 페이지를 기록하는 것이다. 이 방식은 파일 시스템으로부터는 꼭 필요한 페이지들만 읽어오면서 그 페이지를 다시 읽어올 때에는 스왑 공간에서 읽어온다는 것을 보장한다.

 

어떤 시스템들은 이진 파일을 스왑 공간에 넣지 않음으로써 스왑 공간의 크기를 줄이기도 한다. 실행 파일로부터 요구 페이지를 요청하면 파일 시스템으로부터 그 페이지를 직접 가져 온다. 페이지들의 교체가 필요하면 이들 페이지에 새 페이지의 내용을 그대로 덮어 쓸(over write)수 있다.

 

이러한 방식은 파일 시스템이 보조 저장 장치로 사용되며 이러한 시스템에서도 힙이나 스택처럼 원래 파일과 관계 없었던 페이지들이 존재하기 때문에 스왑 공간은 여전히 필요하다.

 

[참고자료]

Operating System Concepts / 홍릉과학출판사

 

operationsystem, 운영체제, 운영체제구조, 컴퓨터구조, OSConcept, 가상메모리, 힙, 스택, virtualmemory, 요구페이징, sqlmvp, SQL Angeles

 

Leave a Reply