운영체제

[OS/운영체제] 페이징 (Paging) - (2)

4Legs 2020. 11. 13. 21:15

Protection in Paging

페이지를 사용하는 환경에서 메모리를 보호하는 것은 각 프레임마다 Protection bit을 두어 해결할 수 있다. 일반적으로 이 bit는 페이지 테이블에 같이 저장된다.

하나의 bit로 페이지가 읽기 전용인지, 그렇지 않은지를 정의할 수 있다. 모든 메모리 참조는 페이지 테이블을 통해 올바른 프레임 번호를 찾는 과정을 거치는데, 이 때 Protection bit로 해당 페이지가 읽기 전용 페이지인지 확인할 수 있다. (읽기 전용 페이지에 데이터를 쓰는 것은 하드웨어 Trap을 발생시킨다.)

Valid(v) or Invalid(i) bit in a page table

일반적으로 페이지 테이블에 Valid-Invalid bit을 추가한다.

만약 이 bit가 valid라면, 해당 페이지는 프로세스의 논리적 주소 공간에 존재하며, 유효한(valid, legal) 페이지임을 나타낸다. 만약 이 bit가 invalid라면 그 반대이다.

운영체제는 각 페이지마다 이 bit를 설정해 페이지에 대한 접근을 허용 또는 차단한다.

위 그림에서 프로그램이 사용하고 있는 0~5번 페이지에 대한 접근은 허용되지만(valid), 6, 7번 페이지에 대한 접근은 valid-invalid bit가 invalid이므로 제한된다. (유효하지 않은 페이지 접근)

 

Shared Pages

페이징 기법의 장점 중 하나는 코드를 공유할 수 있는 가능성이다. 이는 시분할 환경에서 특히 중요한 점이다.

40명의 사용자들이 동일 시스템 내에서 텍스트 편집기를 사용하는 경우를 생각해 보자. 편집기 프로그램은 150KB의 코드와 50KB의 데이터 공간을 가지므로, 40명의 사용자에 대해 8,000KB의 메모리가 필요하다. 

Sharing of code in a paging environment

하지만 만약 코드가 Reentrant code(=pure code)라면, 위 그림과 같이 공유될 수 있다. (그림에서 페이지의 크기는 50KB이다.) 그림에서 데이터를 제외한 ed1 ~ ed3은 프로세스 P1, P2, P3이 동일한 페이지를 통해 공유하는 것을 확인할 수 있다.

Reentrant code는 실행 중에 변하지 않는 코드를 의미한다. 따라서, 둘 이상의 프로세스가 동시에 같은 코드를 실행할 수 있다. 즉, 각 프로세스는 동일한 코드를 서로 다른 데이터로 실행하는 것이다.

이 경우 40명의 사용자들이 사용하는 메모리의 총량은 150KB + 50KB * 40 = 2150KB로 대폭 감소한다.

 

페이지 테이블 구조 (Structure of the Page Table)

Hierarchical Paging

대부분의 현대 컴퓨터는 2^32 ~ 2^64의 큰 논리적 주소를 지원한다. 이러한 환경에서, 페이지 테이블도 점점 거대해져왔다. 이에 페이지 테이블을 메인 메모리에 연속적으로 할당하는 것을 피하고자 페이지 테이블을 더 작은 부분으로 나누는 방법을 생각할 수 있다.

2 Level Page Table Scheme
주소 변환 과정

위 그림들은 페이지 테이블을 두 단계로 나눈 상태를 나타낸다. 페이지 번호를 관리하는 페이지를 만들어 관리하기 때문에, 페이지 번호는 두 부분으로 나뉘게 된다. p1은 페이지 테이블을 다시 테이블로 묶었을 때의 번호를 나타낸다. (p1번째 페이지 테이블에서 p2번째 페이지를 찾아 메인 메모리에 접근한다.) 이를 통해 더 많은 페이지 테이블을 적은 메모리로 관리할 수 있다.

위와 같이 level을 추가할 수도 있다.

 

Hashed Page Table

Hashed Page Table

32bit보다 큰 주소 공간을 다룰 때 사용되는 방법으로, 페이지 번호를 해싱을 통해 관리한다.

각 페이지 번호에 대해 해시 함수를 적용해, 해당 결과가 페이지에 해당하는 프레임 번호가 된다.

해시 충돌이 발생할 경우, 연결 리스트의 형태로 이어준다.

 

Inverted Page Table

Inverted Page Table

프로세스의 수가 많아진다면, 그만큼 페이지 테이블의 수도 많아져 너무 많은 공간을 차지한다는 문제점에서 출발한 방법이다.

테이블의 각 항목은 가상 주소와 실제 메모리에 저장된 페이지의 위치, 해당 페이지를 사용하는 프로세스에 대한 정보가 포함된다. 

공유되는 페이지에 대해 구현하기 어렵다는 단점이 존재한다.

 

※ 본 게시글은 『Operating System Concepts』 를 참고하여 작성되었습니다.