paging 페이징
물리 메모리를 고정 크기 frame으로, 논리 메모리를 동일 크기 page로 분할하여 프로세스의 물리 주소 공간을 비연속적으로 배치할 수 있게 하는 메모리 관리 기법. 현대 OS는 주로 4KB page를 사용한다.
페이징, 세그멘테이션, 그리고 요구 페이징의 원리
Paging은 물리 메모리를 고정 크기의 frame으로, 논리 메모리를 같은 크기의 page로 분할하여 프로세스의 물리 주소 공간이 연속적이지 않아도 되게 한다. 각 프로세스는 고유한 page table을 가지며, 가상 주소의 VPN(virtual page number)을 PFN(page frame number)으로 변환하고 offset을 그대로 이어붙여 물리 주소를 만든다.
Demand paging은 실제로 필요한 page만 메모리에 올리는 기법으로, 참조된 page가 메모리에 없으면 page fault가 발생하고 OS가 디스크에서 해당 page를 읽어 frame에 적재한 뒤 명령을 재시작한다. 이 메커니즘 덕분에 물리 메모리보다 큰 가상 주소 공간을 가진 프로세스도 실행할 수 있다.
Segmentation은 메모리를 코드·스택·힙 등 논리적 단위(segment)로 나누는 기법으로, 각 segment는 가변 크기이며 base/limit 쌍으로 관리된다. 두 기법을 결합한 segmentation with paging은 segment의 논리적 구조와 paging의 고정 크기 관리 편의성을 함께 활용하여 external fragmentation을 제거한다.
물리 메모리를 고정 크기 frame으로, 논리 메모리를 동일 크기 page로 분할하여 프로세스의 물리 주소 공간을 비연속적으로 배치할 수 있게 하는 메모리 관리 기법. 현대 OS는 주로 4KB page를 사용한다.
VPN을 PFN으로 변환하는 자료구조. OS가 관리하며 각 프로세스마다 별도로 존재한다. page table entry(PTE)가 가상 주소 공간의 page 하나씩에 대응한다.
각 page에 대한 메타데이터를 담는 항목. valid bit(V), reference bit(R), modify bit(M), protection bits, 그리고 PFN으로 구성된다.
가상 주소는 상위 비트의 VPN과 하위 비트의 offset으로 나뉜다. 4KB page이면 offset은 12비트이고, 32비트 가상 주소에서 VPN은 20비트가 된다.
물리 메모리를 page와 동일한 크기로 나눈 단위. page frame number(PFN)으로 식별하며, OS는 빈 frame 목록(free list)으로 할당을 관리한다.
CPU가 생성한 가상 주소를 물리 주소로 바꾸는 과정. page table에서 VPN으로 PFN을 찾고, PFN에 offset을 붙여 물리 주소를 완성한다. 매 메모리 참조마다 수행된다.
page table 조회 오버헤드(메모리 참조 2회)를 줄이기 위한 하드웨어 캐시. 최근 VPN→PFN 변환 결과를 저장하여 빠른 주소 변환을 지원한다.
실제로 접근할 때만 page를 메모리에 적재하는 기법. 프로세스 시작 시 모든 PTE의 valid bit가 false이며, 참조 시 page fault가 발생하면 그때 디스크에서 읽어온다.
CPU가 접근한 page의 valid bit가 invalid일 때 발생하는 예외(exception). OS의 page fault handler가 디스크에서 해당 page를 읽어 frame에 올리고 PTE를 갱신한 뒤 명령을 재시작한다.
PTE의 V 비트. valid이면 해당 page가 프로세스 가상 주소 공간에 존재하고 물리 메모리에 적재되어 있음을 의미한다. invalid이면 아직 적재되지 않았거나 디스크로 swap out된 상태이다.
메모리를 코드·스택·힙 같은 논리적 단위(segment)로 나누는 기법.
가상 주소는 <segment#::offset> 형식이며,
segment마다 base/limit 쌍이 있다.
각 segment의 base(시작 물리 주소)와 limit(크기)을 저장하는 테이블. segment# 를 인덱스로 사용한다. limit 초과 접근 시 protection fault가 발생한다.
가변 크기 segment를 메모리에 할당/해제하다 보면 전체 빈 공간은 충분하지만 연속된 공간이 부족해 할당이 실패하는 현상. paging은 고정 크기 frame을 사용하므로 external fragmentation이 없다.
segment를 논리 단위로 관리하되, 각 segment를 고정 크기 page로 다시 분할하는 하이브리드 기법. external fragmentation을 제거하면서도 segment의 논리적 보호·공유 특성을 유지한다. IA-32 아키텍처가 이를 지원한다.
Paging은 고정 크기 메모리 관리의 자연스러운 확장이다. 물리 메모리를 frame으로, 논리 메모리를 page로 동일한 크기로 분할한다. page(frame) 크기는 2의 거듭제곱이며(512B~8KB, 현대 OS는 주로 4KB) 디스크 블록 크기의 배수로 선택한다.
주소 변환 구조
<VPN :: offset><PFN :: offset> (offset 비트는 그대로 사용)Page table은 OS가 관리하며 프로세스마다 독립적으로 존재한다(100개 프로세스 = 100개 page table). 각 항목 PTE는 다음 필드로 구성된다.
| 필드 | 약어 | 설명 |
|---|---|---|
| valid bit | V | PTE가 유효한지 여부. 매 가상 주소 사용 시 검사된다. |
| reference bit | R | 해당 page에 읽기 또는 쓰기가 발생했을 때 설정된다. |
| modify bit (dirty bit) | M | 해당 page에 쓰기가 발생했을 때 설정된다. swap out 시 dirty이면 디스크에 기록해야 한다. |
| protection bits | Prot | read-only / read-write / execute-only 등 허용 연산을 제어한다. |
| page frame number | PFN | 매핑된 물리 frame 번호. |
valid / invalid bit 의미
Paging의 장단점
Demand paging은 OS가 주 메모리를 page 캐시로 사용하는 방식이다. page가 필요할 때만 디스크에서 읽어오므로 I/O와 메모리 사용을 줄이고 응답 시간을 단축한다.
Page fault 처리 단계 (page_fault_handler)
프로세스 시작과 cold fault
프로세스가 처음 시작할 때 모든 PTE의 valid bit는 false이다. 첫 번째로 실행되는 명령이 즉시 page fault(cold miss / cold page fault)를 발생시키며, 실제로 필요한(demanded) 코드·데이터 page만 순차적으로 메모리에 적재된다.
Segmentation은 메모리를 코드, 스택, 힙 등 논리적으로 관련된 단위로 분할한다. 사용자 관점에서 메모리는 다양한 크기의 segment 집합으로 보이며, 각 segment는 독립적으로 크기를 늘리거나 줄일 수 있다.
<segment# :: offset>하드웨어 지원 — segment table
장단점
| 항목 | Paging | Segmentation |
|---|---|---|
| 블록 크기 | 고정 (4KB~64KB) | 가변 |
| 선형 주소 공간 수 | 1개 | 여러 개 |
| 메모리 주소 형식 | page number + offset | segment + offset |
| 교체(replacement) 난이도 | 쉬움 (모두 같은 크기) | 어려움 (segment가 맞는 공간 탐색 필요) |
| 단편화 | internal fragmentation | external fragmentation |
| 디스크 I/O 효율 | 효율적 (page 크기에 최적화) | 비효율적 (크기 다양) |
| 프로그래머에게 투명? | Yes | No |
| 물리 메모리보다 큰 주소 공간? | Yes | Yes |
| 코드·데이터 별도 보호? | No | Yes |
| 가변 크기 테이블 수용? | No | Yes |
| 코드 공유 용이? | No | Yes |
| 발명 이유 | 큰 선형 주소 공간 | 논리적 독립 주소 공간 (공유·보호) |
두 기법의 하이브리드 접근법으로 IA-32(x86) 아키텍처가 대표적으로 지원한다.
다중 page 크기 지원
Q1 paging에서 가상 주소를 물리 주소로 변환하는 과정을 VPN, offset, PFN 개념을 사용하여 단계별로 서술하시오.
① CPU가 가상 주소를 생성한다. 가상 주소는 상위 비트의 VPN(virtual page number)과 하위 비트의 offset으로 나뉜다. (예: 32비트 가상 주소, 4KB page → VPN 20비트 + offset 12비트)
② VPN을 현재 프로세스의 page table에 대한 인덱스로 사용하여 해당 PTE를 읽는다.
③ PTE의 valid bit가 valid이면 PTE에서 PFN(page frame number)을 추출한다. invalid이면 page fault가 발생한다.
④ 물리 주소 = <PFN :: offset>.
PFN을 물리 주소의 상위 비트에, 원래 offset을 하위 비트에 그대로 붙여
최종 물리 주소를 완성한다.
Q2 page table entry(PTE)에 포함된 주요 필드를 나열하고, 각 필드의 역할을 설명하시오.
PTE는 일반적으로 다음 필드로 구성된다.
Q3 demand paging 환경에서 page fault가 발생했을 때 OS가 이를 처리하는 과정을 page_fault_handler의 단계별로 서술하시오.
① CPU가 가상 주소를 참조할 때 해당 PTE의 valid bit가 invalid이면 trap이 발생하여 OS의 page fault handler로 제어가 넘어간다.
② OS는 해당 주소가 프로세스의 유효한 가상 주소 공간 내에 있는지 검사한다. 범위를 벗어나면 프로세스를 종료(illegal access)한다.
③ invalid PTE에 저장된 swap file 위치 정보를 통해 디스크에서 해당 page의 위치를 파악한다.
④ 빈 frame을 확보한다. 빈 frame이 없으면 page replacement 알고리즘으로 희생(victim) page를 선택하고 evict한다 (dirty이면 swap file에 write back).
⑤ 디스크 swap file에서 해당 page를 확보한 frame으로 읽어온다(디스크 I/O).
⑥ page table의 PTE를 갱신하여 새 PFN을 기록하고 valid bit를 valid로 설정한다.
⑦ page fault를 일으킨 명령을 처음부터 재시작(restart)한다.
Q4 paging의 장점과 단점을 각각 서술하고, 단점에 대한 대표적인 해결책을 제시하시오.
장점
단점 및 해결책
Q5 segmentation의 개념과 하드웨어 지원 방식을 설명하고, paging과 비교하여 각각의 단편화 유형이 다른 이유를 서술하시오.
Segmentation은 메모리를 코드·스택·힙 같은 논리적
단위(segment)로 나누는 기법이다. 가상 주소는
<segment# :: offset> 형태이며, 각 segment는 독립적으로
크기를 조절할 수 있다.
하드웨어는 segment table로 지원한다. 각 항목에는 base(물리 시작 주소)와 limit(크기)이 있다. 주소 변환 시 offset이 limit보다 작은지 확인한 후 base + offset으로 물리 주소를 계산한다. limit 초과 접근 시 protection fault.
단편화 비교
Q6 demand paging이 실용적으로 동작할 수 있는 이유를 locality 개념을 중심으로 설명하고, "demand" paging이라는 이름의 의미를 서술하시오.
Demand paging이 실용적인 근본 이유는 locality이다.
locality 덕분에 한 번 메모리에 적재된 page는 이후 여러 번 재사용된다. 따라서 page fault는 비교적 드물게 발생하고, 전체 평균 메모리 접근 시간이 허용 가능한 수준으로 유지된다.
"demand" paging이라는 이름은 프로세스가 실제로 page를 요구(demand)할 때, 즉 처음 접근할 때만 메모리에 올린다는 의미이다. 프로세스 시작 시 모든 PTE의 valid bit가 false이므로 첫 명령 실행부터 cold fault가 발생하며, 실제로 필요한(demanded) page만 순차적으로 적재된다.
Q7 segmentation with paging의 개념과 필요성을 설명하고, 이 기법이 external fragmentation을 제거하는 이유를 서술하시오.
Segmentation with paging은 segmentation과 paging을 결합한 하이브리드 기법이다. IA-32(x86) 아키텍처가 대표적으로 지원한다.
동작 원리
external fragmentation 제거 이유
순수 segmentation에서는 가변 크기 segment를 물리 메모리에 배치할 때 크기가 들쭉날쭉해 external fragmentation이 생긴다. 하지만 segmentation with paging에서는 segment를 고정 크기 page로 분할하고, 물리 메모리는 항상 고정 크기 frame 단위로 할당한다. 따라서 빈 frame이 있는 한 항상 할당할 수 있고 외부 단편화가 발생하지 않는다.
Q8 paging과 segmentation의 차이점을 "프로그래머에게 투명한가", "코드·데이터 별도 보호가 가능한가", "단편화 유형" 측면에서 비교하고, 각 기법이 발명된 목적을 서술하시오.
프로그래머 투명성
코드·데이터 별도 보호
단편화 유형
발명 목적