🔍 MMU란? 👉 CPU와 메모리 사이의 똑똑한 관리자
운영체제를 공부하다 보면 어느 순간 꼭 마주치는 녀석이 하나 있습니다.
바로 MMU (Memory Management Unit) 인데요.
오늘은 이 MMU에 대해 공부해 보려합니다.😊
🧠 MMU는 어떤 역할을 하나요?
MMU는 CPU와 메모리(RAM) 사이에 위치해 있는 하드웨어 장치입니다.
마치 고속도로 톨게이트처럼, CPU가 메모리에 접근하기 전에 반드시 거쳐야 하는 관문이에요.
MMU의 핵심 역할은 다음과 같아요
| 기능 | 설명 |
|---|---|
| 🧭 주소 변환 | CPU가 사용하는 가상 주소를 실제 RAM의 물리 주소로 변환합니다. |
| 🛡️ 메모리 보호 | 각 프로세스가 서로의 메모리에 접근하지 못하게 차단합니다. |
| 🧱 페이징 지원 | 메모리를 페이지 단위로 나누어 가상 메모리를 구현합니다. |
| 🚀 캐시 제어 | 어떤 메모리 영역을 캐싱할지 제어합니다. |
| 🔌 Memory-mapped I/O 지원 | I/O 장치를 메모리처럼 접근할 수 있게 매핑합니다. |
🛠️ MMU가 동작하는 방식
- 프로그램이 메모리를 접근할 때, CPU는 가상 주소를 생성합니다.
- 이 가상 주소는 MMU에게 전달됩니다.
- MMU는 페이지 테이블을 확인해서 실제 메모리(RAM)의 주소로 변환합니다.
- 변환된 물리 주소로 메모리에 접근하게 됩니다.
예를 들어, CPU는
0x7fff1234주소에 접근하려고 하는데,
MMU가 이를0x00abcd34로 변환해서 RAM에 전달하는 식입니다!
🔒 MMU는 프로세스를 안전하게 보호해요
운영체제에서는 여러 프로그램이 동시에 실행되죠?
그런데 서로의 메모리를 막 건드릴 수 있다면? 😱
한 프로그램의 오류로 전체 시스템이 뻗을 수도 있어요!
그래서 MMU는 각 프로세스가 자기만의 메모리 공간을 갖도록 도와줍니다.
이걸 프로세스 격리(Isolation)라고 해요.
🧩 MMU 없이도 프로그램이 돌아가나요?
물론 가능합니다!
하지만 가상 메모리, 프로세스 보호, 페이징, 멀티태스킹 같은
현대 운영체제의 필수 기능들이 불가능하거나 비효율적으로 작동합니다.
👉 그래서 윈도우, 리눅스, 안드로이드 같은 OS를 돌리는 시스템에는
거의 무조건 MMU가 포함되어 있어요.
MMU 덕분에 브라우저가 멈춰도 게임은 멀쩡하게 돌아가는 거랍니다 🎮
🧱 페이지 테이블(Page Table)이란?
MMU는 페이지 테이블이라는 자료구조를 사용해서 주소를 변환합니다.
가상 메모리를 4KB 같은 일정한 단위로 잘라서, 각 조각(페이지)이 실제 어디에 저장되어 있는지 기록해놓은 표예요.
예를 들어
| 가상 페이지 | 물리 프레임 |
|---|---|
| 0번 페이지 | 5번 프레임 |
| 1번 페이지 | 12번 프레임 |
| 2번 페이지 | 7번 프레임 |
이 표를 보고 MMU는 "아, CPU가 1번 페이지의 200번째 바이트에 접근했네.
그건 실제 메모리의 12번 프레임의 200번째 바이트군!" 하고 계산합니다 🧮
⚡ 그런데, 매번 페이지 테이블을 보면 느리지 않을까요?
맞습니다!
그래서 MMU 안에는 아주 빠른 캐시가 하나 더 들어 있습니다. 그 이름은...
💾 TLB (Translation Lookaside Buffer)
TLB는 최근에 변환한 주소들을 기억해두는 작은 고속 메모리입니다.
- TLB Hit: TLB에 변환 정보가 있음 → 바로 접근 가능! 🔥
- TLB Miss: TLB에 없어서 페이지 테이블을 다시 봐야 함 → 느림 😅
이 TLB 덕분에 주소 변환도 빨라지고, CPU와 메모리 사이가 원활해집니다 🚀
🎯 마무리 요약
| 개념 | 한 줄 요약 |
|---|---|
| MMU | CPU가 사용하는 가상 주소를 실제 물리 주소로 바꿔주는 하드웨어 |
| 주소 변환 | 프로그램이 RAM을 사용할 수 있게 하는 필수 과정 |
| 페이지 테이블 | 가상 → 물리 주소 변환 정보를 담은 지도 |
| TLB | 변환 정보를 빠르게 기억해두는 캐시 |
쉽게 생각하자!
MMU는 ‘보이지 않는 비서’처럼, CPU가 헷갈리지 않게 주소도 바꿔주고, 메모리도 지켜주는 든든한 조력자랍니다.
운영체제 속 진짜 슈퍼히어로예요! 🦸♂️