임베디드

ARM MMU: 레지스터와 동작 방식 완벽 가이드

embeddedworld 2024. 12. 22. 21:16

이전 포스팅에서 가상 메모리 및 메모리 관리 유닛(MMU) 에 대해 알아봤었습니다. 실제 ARM 아키텍처에서는 MMU 를 어떻게 지원하고 동작할까요? 이번 글에서는 대표적인 고성능 ARM 프로세서인 ARM Cortex-A72를 통해 자세히 알아보겠습니다.

ARM Cortex-A72의 MMU는 CPU가 가상 주소(VA)를 물리 주소(PA)로 변환하고 메모리 접근을 제어하는 핵심 구성 요소입니다. 앞으로 Cortex-A72의 MMU가 어떻게 작동하는지, 관련 레지스터와 동작 방식을 자세히 살펴보겠습니다.

1. MMU란?


MMU는 주소 변환과 메모리 접근 제어를 담당합니다. 이는 현대 CPU에서 효율적인 메모리 사용과 시스템 보안을 보장하는 데 필수적입니다. ARM Cortex-A72는 ARMv8-A 아키텍처를 기반으로 AArch64(64비트)와 AArch32(32비트) 실행 상태에서 MMU를 지원합니다.

2. MMU 관련 레지스터


MMU의 동작은 다양한 레지스터로 제어되며, 대표적인 레지스터는 다음과 같습니다.

1) AArch64 실행 상태

TTBR0_EL1, TTBR1_EL1
페이지 테이블 시작 주소를 설정하는 레지스터입니다.
TTBR0_EL1: 사용자 공간(하위 주소 영역)에 사용.
TTBR1_EL1: 커널 공간(상위 주소 영역)에 사용.
TCR_EL1
주소 변환 동작을 제어하는 레지스터로, 페이지 크기(4KB, 64KB 등), 물리 주소 크기, 캐싱 정책 등을 설정합니다.
MAIR_EL1
메모리 속성(캐싱, 버퍼링 등)을 정의합니다. 각 속성은 인덱스를 통해 참조됩니다.
SCTLR_EL1
MMU 활성화 및 캐시 제어를 포함한 시스템 동작을 제어합니다. MMU를 활성화하려면 M 비트를 설정해야 합니다.

2) AArch32 실행 상태

TTBR0, TTBR1
페이지 테이블의 시작 주소를 설정합니다.
DACR (Domain Access Control Register)
메모리 도메인별 접근 권한을 정의합니다.
SCTLR
MMU와 관련된 시스템 동작을 제어하며, M 비트를 설정하여 MMU를 활성화합니다.

3. MMU의 동작 방식

1) 주소 변환 (VA → PA)


MMU는 가상 주소를 물리 주소로 변환합니다. 변환 과정은 다음 단계로 이루어집니다.
1. 페이지 테이블 탐색:
TTBR0_EL1 또는 TTBR1_EL1에 설정된 페이지 테이블을 참조하여 가상 주소를 물리 주소로 변환합니다.
2. TLB(Translation Lookaside Buffer):
변환 결과를 TLB라는 캐시에 저장하여 변환 속도를 높입니다. Cortex-A72는 L1 TLB와 L2 TLB를 통해 빠른 주소 변환을 지원합니다.

2) 메모리 속성 적용


변환된 물리 주소는 MAIR_EL1에 정의된 속성을 따릅니다.
• 캐싱 가능 여부
• 쓰기 버퍼링 허용 여부
• 접근 권한

3) 접근 제어


MMU는 접근 권한을 확인하여 권한 위반 시 예외(Exception)를 발생시킵니다.

4. MMU 활성화 과정


MMU를 활성화하려면 다음 단계를 따라야 합니다.
1. 페이지 테이블 구성:
TTBR0_EL1과 TTBR1_EL1에 페이지 테이블 시작 주소를 설정합니다.
2. TCR_EL1 및 MAIR_EL1 설정:
페이지 크기, 주소 크기, 캐싱 정책 등을 설정하고, 메모리 속성을 정의합니다.
3. SCTLR_EL1에서 MMU 활성화:
SCTLR_EL1.M 비트를 1로 설정하여 MMU를 활성화합니다.

5. MMU 예외 처리


MMU는 동작 중 다음과 같은 상황에서 예외를 발생시킬 수 있습니다.
TLB 미스: 변환 캐시에 없는 경우.
페이지 테이블 미스: 잘못된 페이지 테이블 항목 참조 시.
접근 권한 위반: 허가되지 않은 메모리 영역에 접근하려고 시도한 경우.

6. Cortex-A72 MMU의 특징 요약

• ARMv8-A 아키텍처 지원
• AArch64와 AArch32 실행 상태를 모두 지원.
• 효율적인 캐시 구조
• L1 및 L2 TLB를 통한 빠른 주소 변환.
• 유연한 메모리 속성 제어
• MAIR_EL1을 사용해 캐싱 및 버퍼링 정책 설정.

Cortex-A72의 MMU는 고성능, 저전력 설계를 바탕으로 강력한 메모리 제어 기능을 제공합니다. 더 자세한 사항은 Cortex-A72의 Reference Manual를 통해 확인할 수 있습니다. MMU의 정확한 이해와 설정은 시스템의 성능과 안정성을 높이는 핵심입니다.