크래프톤정글/운영체제

[OSTEP] 가상화 CH18 페이징 - 개요

아람2 2024. 11. 5. 16:13
반응형

CH18 페이징 - 개요

운영체제가 공간 관리 문제를 해결할 때 두 가지 중 하나를 사용한다 

1) 가변 크기의 조각들로 분할 

공간을 다양한 크기의 청크로 분할할 때 공간 자체가 단편화 Fragmented 될 수 있고, 할당은 점점 어려워진다

( + 가상 메모리의 세그멘테이션 Segmentation 의 문제를 해결하기 위해 페이징이 나왔다 )

2) 동일 크기의 조각으로 분할하는 것 - 페이징 Paging  

가상 메모리를 페이지 Page 라는 고정 크기 단위로 나누어서,

물리 메모리도 페이지 프레임 Page Frame 이라고 불리는 고정 크기의 슬롯의 배열이라고 생각한다 

페이지 프레임 각각은 하나의 가상 메모리 페이지를 저장할 수 있다

핵심 질문 - 페이지를 사용하여 어떻게 메모리를 가상화할 수 있을까
세그멘테이션의 문제점을 해결하기 위해 페이지를 사용하여 어떻게 메모리를 가상화할 수 있는가? 기본적인 기법은 무엇인가? 공간과 시간 오버헤드를 최소로 하면서 그 기법을 잘 동작하게 만들기 위한 방법은 무엇인가?

18.1 간단한 예제 및 개요 

페이징은 이전 방식에 비해 많은 장점을 가지고 있다 

1) 유연성 

페이징을 사용하면 프로세스의 주소 공간 사용 방식과는 상관없이 효율적으로 주소 공간 개념을 지원할 수 있다 

2) 단순함 

운영체제가 물리 메모리에 주소 공간을 배치하고자 할 때, 비어 있는 페이지만 찾으면 된다 

모든 비어 있는 페이지에 대한 빈 공간 리스트를 유지하고, 리스트의 첫 몇 개의 페이지를 선택하면 된다 

주소 공간의 각 가상 페이지에 대한 물리 메모리 위치 기록을 위하여 운영체제는

프로세스마다 페이지 테이블 Page Table 자료 구조를 유지한다 

페이지 테이블의 주요 역할은 주소 공간의 가상 페이지 주소 변환 Address Translation 정보를 저장한다 

(각 페이지가 저장된 물리 메모리의 위치가 어디인지 알려준다)

그리고 페이지 테이블은 프로세스마다 존재하고, 역 페이지 테이블 Inverted Page Table 도 존재한다 

 

프로세스가 생성한 가상 주소의 변환을 위해 먼저 가상 주소를

가상 페이지 번호 Virtual Page Number, VPN 와 페이지 내의 오프셋, 2개의 구성 요소로 분할한다

그리고 VPN 을 PFN 으로 교체하여 가상 주소를 변환하고 물리 메모리에 탑재 명령어를 실행한다

* PFN, 물리 프레임 번호 Physical Frame Number 혹은 물리 페이지 번호 Physical Page Number 

(+ Virtual Page Number 는 페이지 테이블의 인덱스로 사용하여 가상 페이지가 어느 물리 프레임에 저장되어 있는지 찾는다)

오프셋 페이지 내에서 우리가 원하는 위치를 알려주기 때문에 변환되지 않는다 🐣 오프셋은 특정 기준점에 대한 상대적인 위치이다 🐣

(+ 페이지랑 프레임 크기가 같기 때문에 오프셋은 변환되지 않는다)

그렇기 때문에 최종적으로 계산된 물리 주소는 탑재할 데이터가 저장된 정확한 위치이다 

그래서 페이지 테이블은 어디에 저장되고, 내용은 무엇이며. 테이블의 크기는 얼마인가? 페이징은 시스템은 느리게 만들지 않는가?

18.2 페이지 테이블은 어디에 저장되는가?

페이지 테이블은 매우 커질 수 있기 때문에, 현재 실행 중인 프로세스의 페이지 테이블을 MMU 안에 유지하지 않고 대신 각 프로세스의 페이지 테이블을 메모리에 저장한다, 운영체제 메모리 자체의 많은 부분은 가상화될 수 있다, 또한 페이지 테이블은 운영체제 가상 메모리에 저장할 수 있으며 디스크에 스왑될 수 있다 (스왑은 나중에 알랴줌)

18.3 페이지 테이블에는 실제 무엇이 있는가 

페이지 테이블은 가상 주소를 물리 주소로 매핑 mapping 하는데 사용되는 자료 구조이고, 가장 간단한 형태는 선형 페이지 테이블 Linear Page Table 이다 

운영체제는 물리 프레임 번호 PFN 을 찾기 위해서 가상 페이지 번호 VPN 로 배열의 항목에 접근하고 그 항목의 페이지 테이블 항목 PTE 를 검색한다, PTE Page Table Entry 에서 몇 가지 주요한 비트는 아래와 같다

1) Valid bit - 할당되지 않은 주소 공간을 표현하고, 프로세스가 그런 메모리를 접근하려고 하면 운영체제에 트랩을 발생시킨다 (+ 0일 때 접근하려고 하면 Page Fault 가 난다, 물리 메모리에 올라와있지 않은 상태니까)

2) Protection bit - 페이지가 읽을 수 있는지, 쓸 수 있는지, 실행될 수 있는지 표시한다 (+ 비트 3개로 각각 표시)

3) Present bit - 이 페이지가 어디에 있는지 (물리 메모리에 있는지, 디스크에 있는지, Swap Out 되었는지) 가리킨다 

4) Dirty bit - 메모리에 반입된 후 페이지가 변경되었는지 여부를 나타낸다 (+ 수정되었으면 디스크에 갱신해야됨)

5) Reference bit ( or Accessed bit ) - 페이지가 접근되었는지를 추적하기 위해 사용된다 or 어떤 페이지가 인기가 있는지 결정한다 

18.4 페이징 - 너무 느림 

페이지 테이블의 크기가 증가하게 되면, 페이지 테이블로 인해 처리 속도가 저하될 수 있다 

이 작업이 매우매우 오래 걸린다고 한다 

 

18.5 메모리 트레이스 

어셈블리 단계에서는 매우매우 복잡하고 어려운 작업이다 

 

18.6 요약

페이징은 하드웨어적으로 메모리를 특정 단위를 분할하고

가상 주소 공간에 빈 부분이 많은 경우도 효율적으로 지원한다

 

페이지 테이블 접근으로 인한 시스템 성능 저하와 

페이지 테이블을 위한 메모리 공간 할당으로 인한 메모리 낭비의 가능성이 존재한다 

 

반응형