[가상메모리] 페이지 테이블 - 주소 번역 / 페이지 적중 & 오류

Serye·2023년 5월 14일
1

운영체제

목록 보기
5/7
post-thumbnail

서론

현재 핀토스를 만드는 중이고 Project 3에서는 보조 페이지 테이블을 구현 중이다. 이전에 malloc을 구현할 때도 가상 메모리에 대해 공부를 했지만 이번 주차를 공부하면서 가상메모리와 물리 메모리가 어떻게 매핑되는지에 대해서는 몰랐다. 이번 주차는 해당 내용에 대한 이해 없이는 진행하기 어려울 것이라 생각하여 정리해본다. 그리고 헷갈리는 개념(여러 하드웨어와 자료구조 등)에 대해서도 정리하려 한다.


메모리 가상화 개념

🛰️ 가상 메모리(Virtual Memory)란?


가상메모리는 각 프로세스들이 메인 메모리 전체를 독점적으로 사용하고 있는 것 같은 환상을 제공하는 추상화이다. 즉, 실제로는 각 프로세스가 메인 메모리 전체를 사용하고 있지 않지만 사용하는 것처럼 속인다는 것이다. 프로세스 가상 주소 공간(가상 메모리 공간)은 위의 이미지와 같이 생겼다. 구성요소는 다음과 같다.

  1. 프로그램 코드와 데이터
    코드 영역은 프로그램의 명령어가 저장되고 데이터 영역은 전역 변수와 정적 변수가 저장되는 영역이다. 두 영역은 크기가 고정되어 있다.
  2. 힙(Heap)
    프로세스가 실행되면서 C 표준함수인 malloc이나 free를 호출하면서 런타임에 동적으로 그 크기가 늘었다 줄었다 한다.
  3. 공유 라이브러리
  4. 스택 stack
    지역 변수와 함수 호출 정보가 저장되는 영역으로 프로그램이 실행되는 동안에 동적으로 늘어났다 줄어들었다 한다. 함수를 호출할 때마다 스택이 커지며, 함수에서 리턴될 때는 줄어든다.
  5. 커널 가상 메모리

🗃️ 페이지 테이블(Page Table)이란?

CPU 가상 주소를 물리 주소로 (페이지에서 프레임으로) 변환하는 데 사용하는 데이터 구조이다. 가상 주소는 액세스 프로세스에서 실행되는 프로그램에서 사용하는 반면, 물리적 주소는 하드웨어, 더 구체적으로는 RAM(Random Access Memory) 하위 시스템에서 사용한다. 운영체제 소프트웨어와 MMU 내의 주소 번역 하드웨어, 가상페이지를 물리페이지로 매핑하는 물리 메모리에 저장된 자료구조의 조합이다.

* 페이지(page): 가상 메모리의 연속된 영역
* 프레임(frame): 물리적 메모리의 연속된 영역이다.


가상 주소 지정 방식 시스템

  1. CPU는 가상주소(VA)를 생성한다.
  2. CPU 칩 내의 MMU(Memory Management Unit)는 메인 메모리에 저장된 페이지 테이블을 사용해서 실행 중인 프로세스의 가상 주소(VA)를 물리 주소(PA)로 번역한다.
    * 페이지 테이블의 내용은 운영체제가 관리한다.
  3. 번역된 물리 주소(VA)를 통해 메인 메모리에서 해당 데이터를 읽거나 쓸 수 있으며, CPU에 전달된다.

주소 번역: 페이지 테이블을 이용하여 매핑하기

  • CPU 내에 있는 PTBR(x86, ARM 아키텍처의 TTBR: Translation Table Base Register)는 현재 페이지 테이블을 가리킨다.
  • n 비트 가상주소는 두 개의 컴포넌트(VPN과 VPO)를 가진다.
  • p바이트인 VPO와 PPO는 동일하다.
  1. VA의 VPN에 대응되는 페이지 테이블의 PTE(Page Table Entry)를 찾는다.
    * VPN은 페이지 테이블의 인덱스 역할을 한다.
  2. PTE의 유효 여부를 확인한다.
    * PTE가 유효하다는 것은 가상 주소에 해당하는 물리 주소 정보가 페이지 테이블에 제대로 매핑되어 있다는 것을 의미한다.
  3. 유효할 경우 해당 PPN과 VPO(PPO)를 이용해 PA를 계산한다.

페이지 적중


1. 프로세서는 가상 주소를 생성하고 MMU로 보낸다.
2. MMU는 PTE 주소를 생성하고 캐시/메인 메모리에 요청한다.
3. 캐시/메인 메모리는 요청받은 PTE를 MMU에 전달한다.
4. MMU는 페이지 테이블을 이용해 물리 주소를 구성하고 이것을 캐시/메인 메모리로 보낸다.
* 페이지 테이블은 PTBR에 위치한다. PTBR(Page Table Base Register)는 페이지 테이블의 위치를 가리키는 레지스터로 CPU에 위치한다.
5. 캐시/메인 메모리는 요청한 데이터 워드를 프로세서로 보낸다.

페이지 오류


1. 프로세서는 가상 주소를 생성하고 MMU로 보낸다.
2. MMU는 PTE 주소를 생성하고 캐시/메인 메모리에 요청한다.
3. 캐시/메인 메모리는 요청받은 PTE를 MMU에 전달한다.
4. PTE의 유효 비트가 0이므로 MMU는 예외를 발생시키고, CPU 내의 제어를 운영체제 커널의 페이지 오류 예외 핸들러로 이동시킨다.
5. 오류 핸들러는 물리 메모리 내의 희생자 페이지를 결정하고, 해당 페이지가 수정된 적이 있다면 디스크로 이동시킨다.
* 수정된 페이지는 희생자 페이지로 선정되기 전까지 메인 메모리에만 적재되어 있다.
6. 오류 핸들러는 새 페이지를 페이지 이동으로 캐시/메인 메모리에 들여오고, 메모리 내의 PTE를 갱신한다.
7. 오류 핸들러는 처음의 프로세스로 돌아가고 오류 인스트럭션은 재시작된다. CPU는 문제를 일으킨 가상 주소를 MMU로 다시 전송한다.

참고 자료

profile
🎤 📷 ❄️ 🌊

0개의 댓글