MMU와 SMMU, 메모리 페이지 관리에 대해서
MMU와 SMMU: 가상 메모리와 안전한 I/O의 세계
현대 컴퓨팅 환경에서 메모리 관리 장치(MMU, Memory Management Unit)와 시스템 메모리 관리 장치(SMMU, System Memory Management Unit)는 마치 건물의 경비원이나 관리인처럼, 시스템의 핵심 자원인 메모리를 효율적이고 안전하게 관리하는 중요한 역할을 수행합니다. 프로그램이 실행되고, 다양한 하드웨어 장치들이 데이터를 주고받는 복잡한 과정 속에서 이들이 어떻게 작동하는지 함께 알아보겠습니다.
MMU: 프로그램에게 '나만의 공간'을, 시스템에 '안전'을
1. MMU란 무엇이며 왜 필요할까요?
MMU는 CPU 내부에 탑재되어, 가상 주소(Virtual Address, VA)를 물리 주소(Physical Address, PA)로 변환해주는 하드웨어 장치입니다. 프로그램은 실제 물리 메모리(RAM)의 크기나 구조를 알 필요 없이, 자신이 사용할 수 있는 가상 메모리 공간을 할당받아 작동합니다. MMU는 프로그램이 요청하는 가상 주소를 실제 RAM의 어느 위치에 해당하는 물리 주소로 바꿔주는 '번역가' 역할을 하는 것이죠.
이러한 가상 메모리 시스템이 필요한 주된 이유는 다음과 같습니다.
- 다중 프로그래밍/멀티태스킹: 여러 프로그램이 동시에 실행될 때, 각 프로그램은 자신만의 독립적인 메모리 공간을 가진 것처럼 보이게 하여 서로 간섭하지 않도록 합니다.
- 메모리 보호: 악의적인 프로그램이나 오류가 발생한 프로그램이 다른 프로그램의 메모리 영역이나 운영체제의 중요 데이터를 침범하는 것을 막아 시스템 전체의 안정성을 높입니다.
- 메모리 효율성: 실제 물리 메모리보다 더 큰 가상 메모리 공간을 제공하여, 프로그램이 더 많은 데이터를 다룰 수 있게 합니다. 사용되지 않는 데이터는 디스크(스왑 영역)로 옮겨 물리 메모리를 확보하기도 합니다.
2. MMU의 등장 배경
초기 컴퓨터 시스템에서는 프로그램이 메모리를 직접 접근했습니다. 하지만 여러 프로그램을 동시에 실행해야 하는 필요성이 대두되면서, 각 프로그램이 사용하는 메모리 영역을 분리하고 보호할 방법이 필요해졌습니다. 1960년대 후반부터 시분할 시스템(Time-Sharing System)이 발전하면서 가상 메모리 개념이 등장했고, 이를 하드웨어적으로 지원하기 위해 MMU가 필요하게 되었습니다.
가상 주소(VA)를 물리 주소(PA)로, 페이지 테이블의 마법
프로그램이 접근하는 가상 주소는 CPU 내부의 MMU를 거쳐 실제 메모리 상의 물리 주소로 변환됩니다. 이 변환 과정의 핵심은 바로 페이지 테이블(Page Table)입니다.
1. 주소 변환의 원리
- 가상 주소 (VA): 프로그램이 사용하는 주소입니다. 보통 32비트 또는 64비트의 큰 공간을 가집니다.
- 물리 주소 (PA): 실제 RAM 칩에 있는 주소입니다. MMU를 거쳐 최종적으로 하드웨어가 접근하는 주소입니다.
MMU는 다음과 같은 단계를 거쳐 VA를 PA로 변환합니다.
- CPU가 특정 가상 주소(VA)에 접근하려 합니다.
- MMU는 이 VA를 분석하여 페이지 번호(Page Number)와 페이지 오프셋(Page Offset)으로 나눕니다.
- MMU는 이 페이지 번호를 사용하여 페이지 테이블에서 해당 가상 페이지가 어떤 물리 프레임(Physical Frame, RAM의 고정된 크기 블록)에 매핑되어 있는지 찾습니다.
- 페이지 테이블에서 해당 매핑 정보를 찾으면, MMU는 물리 주소(PA)를 구성합니다. 이는 찾은 물리 프레임 번호에 원래 VA의 페이지 오프셋을 더해 만들어집니다.
- MMU는 이 PA를 사용하여 실제 RAM에 접근합니다.
2. 페이지 테이블 레벨 (Multi-Level Page Tables)
현대의 운영체제는 메모리 효율성을 높이기 위해 다단계 페이지 테이블(Multi-Level Page Tables) 구조를 사용합니다. 마치 큰 책의 목차를 여러 번 나누어 찾아가는 것과 같습니다.
- 개요: 만약 64비트 주소를 사용하는데 모든 가능한 가상 주소에 대한 페이지 테이블 항목을 메모리에 직접 저장한다면 그 크기가 엄청나게 커질 것입니다. 따라서 메모리 공간을 절약하기 위해 페이지 테이블을 계층적으로 구성합니다.
- 작동 방식: 하나의 큰 가상 주소는 여러 부분으로 쪼개집니다. 각 부분은 상위 레벨 페이지 테이블에서 다음 레벨 페이지 테이블의 위치를 가리키는 데 사용됩니다. 최종적으로 가장 하위 레벨 페이지 테이블에서 실제 물리 프레임 번호를 얻게 됩니다.
예시: 64비트 주소 공간에서, 가상 주소는 다음과 같이 나뉠 수 있습니다.
[ 9비트 | 9비트 | 9비트 | 9비트 | 12비트 (오프셋) ] (총 45비트 사용 예시) |-------|-------|-------|-------|-----------| Page Map Level 4 (PML4) Index Page Directory Pointer Table (PDPT) Index Page Directory (PD) Index Page Table (PT) Index Page Offset
* CPU는 64비트 VA를 받으면, 이를 여러 비트 그룹으로 분할합니다.
* 먼저 PML4 엔트리를 사용하여 PDPT의 위치를 찾습니다.
* PDPT 엔트리를 사용하여 PD의 위치를 찾습니다.
* PD 엔트리를 사용하여 PT의 위치를 찾습니다.
* PT 엔트리에서 최종 물리 프레임 번호를 얻습니다.
* 이 물리 프레임 번호와 VA의 오프셋을 결합하여 최종 PA를 생성합니다.이러한 계층 구조는 대부분의 가상 주소가 실제로 사용되지 않는 경우(Sparse Address Space), 해당 가상 주소에 대한 페이지 테이블 항목 전체를 메모리에 올리지 않아도 되어 메모리 사용량을 크게 절감할 수 있게 해줍니다.
SMMU: 주변 장치의 안전한 메모리 접근을 위하여
1. SMMU란 무엇인가?
SMMU (System Memory Management Unit)는 CPU의 MMU와 유사하지만, 주로 I/O 장치(Peripheral Devices)가 메모리에 접근하는 것을 관리하고 보호하기 위해 사용됩니다. 특히 DMA(Direct Memory Access)와 같이 장치가 CPU를 거치지 않고 직접 메모리에 데이터를 쓰고 읽는 작업에서 중요한 역할을 합니다. SMMU는 종종 IOMMU(Input/Output Memory Management Unit)라고도 불립니다.
2. SMMU가 필요한 이유
- DMA 보안 강화: CPU MMU가 프로그램의 메모리를 보호하는 것처럼, SMMU는 I/O 장치들이 특정 메모리 영역에만 접근하도록 제한합니다. 만약 DMA 기능을 가진 장치가 오류를 일으키거나 악의적인 목적으로 작동한다면, 시스템의 다른 중요한 메모리 영역을 손상시킬 수 있습니다. SMMU는 이러한 위험을 방지합니다.
- 가상 주소 사용 지원: SMMU는 I/O 장치 또한 가상 주소를 사용할 수 있도록 지원합니다. 이는 장치 드라이버 개발을 단순화하고, 장치가 물리 메모리 주소를 직접 알 필요 없이 유연하게 메모리를 사용할 수 있게 해줍니다. 예를 들어, 가상 머신 환경에서 각 가상 머신이 자신의 메모리 공간을 장치에 할당하는 것이 가능해집니다.
- 메모리 접근 격리: 각 장치별로 접근 가능한 메모리 영역을 분리하여 시스템의 안정성과 보안성을 더욱 높입니다.
CPU MMU와 SMMU의 협력, 그리고 성능 문제
CPU MMU와 SMMU는 각자의 역할을 수행하지만, 현대 시스템에서는 긴밀하게 협력합니다.
1. 테이블 공유 및 저장 위치
- 페이지 테이블 저장: MMU와 SMMU가 사용하는 주소 변환 테이블(페이지 테이블)은 그 크기가 매우 방대할 수 있기 때문에, 일반적으로 DDR(메인 메모리)에 저장됩니다.
- 캐싱 (TLB): 하지만 매번 DDR에 접근하여 테이블을 찾는 것은 매우 느립니다. 이를 해결하기 위해 CPU MMU는 TLB(Translation Lookaside Buffer)라는 고속 캐시에 최근 사용된 주소 변환 정보를 저장해 둡니다. SMMU 역시 자체적인 캐싱 메커니즘을 가질 수 있습니다. 만약 TLB에 필요한 정보가 없다면, MMU(또는 SMMU)는 DDR에 있는 페이지 테이블을 참조하게 됩니다.
- 테이블 공유: OS는 CPU MMU와 SMMU가 사용하는 페이지 테이블을 관리합니다. CPU MMU가 사용하는 페이지 테이블은 CPU가 실행하는 프로세스의 가상 주소 공간을 매핑합니다. SMMU가 사용하는 페이지 테이블은 I/O 장치의 DMA 접근을 위한 매핑 정보를 담고 있으며, OS는 SMMU에게 이 테이블의 위치를 알려주어 DMA 접근을 제어합니다. 경우에 따라서는 CPU MMU와 SMMU가 동일한 물리 메모리 영역에 있는 페이지 테이블 구조를 공유하거나, OS가 이를 효율적으로 관리하도록 구성될 수 있습니다.
2. Latency 문제와 시스템 이점
- DDR 접근 지연: 페이지 테이블이 DDR에 저장되어 있고, TLB에 해당 정보가 없을 경우, MMU/SMMU는 DDR에 접근하여 페이지 테이블 워크(walk, 테이블을 따라가는 과정)를 수행해야 합니다. 이 과정에서 발생하는 수십~수백 나노초(ns)의 지연(Latency)은 분명히 존재합니다.
- 시스템적 이점: 그럼에도 불구하고 SMMU를 사용하는 시스템적인 이점은 이러한 지연을 상쇄하고도 남습니다.
- 보안 및 안정성: 앞서 언급했듯이, 악의적인 DMA 공격이나 장치 오류로 인한 시스템 전체의 붕괴를 막는 것은 매우 중요합니다. SMMU는 이러한 위험을 차단하여 시스템의 견고성을 크게 향상시킵니다.
- 유연성 및 추상화: 장치가 가상 주소를 사용하게 함으로써, OS는 메모리 할당 및 관리를 훨씬 유연하게 할 수 있습니다. 이는 복잡한 시스템, 특히 가상화 환경에서 장치 리소스를 효율적으로 공유하고 격리하는 데 필수적입니다.
- 성능 최적화: 비록 개별 주소 변환에 약간의 지연이 발생하더라도, OS가 메모리를 더욱 효율적으로 관리하고, 장치 접근을 최적화할 수 있게 되어 전반적인 시스템 성능과 안정성을 높이는 데 기여합니다. 예를 들어, OS는 SMMU를 통해 특정 장치가 필요한 메모리만 할당하고, 불필요한 메모리 접근을 차단함으로써 시스템 자원을 더 효율적으로 사용할 수 있습니다.
댓글
댓글 쓰기