페이징 시스템(Paging System)
페이징 시스템은 운영체제가 메모리를 효율적으로 관리하기 위해 사용하는 메모리 관리 기법 중 하나이다.
프로그램을 고정된 크기의 작은 블록(페이지)으로 나누고, 물리 메모리를 동일한 크기의 블록(프레임)으로 분할하여, 프로세스의 페이지를 프레임에 매핑하는 방식으로 동작한다.
주요 특징
- 연속적인 메모리 요구 해결: 논리 메모리와 물리 메모리의 연속성을 보장할 필요가 없다.
- 내부 단편화 감소: 메모리가 고정된 크기의 프레임으로 나뉘기 때문에, 공간 낭비를 최소화할 수 있다.
- 동적 로드 지원: 필요한 페이지만 메모리에 적재하기 때문에 메모리 사용을 최적화할 수 있다.
페이징 시스템 구조
페이징 시스템의 주요 구성 요소와 데이터 흐름은 아래와 같다:
프로세스의 논리 주소 공간
- 논리 주소(가상 주소)는 페이지 번호(Page Number)와 페이지 오프셋(Page Offset)으로 구성된다.
예: 논리 주소 = (페이지 번호, 오프셋)
페이지 테이블(Page Table)
- 각 페이지가 물리 메모리의 어떤 프레임에 매핑되는지를 저장하는 데이터 구조이다.
- 페이지 테이블 항목에는 다음 정보가 포함될 수 있다:
- 프레임 번호(Frame Number): 페이지가 매핑된 물리 메모리 프레임 번호
- 상태 비트(Status Bit): 페이지의 존재 여부, 접근 권한 등
물리 메모리(Physical Memory)
- 물리적 메모리는 프레임으로 나뉘며, 프로세스의 페이지가 할당된다.
- 특정 페이지는 물리 메모리에 로드되어 있어야 CPU가 접근할 수 있다.
페이지 테이블(Page Table)
페이지 테이블은 페이징 시스템의 핵심 역할을 수행한다.
페이지 테이블의 크기는 프로세스의 논리 주소 공간 크기와 페이지 크기에 따라 결정된다.
페이지 테이블의 작동 방식
- CPU는 논리 주소를 생성하며, 해당 주소를 MMU로 전달한다.
- MMU는 논리 주소의 페이지 번호를 페이지 테이블에서 검색하여 물리적 프레임 번호를 찾는다.
- 페이지 테이블이 물리적 프레임 번호를 반환하면, 프레임 번호와 오프셋을 합쳐 물리 주소가 생성된다.
다중 레벨 페이지 테이블(Multilevel Page Talbe)
- 큰 논리 주소 공간에서 단일 페이지 테이블은 메모리를 많이 차지할 수 있다.
이를 해결하기 위해 페이지 테이블을 여러 계층으로 나눈다.
- 예: 이중 레벨 페이지 테이블은 상위 테이블과 하위 테이블로 나뉜다.
상위 테이블은 하위 테이블의 주소를 저장하고, 하위 테이블은 실제 프레임 번호를 저장한다.
페이징 시스템과 MMU
MMU(Memory Management Unit)는 CPU와 메모리 간의 주소 변환을 담당하는 하드웨어이다.
페이징 시스템에서 MMU는 논리 주소를 물리 주소로 변환하는 역할을 수행한다.
MMU와 페이징 시스템의 상호작용
- 논리 주소 분해: 논리 주소를 페이지 번호와 오프셋으로 분리
- 주소 변환: 페이지 번호를 기반으로 페이지 테이블을 조회하여 물리적 프레임 번호를 획득
- 물리 주소 생성: 물리적 프레임 번호와 오프셋을 결합하여 최종 물리 주소 생성
TLB(Translation Lookaside Buffer)
- 페이지 테이블 조회는 속도 저하를 유발할 수 있다. 이를 개선하기 위해 TLB라는 고속 캐시를 사용한다.
- 작동 원리: 최근에 참조된 페이지 테이블 항목을 저장하여 빠르게 주소 변환을 수행
페이징 시스템의 장단점
장점
- 효율적인 메모리 사용: 논리적 연속성이 요구되지 않음
- 프로세스 격리: 각 프로세스의 메모리 공간이 독립적임
- 멀티태스킹 지원: 필요한 페이지만 로드하여 빠른 컨텍스트 스위칭 가능
단점
- 주소 변환 오버헤드: 페이지 테이블 조회가 추가 연산을 요구
- 외부 단편화 해결 X: 내부 단편화는 감소하지만 외부 단편화는 해결하지 못함
- 메모리 낭비: 다중 레벨 페이지 테이블로 인해 추가 메모리 공간 필요
페이징 시스템은 CPU, MMU, 페이지 테이블, TLB가 상호작용하여 효율적인 메모리 관리를 가능하게 하는 구조이다. 이러한 구조는 오늘날의 운영체제에서 핵심적인 메모리 관리 기법으로 사용된다.