스킬캠퍼스

오늘 끝나면

가상 메모리와 MMU

  • 가상 메모리와 MMU의 핵심 문제를 한 문장으로 설명한다
  • 오른쪽 실습에서 가상이 어떻게 움직이는지 관찰한다
  • 다음 강의와 이어지는 한계를 말할 수 있다

실습 미션

가상→물리 주소·page table walk·TLB 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.

성공 조건

  • 실습의 기본값을 먼저 관찰
  • 입력값이나 모드를 한 번 이상 바꿔 결과 비교
  • 왜 결과가 바뀌었는지 한 문장으로 설명

반도체 설계 · 37

가상 메모리와
MMU

프로그램은 진짜 메모리 주소를 모른다.
가짜 주소(가상 주소)를 쓰고, MMU가 그걸 진짜 주소로 바꿔준다.
이 한 겹이 보호와 격리, 큰 주소공간을 다 만든다.

P.01반도체 설계 · 37

프로그램은 가상 주소를 쓴다

프로그램이 보는 주소는 진짜가 아니다. 전부 가상 주소(VA)다.

모든 프로그램이 자기만 0번지부터 쭉 메모리를 가진 것처럼 짜인다. 실제 DRAM의 어느 칸에 올라가는지는 신경 쓰지 않는다.
그 가상 주소를 진짜 물리 주소(PA)로 바꾸는 하드웨어가 MMU(Memory Management Unit)다.

CPU가 메모리에 접근할 때마다 MMU가 중간에서 VA를 PA로 변환한다.
덕분에 두 프로그램이 똑같이 0x1000을 써도 서로 다른 물리 칸으로 간다. 충돌도 없고 남의 메모리도 보지 못한다.
이 변환 한 겹이 운영체제의 기반이다. 여기서 정한 MMU가 최종 MyChip에 들어간다.

가상 주소 → MMU → 물리 주소
프로그램은 가상 주소만 본다 · MMU가 바꿔준다
프로그램 AVA 0x1000프로그램 BVA 0x1000MMUVA → PAPA 0x7A00A의 칸PA 0x2C00B의 칸
같은 가상 주소도 서로 다른 물리 칸으로 간다 · 충돌 없고 격리된다
P.02반도체 설계 · 37

page 단위로 쪼개 관리한다

주소를 한 칸씩 변환하면 표가 끝없이 커진다. 그래서 page라는 덩어리로 묶는다.

메모리를 같은 크기(보통 4KB, 여기 데모는 256B)의 page로 잘게 자른다.
가상 주소는 위쪽 비트가 VPN(어느 page냐), 아래쪽 비트가 offset(page 안 몇 번째냐)으로 갈린다.

변환은 VPN만 물리 page 번호 PFN으로 바꾼다. offset은 그대로 따라간다.
page 단위라 한 page에 권한(읽기·쓰기·실행)을 통째로 걸 수 있다. 보호와 격리가 여기서 나온다.
또 안 쓰는 page는 디스크로 내려두고 필요할 때만 올려서, 실제 DRAM보다 큰 주소공간을 쓰는 것처럼 보이게 한다.

VA = VPN(page 번호) | offset
가상 주소 = VPN | offset (page=256B)
예 · VA 0x3A55 (16비트)
VPN · page 번호
00111010
0x3A
offset · page 안 위치
01010101
0x55
변환은 VPN만 · offset은 그대로
VPN 0x3A
page table
→ PFN 0x19
offset
그대로
PA
0x1955
PFN|offset
한 page에 권한을 통째로 건다 · 보호와 격리의 단위
P.03반도체 설계 · 37

page table walk, 변환은 원래 느리다

VPN을 PFN으로 바꾸는 사전이 page table이다. 메모리 안에 있다.

MMU는 VPN을 색인 삼아 메모리의 page table을 읽어 PFN을 꺼낸다. 이걸 page table walk라 한다.
문제는 이게 메모리 접근이라는 것이다. 변환 한 번 하려고 메모리를 한 번, 다단계면 여러 번 다녀와야 한다.

진짜 칩의 page table은 한 장이 아니라 여러 층으로 쌓인다. 64비트 주소공간을 한 장에 못 담아서 4단계쯤으로 나눈다.
그러면 변환 한 번에 메모리를 네 번 걸어 들어가야 한다. 명령마다 이러면 너무 느리다.
그래서 변환 결과를 어딘가에 캐시해 둬야 한다. 그게 다음 장의 TLB다.

VPN → page table → PFN
page table walk · 변환마다 메모리를 걸어 들어간다
L1 tableVPN 상위
메모리 접근 1
L2 tableVPN 하위
메모리 접근 2
PFN물리 page
변환 완료

단계가 N층이면 변환 한 번에 메모리를 N번 다녀온다 · 명령마다 이러면 느리다

