본문 바로가기

OS/운영체제론

[운영체제론] 가상메모리 2 (페이징) / 2021.12.07

* 참고 자료 : 운영체제론 한빛아카데미

 

가상메모리 1 :

 

https://cow-kite24.tistory.com/125

 

[운영체제론] 가상메모리 1 / 2021.12.07

* 참고 자료 : 운영체제론 한빛아카데미 메모리 관리 기술은 궁극적으로 제한된 메모리 공간과 경쟁해야 한다. 한 가지 해결책은 메인 메모리 용량을 늘리는 것이다. 그러나 일반적으로 비용이

cow-kite24.tistory.com

 

가상메모리 3 (세그먼테이션) :

 

https://cow-kite24.tistory.com/127

 

[운영체제론] 가상메모리 3 (세그먼테이션) / 2021.12.07

* 참고 자료 : 운영체제론 한빛아카데미 가상메모리 1 : https://cow-kite24.tistory.com/125 [운영체제론] 가상메모리 1 / 2021.12.07 * 참고 자료 : 운영체제론 한빛아카데미 메모리 관리 기술은 궁극적으로 제

cow-kite24.tistory.com

3. 페이징

2차 저장소의 페이지를 메인 메모리로 변환할 때, 해당 페이지를 페이지 프레임이라는 메인 메모리 블록에 놓는다. 페이지 프레임은 들어오는 페이지와 크기가 같다. 

페이징 시스템에서 가상 주소는 순서 쌍 (p,d)로 표현하며, 여기서 p는 참조하는 항목이 있는 가상 메모리의 페이지를 나타내고 d는 p안에서 참조하는 항목이 위치한 변위이다. 

 

순수 페이징 시스템의 가상 주소 형식

 

현재 참조하는 페이지가 메모리에 있으면 실행이 가능하다. 

 

- 페이지 프레임

같은 페이지 크기 (Ps)

크기 Ps의 정수 배인 물리 메모리 주소에서 시작

 

페이지 프레임으로 분할된 메인 메모리

 

- 순수 페이징 시스템에서 가상 메모리 주소와 물리 메모리 주소 맵핑

프로세스의 페이지 맵 테이블 (페이지 테이블)에 있는 페이지 p를 찾고, p에 대응하는 p'이 메모리에 있는지 판단한다. (p'은 물리 메모리 주소가 아닌 페이지 프레임 번호) 

-> p'이 있을 때 실제 메모리 주소 r

