Hybrid Approach on Paging, Multi-level Page Tables, Page Fault vs. Segmentation Fault
Hybrid Approach: Segmented Paging
대두된 배경: 프로세스마다 페이지 테이블을 유지하면서 생기게 되는 메모리 오버헤드를 줄이기 위해서
고안 방안: 프로세스의 주소 공간을 Segment 단위로 분할하고, 각 Segment는 여러 개의 페이지로 분할해 가상 주소를 물리 주소로 변환하는 방식을 의미.
문제점
- Segment 단위로 분할하다 보니, 각 Segment의 크기가 다를 수 있음. 크기가 작은 Segment가 존재하면, 해당 Segment의 페이지 테이블은 비효율적일 수 있음. (External Fragmentation Issue)
Multi-level Page Tables
Page Table을 선형적으로 관리하는 것이 아닌, Tree 형태로 관리하면 어떨까 싶어 시작한 아이디어.
Concept: 페이지 테이블을 여러 단계로 나누어 계층 구조로 만든다. 프로세스마다 유지해야 하는 페이지 테이블의 크기를 줄일 수 있음
작동 과정:
1. 가상 주소에서 상위 N비트를 이용하여 최상위 레벨의 인덱스 결정. 이 인덱스는 물리 메모리에 저장된 두 번째 레벨 페이지 테이블을 가리키는 역할을 한다.
2. 두 번째 레벨 페이지 테이블에서 다음 N 비트를 이용하여 세 번째 레벨 페이지 테이블을 결정한다.
3. 이 과정을 반복하여 마지막 레벨 페이지 테이블까지 접근한다.
이 때, 각 레벨의 페이지 테이블은 물리 메모리의 연속된 공간에 저장되며, 페이지 크기와 페이지 테이블의 크기는 동일.
따라서, 가상 주소가 주어졌을 때, 이를 인덱스로 변환하여 페이지 테이블을 탐색하는 과정을 거치게 됩니다. 이러한 과정을 통해 Multi-level Page Table은 프로세스마다 페이지 테이블을 유지하는 Paging 기법의 공간적인 비효율성을 줄일 수 있습니다.
장점
- page table이 차지하는 공간 줄일 수 있음
- segment 방식에 비해 단순함; External Fragment를 줄일 수 있음
단점
- Paging 방식처럼 memory access가 증가함. 이론 상 3배지만 TLB로 인한 cache access로 시간적인 이득을 누릴 수 있다.
Page Fault vs. Segmentation Fault
따라서, Page Fault는 Multi-level Page Table에서 발생하는 오류로, 페이지 테이블과 직접적으로 연관되어 있습니다. 반면, Segmentation Fault는 다른 메모리 보호 기법에서 발생하는 오류로, 페이지 테이블과 직접적인 연관이 없습니다.
Page Fault
Page Fault는 페이지 테이블에 해당 페이지가 존재하지 않아 물리 메모리에서 해당 페이지를 찾아오는 과정에서 발생하는 오류입니다. Multi-level Page Table에서는 페이지 테이블이 여러 단계로 나뉘어 있으므로, 페이지 테이블의 각 단계를 탐색하는 과정에서 페이지 테이블 엔트리가 비어있거나 유효하지 않은 경우 Page Fault가 발생할 수 있습니다. 이 경우, 운영체제는 해당 페이지를 물리 메모리로 가져와 페이지 테이블을 갱신하고, 프로세스를 계속 실행합니다.
Segmentation Fault
반면, Segmentation Fault는 프로그램이 메모리의 유효하지 않은 영역에 접근하려고 할 때 발생하는 오류입니다. Segmented Paging과 같은 다른 메모리 보호 기법에서 발생하는 오류로, 페이지 테이블과는 직접적인 연관이 없습니다. 예를 들어, 프로그램이 할당받지 않은 메모리 영역에 쓰기 작업을 수행하려고 하거나, 할당받은 메모리 영역을 벗어나는 영역에 접근하려고 할 때 Segmentation Fault가 발생합니다.