SW Engineering/OS Concept

29_메모리 페이징(2) (Paging)

SungWookKang 2015. 7. 16. 13:45
반응형

29_메모리 페이징(2) (Paging)

 

각 운영체제는 페이지 테이블을 저장하기 위한 고유의 방법을 가지고 있다. 디스패처가 어떤 프로세스를 시작 시킬 때 이 레지스터들을 다시 적재하면 페이지 테이블도 함께 사용 할 수 있게 된다.

 

페이지 테이블은 레지스터의 집합으로 구현되기도 한다. 메모리의 모든 액세스는 이 페이징 맵을 통해야 하므로 매핑의 효율은 매우 중요하다. 디스패처는 이들 레지스터를 채우며 운영체제가 이를 담당한다.

 

페이지 테이블에 레지스터를 사용하는 것은 페이지 테이블이 작은 경우 적합하다. 하지만 대부분의 컴퓨터들은 수백만 항목에 이를 만큼 매우 크다. 이러한 컴퓨터의 페이지 테이블을 구현하기 위해서 빠른 레지스터를 사용하는 것은 부적절하다.(레지스터 비용이 비싸기 때문이다.) 그래서 대부분의 컴퓨터는 페이지 테이블을 주 메모리에 저장하고 페이지 테이블 기준 레지스터(PTBR, Page-Table Base Register)로 하여금 페이지 테이블을 가리키도록 한다. 다른 페이지 테이블을 사용하려면 단지 이 레지스터만 변화시키면 되기 때문에 문맥 교환시간을 줄일 수 있다.

 

PTBR의 문제점은 메모리의 접근 시간이다. 원하는 주소에 접근하기 위해서는 페이지 테이블에 접근해야 하는데 요청한 번지에 접근하기 위해서는 [프레임 번호 + 페이지 변위를 통한 실제 주소 의 접근]으로 2번의 접근이 필요하기 때문이다. 이런 지연이 반복되면 너무 느리기 때문에 스와핑 방법이 유리 할 수도 있다.

 

PTBR의 메모리 속도 문제를 해결하기 위해 TLB(Translation Look-aside Buffer)이라 불리는 캐시가 사용된다. TLB는 매우 빠른 연관 메모리(associative memory)로 구성된다. TLB 내의 각 항목은 키(key)와 값(value)의 두 부분으로 구성 된다.

 

 

 

TLB는 비싸므로 페이지 테이블의 일부분 밖에 가지고 있을 수 없다. CPU에 의해 논리 주소가 생성되면 그 페이지 번호를 TLB에 제시한다. 사용하려는 페이지를 찾으면 그 프레임 번호를 알 수 있으며 메모리로 접근하는데 사용할 수 있다. 페이지 번호가 TLB에서 발견 되는 비율을 적중률(hit ratio)라 부른다. 90%의 적중률은 TLB에서 원하는 페이지 번호를 발견할 횟수가 90%라는 것을 의미한다.

 

일부 TLB는 각 항목에 ASID(address-space identifier)를 저장하기도 한다. ASID는 그 TLB 항목이 어느 프로세스에게 속한 것인지를 알려주며 그 프로세스의 정보를 보호하기 위해 사용된다.

 

페이지화된 환경에서 메모리 보호는 각 페이지에 붙어 있는 보호 비트(protection bit)에 의해 구현 된다. 이 비트들은 보통 페이지 테이블에 속해 있다. 메모리에 대한 모든 접근은 페이지 테이블을 거치므로 이때 주소의 매핑과 함께 쓰기가 허용되는지 검사도 할 수 있다. 위반 시 운영체제가 하드웨어로 트랩(메모리 보호 위반)을 걸어 준다.

 

페이지 테이블의 각 항목에는 유효(valid)/무효(invalid)라는 하나의 비트가 더 있다. 이 비트가 유효로 설정되면 관련된 페이지가 합법적인 페이지이며 무효로 설정되면 그 페이지는 프로세스의 논리 주소 공간에 속하지 않는다. 이 비트를 이용해 페이지의 접근을 제한 할 수 있다.

 

대부분의 프로세스들은 일정한 시각에 일정 부분의 주소 범위만 사용한다. 이런 경우 모든 페이지에 페이지 테이블 항목을 배정하는 것은 낭비이다. 일부 시스템은 페이지 테이블의 크기를 나타내기 위해 페이지 테이블 길이 레지스터(PTLR, Page Table Length Register)라는 레지스터를 제공 한다.

 

페이지는 공유를 쉽게 할 수 있다. 여러 프로세스들이 동시에 같은 코드를 수행 할 수 있으며 코드 부분을 공유하더라도 프로세스들은 레지스터의 복사 값과 프로세스가 저장소는 따로 가지고 있다. 물론 서로 프로세스의 자료는 다르다. 공유가 가능한 프로그램으로는 컴파일러, 시스템, 실시간 라이브러리, 데이터베이스시스템 등이 있다.

 

공유를 위해서는 반드시 코드 재진입이 가능해야 하며 공유 코드의 읽기 전용 특징만으로는 코드의 정확성을 보장할 수 없기 때문에 운영체제에서 이를 보호해 주어야 한다.

 

 

[참고자료]

Operating System Concepts / 홍릉과학출판사

 

반응형