-> 주소에 n 비트를 사용하는 시스템에서 실제 주소 순서 쌍, r=(p', d)에서 d에 m비트를 사용하면, p'에 (n-m) 비트를 사용.

 

순수 페이징 시스템에서 가상 메모리 주소와 물리 메모리 주소의 맵핑

- 페이지 테이블 엔트리 구성 요소

페이지 레지던트 비트 r : 해당 페이지가 메인 메모리에 있는지를 나타내는 플랙 비트

r = 0 : 페이지가 메인 메모리에 없음

r = 1 : 페이지가 메인 메모리에 있음

 

다음 요소

r = 0 : 2차 저장소 주소 (s)

r = 1 : 페이지 프레임 번호 (p')

 

페이지 테이블 엔트리

 

1. 페이지 맵핑 메커니즘은 위의 그림에서 보는 것처럼 s와 p'을 PTE의 구별된셀에 저장해야 하는가?
답 : 아니다. 많은 시스템에서 PTE가 소비하는 메모리 용량을 줄이려고 페이지 프레임 번호나 2차 저장소 주소 중 하나의 저장하는 한 셀만 포함한다. 레지던트 비트가 on이면 PTE는 페이지 프레임 번호만 저장하고 2차 저장소 주소는 저장하지 않는다. 레지던트 비트가 off 면 PTE는 페이지 프레임 번호가 아닌 2차 저장소 주소를 저장한다.
2. 페이지와 페이지 프레임의 개념을 비교, 대조하라.
답 : 페이지와 페이지 프레임은 크기 면에서 동일하다. 한편, 페이지는 프로세스의 가상 메모리 공간의 고정 크기 블록을, 페이지 프레임은 메인 메모리의 고정 크기 블록을 가리킨다. 가상 메모리 페이지는 프로세서가 해당 내용을 참조하기 전에 메인 메모리에 있는 페이지 프레임에 로드되어야 한다.

 

- 페이지 폴트 

페이지 폴트는 프로세스가 메인 메모리에 없는 페이지를 참조할 때 발생한다. 이는 운영체제를 호출해 해당 페이지를 2차 저장소에서 메인 메모리로 로드하게 한다.

 

3-1) 직접 매핑을 사용한 페이징 주소 변환

프로세스는 가상 주소 v = (p,d)를 참조한다. 시스템은 참조된 가상 주소에 대응하는 메인 메모리 주소를 얻으려고 먼저 프로세스의 페이지 테이블 기준 주소 b를 참조 페이지 번호 p에 더한다. (즉, p는 페이지 테이블에 대한 인덱스 역할을 한다.) 덧셈 b+p의 결과는 페이지 p에 해당하는 PTE의 메인 메모리 주소가 된다. 이 PTE는 가상 페이지 P가 페이지 프레임 P'에 대응함을 보여준다. 이후 시스템은 p'을 변위 d와 연결해 실제 주소 r을 얻어낸다.

 

직접 매핑을 사용한 페이징 주소 변환

 

직접 매핑으로 페이지 주소를 변환하려면 어떤 유형의 특수 목적 하드웨어가 필요한가?
답 : 고속 프로세서 레지스터를 사용해 페이지 테이블의 기본 주소를 저장해야 한다.

 

직접 맵핑에서는 시스템에서 변환되고 있는 가상 주소와 페이지 테이블의 기준 주소를 각 프로세서가 보유하고 있는 고속 레지스터에 유지하는 것이 바람직하다. 그러나 시스템은 보통 직접 매핑되는 메인 메모리에 페이지 테이블 유지한다. 메모리 접근 시간은 명령어 실행에 가장 큰 부분을 차지하여 직접 매핑과 같이 레지스터에 둔다면 페이지 매핑을 위해 추가적인 메인 메모리 접근이 필요하여 직접 변환을 하면 실행속도가 절반으로 감소할 수 있다. 그렇다고 캐시에 전체 페이지 테이블을 유지하는 것은 비용 문제 등으로 비 효율적이다. 또한 위치 기반으로 페이지 테이블의 엔트리 순서는 가상 주소 순서와 일치해야 한다. 이 문제에 관한 해결책은 '직접/연관 맵핑을 사용한 페이징 주소 변환'에서 알아볼 수 있다.

 

3-2) 연관 맵핑을 사용한 페이징 주소 변환

 

연관 맵핑

- 페이지 테이블 전체에서 위치기반으로 주소를 찾기 보다는 내용 기반으로 주소를 찾는 연관 메모리에 놓는다.

- 이 연관 메모리는 메인 메모리보다 사이클 시간이 한 자리 수 정도 빠르다.

 

연관 맵핑에서 동적 주소 변환 과정

프로세스는 가상 주소 v=(p,d)를 참조한다. 페이지 p를 찾으려고 연관 메모리에 있는 모든 엔트리를 동시에 검색한다. 검색 결과, p에 대응하는 페이지 프레임 p'을 반환하고 p'과 d를 연결해 실제 주소 r을 생성한다.

 

순수 연관 맵핑을 사용한 페이징 주소 변환

 

1. 순수 연관 맵핑을 사용한 페이지 주소 변환을 사용하지 않는 이유는 무엇인가?
답 : 연관 메모리는 고가의 직접 맵핑 캐시 메모리보다도 훨씬 비싸다. 따라서 시스템에 모든 프로세스의 PTE를 저장할 만큼 충분한 연관 메모리를 갖추는 것은 실제로 아주 어려운 일이다.
2. 순수 연관 맵핑을 사용한 페이지 주소 변환에 특수 목적 하드웨어가 필요한가?
이 기술에는 연관 메모리가 필요하다. 그러나 페이지 테이블의 시작 위치를 저장하기 위한 페이지 테이블 시작점 레지스터는 필요 없다. 연관 메모리는 위치 기반이 아닌 내용 기반으로 주소를 찾기 때문이다.

 

3-3) 직접/연관 맵핑을 사용한 페이징 주소 변환

고속 캐시와 연관 메모리는 가상 주소 공간 전체에 해당하는 주소 맵핑 데이터를 보유하기에는 너무 비싸다. 따라서 절충안으로 변환 참조 버퍼 (TLB) 라는 연관 메모리를 사용한다. TLB는 프로세스의 전체 페이지 테이블 중 일부만 수용할 수 있는 메모리이다. TLB 맵에 유지하는 페이지 테이블 엔트리들은 대체로 가장 최근에 참조한 페이지들과 대응된다. 최근 참조한 페이지는 가까운 미래에 다시 참조할 가능성이 크다는 경험론에 근거했다.

 

