컴퓨터 구조

가상 메모리와 TLB

프로그램은 0번지부터 시작하는 자기만의 가상 주소를 씁니다. CPU는 가상 주소를 페이지 번호와 오프셋으로 나누고, 페이지 테이블에서 그 페이지가 실제 메모리의 어느 프레임에 있는지 찾아 물리 주소로 바꿉니다. 이 변환을 빠르게 하려고 최근 결과를 TLB에 기억해 둡니다.

가상 주소가 TLB와 페이지 테이블을 거쳐 물리 주소로 바뀌는 과정을 보여 주는 시뮬레이터

1. 접근할 가상 주소를 정하세요 (페이지 크기 256바이트, 가상 페이지 8개, 물리 프레임 4개)

TLB (최근 변환 4개)
페이지 테이블
물리 메모리

[다음 단계]를 누를 때마다 주소 분해 → TLB 확인 → (필요하면) 페이지 테이블 확인 → 물리 주소 계산 순서로 한 단계씩 진행합니다. 처음에는 페이지 0과 3만 메모리에 올라와 있습니다.

페이지 번호주소 ÷ 256
오프셋주소 % 256
물리 주소프레임 × 256 + 오프셋
TLB 적중률보통 99% 이상

왜 가상 메모리를 쓸까요

프로그램마다 독립된 주소 공간을 주면 서로의 메모리를 건드릴 수 없어 안전하고, 실제 메모리보다 큰 프로그램도 필요한 페이지만 올려서 실행할 수 있습니다. 페이지 테이블에 없는(유효 비트가 0인) 페이지를 쓰려 하면 페이지 폴트가 일어나고, 운영체제가 디스크에서 그 페이지를 가져와 빈 프레임에 올립니다. 빈 프레임이 없으면 하나를 내보내야 하는데, 무엇을 내보낼지는 페이지 교체 알고리즘이 정합니다. 이 예제는 가장 먼저 올라온 페이지를 내보내는 FIFO를 씁니다.

TLB가 없으면 메모리를 두 번 읽습니다

페이지 테이블도 메모리에 있으므로, 변환할 때마다 페이지 테이블을 한 번 읽고 실제 데이터를 또 한 번 읽어야 합니다. TLB는 최근에 쓴 변환 결과를 CPU 안에 기억해 두는 작은 캐시라서, 적중하면 페이지 테이블을 읽지 않습니다.

계산 문제로 자주 나옵니다: 유효 접근 시간

TLB 검색 시간을 t, 메모리 접근 시간을 m, TLB 적중률을 h라고 하면, 적중 시 t + m, 실패 시 t + 2m이 걸립니다. 따라서 유효 접근 시간 = h(t + m) + (1 − h)(t + 2m)입니다. 예를 들어 t = 1ns, m = 100ns, h = 0.98이면 0.98 × 101 + 0.02 × 201 = 103ns입니다.