운영체제

운영체제 8.1.3 페이징

공부승식 2021. 5. 20. 22:06
728x90

일반적으로 가상메모리는 페이징시스템과 연계되어 사용된다. 

단순 페이징의 경우 프로세스마다 고유의 페이지테이블이 설정된다. 이는 프로세스의 페이지들이 적재될 때 주기억장치에 설정되며, 각 페이지테이블 항목에는 해당 페이지가 적재된 페이지프레임의 번호가 저장된다. 

 

가상메모리의 경우에도 페이지테이블이 필요하며, 전형적으로 프로세스별 페이지테이블이 설정된다. 

페이지테이블에는 P(Present bit)와 M(Modified bit)을 가진다. 

P(present bit) : 해당 페이지가 메모리에 적재되어 있는가? 를 나타낸다. 만약 적재되어 있다면, 그 항목에는 해당 페이지가 저장된 페이지 프레임의 번호도 포함된다.

M(Modified bit) 해당 페이지가 메모리에 적재된 후 그 내용이 변경되었는가? 를 나타낸다. 변경되지 않았다면, 페이지가 교체될때 변경된 내용을 디스크에 새로 기록할 필요가 없다. 

 

페이지테이블 구조

메모리에서 한 워드를 읽을 때마다 페이지번호와 오프셋으로 구성된 가상주소가 물리주소로 변환된다. 페이지테이블은 메모리에 저장된다. 

하드웨어 구현 사례를 살펴보자.

프로세스가 수행되고 있을 때, 그 프로세스를 위한 페이지테이블의 시작 주소가 특정 레지스터에 저장된다. 

가상주소의 페이지번호를 테이블의 인덱스로 사용하여 페이지테이블 항목을 선정하게 되고, 그 항목으로부터 페이지가 적재된 프레임번호를 얻게된다.  

이 프레임 번호가 가상주소의 오프셋과 결합하여 물리주소를 구성한다. 일반적으로 페이지번호필드가 프레임번호필드보다 길다(n>m)

(훨씬 큰 메모리를 access할 수 있지만 보다작은 메모리를 가지고있어도 상관 없다)

 

대부분의 시스템에서는 프로세스당 하나의 페이지테이블이 설정되는데,

문제는 각 프로세스가 엄청나게 큰 가상메모리를 가질 수 있다. 예를들어 VAX의 경우 각 프로세스는 최고 2^31바이트 (2기가)크기의 가상메모리를 가질 수 있다. 만약 페이지 크기가 2^9(512)바이트 페이지를 사용한다고 가정할때, 프로세스당 2^22개의 항목을 가진 페이지테이블이 필요함을 의미한다. 

페이지테이블을 저장하기 위해 필요한 메모리의 양만 고려해도 수용할 수 없을만큼 크다. 

이 문제를 해결하기 위해, 대부분의 가상메모리기법은 페이지테이블을 가상메모리에 저장한다.

 

프로세스가 수행중일 때, 그 프로세스의 페이지테이블중 일부가 메모리에 있어야하는데, 거기에는 사용중인 페이지의 테이블항목이 포함된다. 

어떤 처리기는 페이지테이블이 너무 커서 2단계구조를 사용하는 경우도 있다. :페이지 디렉토리가 있어 디렉토리항목 각각이 페이지테이블을 가리키도록 함으로써, 페이지디렉토리가 X이고, 페이지테이블의 최대길이가 Y일때, 한 프로세스는 최대 X*Y페이지로 구성될 수 있다. 

전형적으로 한페이지테이블의 최대 크기는, 한페이지의 크기와 동일한크기로 제한된다. 

32비트 주소체계에 2단계기법을 생각해보자. 

4k(2^12)바이트크기의 페이지를 가정한다면, 2^20개의 페이지로 구성된 4기가바이트 크기의 가상주소공간이 설정된다. 

이들 페이지 각각이 4바이트 크기의 페이지테이블 항목에 의해 mapping된다면, 2^20개의 Page Table Entry(PTE)로 구성된 4^22바이트크기의 페이지테이블을 만들 수 있다. 2^10개의 페이지를 차지하는 이 거대한 페이지테이블은 2^10개의 PTE로 구성된 2^14(4K)바이트 크기의 루트 페이지테이블에 매핑되어 가상메모리상에 유지될 수 있다. 

 

이 방식을 위해 주소를 변환한다. 루트 페이지는 주기억장치에 상주한다. 

가상주소의 처음 10비트는 루트페이지에 대한 인덱스로 쓰여 사용자 페이지테이블이 저장된 페이지를 위한 PTE를 찾아준다. 만약 그 페이지가 주기억장치에 없다면 페이지폴트가 발생한다. 그 페이지가 주기억장치에 있다면, 가상주소의 그 다음 10비트는 사용자페이지테이블에 대한 인덱스로 쓰여 가상주소에 의해 참조될 실제 페이지를 위한 PTE를 찾게해준다.

 

 

역페이지테이블

 

지금까지 논의된 페이지테이블타입의 단점은 그 크기가 가상주소공간의 크기에 비례한다는 점이다. 이런 관점에서 다단계페이지테이블 사용에대한 대안적 접근은 역페이지테이블이다.

 

이 접근방법의 경우, 가상주소중 페이지번호 부분은 간단한 해시함수(unique한 key값)을 통해 특정 해시값(hash valuse)로 매핑된다. 

해시값은은 역페이지테이블에 대한 인덱스로 쓰이고, 역페이지테이블은 페이지테이블 항목들로 구성된다. 

페이지테이블항목이 실 기억장치의 페이지프레임당 하나씩 설정되기 때문에, 프로세스의 수나 지원되는 가상페이지수와 상관없이 주기억장치의 일정부분만이 테이블 저장에 쓰인다. 

하나 이상의 가상주소들이 동일한 해시테이블항목으로 매핑될 수 있다. (car, arc, acr)이 같은 주소이다. 

이 오버플로우를 관리하기위한 연결(chaining)기법이 사용되는데, 해싱기법은 전형적으로 한두개의 항목간에 짧은 체인을 만든다. 

왜 역페이지테이블인가? : 가상메모리의 페이지번호가 아니라, 프레임번호로 페이지테이블항목을 인덱싱하기 때문.