동적 주소 변환 과정

- 프로세스가 가상주소 v=(p,d)를 참조하여 TLB로부터 p를 찾는다.

- 검색결과 TLB에 p가 있으면 TLB 적중이라고 하고 p에 대응하는 p'을 반환한다. 그리고 변위 d와 연결하여 실제 주소 r을 얻는다.

- TLB에 p가 없으면 TLB 실패라고 하고 직접 맵을 사용하여 실제주소를 얻는다.

 

연관/직접 조합 맵핑 페이징 주소 변환

 

좋은 성능을 얻으려면 프로세스의 PTE 대부분을 TLB에 저장해야 한다.
답 : 거짓. 프로세스의 PTE 중 작은 부분만 TLB에 저장해고 프로세스들은 흔히 90% 이상 성능을 낸다.

 

3-4) 다수준 페이지 테이블

직접 매핑에서는 모든 PTE가 맵에 리스트 되어야 하고, 페이지 번호가 순서대로 순차적으로 연속해서 저장이 되어야 했다. 이 과정은 상당한 메모리를 요구한다. 

직접 매핑에서의 메모리 사용 

 

다수준 페이지 테이블에서는 프로세스가 페이지 테이블 중 현재 활발하게 사용하는 부분은 메인 메모리 위치에 저장하고, 활발하게 사용하지 않으면 2차 저장소에 저장한다. 

 

계층적 페이지 테이블

계층적으로 구현하고, 각 계층은 하위 수준 테이블을 가리키는 포인터를 저장한다. 최하위 수준은 페이지-페이지 프레임 맵핑을 담고 있는 테이블로 구성된다.

 

다수준 페이지 주소 변환

 

위의 그림에서의 감소효과

- 페이지 디렉토리 p에 10비트, 페이지 테이블 t에 10비트, 변위에 12비트 사용.

- 프로세스가 1024 페이지 이상을 사용하지 않으면, 시스템은 페이지 디렉토리를 위해 1024개 엔트리와 1024개 페이지 테이블 엔트리만 사용할 수 있음

 

다수준 페이지 테이블에서 오버헤드

- 페이지 맵핑 메커니즘에 따른 다른 메모리 접근의 추가로 처음에는 추가적인 메모리 사이클로 직접 맵 테이블보다 나쁜 성능을 초래할 것으로 보였으나 참조의 지역성(편증된 패턴으로 메모리를 참조하는 경향)과 고속 TLB덕분에 오버헤드를 야기하지 않는다. -> 시스템이 좋은 성능을 내려면 TLB 실패 비율이 낮아야 한다.

 

1. 직접 맵 패이징 시스템 대신 다수준 페이징 시스템을 사용할 때 장단점을 기술하라.
답 : 다수준 페이징 시스템은 맵핑 정보를 유지할 때 직접 맵 페이징 시스템에 비해 훨씬 적은 메인 메모리 공간을 차지한다. 그러나 다수준 페이징 시스템은 프로세스가 맵핑 정보가 TLB에 있지 않은 페이지를 참조할 때마다 추가적인 메모리 접근이 필요하다. 이 경우 더 느리게 실행될 가능성이 있다.
2. 어떤 설계자가 페이지 크기를 늘리는 방법으로 직접 맵 페이지 테이블의 메모리 오버헤드를 줄이자고 제안한다고 할 때, 이 방법이 어떤 결과를 야기할지 평가하라.
답 : 가상 주소의 크기가 고정되어 있다고 가정할 때, 큰 페이지를 사용하는 직접 맵핑을 사용한 주소 변환 시에 시스템이 각 프로세스를 위해 저장해야 하는 엔트리 수가감소한다. 이러한 해결책은 또한 다수준 페이지 테이블과 비료해 메모리 접근 오버헤드를 줄여준다. 그러나 페이지 크기가 증가함에 따라 내부 단편화 가능성도 커진다. 내부 단편화에 기인한 메모리 낭비 규모가 작은 페이지들을 위한 엔트리 저장 때문에 발생하는 테이블 단편화보다 커질 수도 있다.