그래서 결과를 캐시해 둬야 한다 · 그게 TLB다
P.04반도체 설계 · 37

TLB, 변환을 캐시한다

매번 page table을 걸으면 느리다. 그래서 변환 결과만 담는 작은 캐시를 두는데, 그게 TLB다.

TLB(Translation Lookaside Buffer)는 최근에 쓴 VPN→PFN 변환을 몇십에서 몇백 개 담아둔다.
CPU가 주소를 낼 때 MMU는 page table보다 먼저 TLB를 본다.

TLB hit이면 변환이 1 사이클에 끝난다. walk를 통째로 건너뛴다.
TLB miss면 그제야 page table walk를 하고, 찾은 변환을 TLB에 채워 넣는다. 다음에 같은 page를 부르면 hit이다.
page 단위라 한 변환이 page 전체(여기선 256바이트)를 덮는다. 코드나 배열처럼 한 page 안을 죽 훑는 접근은 거의 다 hit이 된다. 이 지역성 덕에 TLB가 작아도 잘 먹힌다.

자주 쓰는 VPN→PFN을 손 닿는 곳에
TLB · 변환 캐시 · page table 앞에 선다
VPNTLB변환 캐시 · 빠름page table메모리 · 느림hit · 1 cyclemissPFN
hit변환이 TLB에 있다 · walk 생략, 1 사이클
misswalk 후 결과를 TLB에 채운다 · 다음엔 hit
page 단위라 변환 하나가 page 전체를 덮는다 · 지역성 있는 접근은 거의 hit
P.05반도체 설계 · 37

직접 주소를 변환해 본다

오른쪽에서 가상 주소를 직접 골라 MMU를 한 단계씩 돌려본다.

STEP을 누르면 주소가 VPN과 offset으로 쪼개지고, TLB를 조회하고, miss면 page table을 걸어 PFN을 찾아 물리 주소를 조립한다. 근거 패널에 TLB와 page table이 그대로 보인다.

같은 page를 처음 부르면 miss라 walk를 한 번 하고 TLB에 채워진다. 그 page를 다시 부르면 이번엔 hit으로 walk를 건너뛴다.
FLUSH로 TLB를 비우면 다시 전부 miss가 된다. 문맥 전환 때 일어나는 일이다.
여기서 고른 page 크기와 TLB가 그대로 MyChip의 MMU 경로가 된다.

Q. TLB가 캐시하는 것은 무엇인가?정답은 가상→물리 주소 변환(자주 쓰는 page의 VPN→PFN)이다.
TLB는 데이터를 담는 캐시가 아니라 page table walk의 결과(변환)를 담는 캐시다.
hit이면 page table을 안 걸고 1 사이클에 PFN을 준다. 변환 비용이 사라진다.
page 단위라 변환 하나가 page 전체를 덮어서, 한 page를 훑는 접근은 거의 다 hit이 된다.
주소 고르고 → STEP으로 분해·조회·walk
MMU · 가상 주소 → 물리 주소 변환
가상 주소, 프로그램이 쓰는 주소(16비트)
예측 먼저, 이 VPN, TLB에 있을까?
단계 0/4대기
가상 주소 비트, 위 8비트 VPN · 아래 8비트 offset
VPN (page 번호)
00000000
offset (page 안 위치)
01000010
VPN = 0x00
offset = 0x42
변환 경로, VPN만 바뀜 · offset은 그대로
VPNTLB변환 캐시page table메모리 · 느림PFN

STEP을 눌러 VPN을 TLB에 먼저 물어본다.

물리 주소 = PFN · offset
VA 0x0042
근거 패널, TLB · page table
TLB · VPN
PFN
상태
(비어 있음)
page table · VPN
PFN
present
0x00
0x12
1
0x01
0x07
1
0x02
0x2A
1
0x10
0x05
1
0x3A
0x19
1
0x80
0x33
1

STEP으로 분해 → TLB 조회 → walk → 물리 주소를 한 단계씩 따라가 본다. 같은 page를 다시 부르면 이번엔 TLB hit.

여기서 정한 page 크기(256B)와 TLB, 자주 쓰는 VPN→PFN 변환을 담는 작은 캐시가 최종 MyChip의 MMU 경로가 된다.

3줄 요약

  1. 1가상→물리 주소·page table walk·TLB
  2. 2가상 메모리와 MMU은 비트·게이트 → ALU → 시간·메모리 → 나만의 CPU → 메모리·GPU·SoC 흐름 안의 한 칸이다.
  3. 3개념을 외우는 것보다 입력을 바꾸면 무엇이 달라지는지 보는 것이 우선이다.

완료 전 점검

복습 카드

가상

가상→물리 주소·page table walk·TLB

ALU

산술·논리 연산을 하는 회로

ISA

CPU가 이해하는 명령어 집합과 인코딩