---
title: "TLB: 메모리 주소 변환에도 캐시가 필요한 이유"
author: "Lee"
published_at: "2026-10-09T10:21:03.552Z"
updated_at: "2026-09-30T09:39:52.923Z"
tags: ["컴퓨터공학","운영체제"]
canonical_url: "https://ariser.io/@writer_a1cd615ab19e/tlb-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%A3%BC%EC%86%8C-%EB%B3%80%ED%99%98%EC%97%90%EB%8F%84-%EC%BA%90%EC%8B%9C%EA%B0%80-%ED%95%84%EC%9A%94%ED%95%9C-%EC%9D%B4%EC%9C%A0"
ai_assisted: false
---

# TLB: 메모리 주소 변환에도 캐시가 필요한 이유

[원문](https://ariser.io/@writer_a1cd615ab19e/tlb-%EB%A9%94%EB%AA%A8%EB%A6%AC-%EC%A3%BC%EC%86%8C-%EB%B3%80%ED%99%98%EC%97%90%EB%8F%84-%EC%BA%90%EC%8B%9C%EA%B0%80-%ED%95%84%EC%9A%94%ED%95%9C-%EC%9D%B4%EC%9C%A0)

메모리에서 값을 하나 읽으려는데 그 위치를 알아내기 위해 또 여러 번 메모리를 읽어야 한다면 비용이 커진다. TLB, 즉 Translation Lookaside Buffer는 최근 사용한 주소 변환 정보를 보관해 이 문제를 줄이는 장치다. 프로그램 데이터 자체보다 가상 페이지를 어느 물리 프레임으로 연결할지에 관한 정보를 저장한다는 점이 일반 데이터 캐시와 다르다.

![TLB 히트는 바로 물리 프레임으로 가고 미스는 페이지 테이블을 확인한 뒤 변환을 채우는 그림](/api/v1/media/91c9eb6f-848a-4e51-be3c-bbd647a7a1ac)

*TLB 미스는 변환 캐시 실패이며 디스크 접근이나 페이지 폴트를 반드시 뜻하지 않는다.*

## 먼저 빠른 변환 기록을 찾는다

CPU가 가상 주소를 사용하면 페이지 번호에 맞는 TLB 항목을 확인한다. 유효한 항목을 찾고 권한이 맞으면 해당 프레임 번호와 오프셋으로 물리 주소를 만든다. 없으면 페이지 테이블을 탐색하는 등의 절차로 변환을 얻고 TLB를 채운다. 이를 각각 TLB 히트와 미스라고 한다. 미스 처리 주체와 과정은 하드웨어·운영체제 구조에 따라 달라진다.

TLB 미스는 페이지 폴트와 같은 말이 아니다. 찾는 페이지가 RAM에 있고 페이지 테이블에 정상적으로 기록돼 있어도 TLB 용량이나 교체 때문에 미스가 생긴다. 페이지 폴트는 매핑이나 접근 조건을 운영체제가 처리해야 하는 사건이다. TLB가 빗나간 뒤 표를 읽어 곧바로 실행을 계속하는 경우와 페이지 데이터를 준비해야 하는 경우를 나눠 봐야 한다.

## 배열을 읽을 때 생기는 차이

4KiB 페이지와 8바이트 원소를 가정하면 한 페이지에는 512개 원소가 들어간다. 배열을 순서대로 읽을 때 첫 원소에서 변환을 얻은 뒤 같은 페이지의 나머지 원소는 그 변환을 재사용할 가능성이 높다. 반대로 서로 다른 많은 페이지의 첫 원소만 순환해서 읽으면 데이터가 작아도 필요한 변환의 수는 커진다. 주소 공간의 접근 패턴이 TLB 성능을 바꾸는 이유다.

TLB가 수용할 수 있는 항목 수와 페이지 크기를 곱하면 대략 어느 정도 메모리 범위의 변환을 담을 수 있는지 생각할 수 있다. 다만 실제 CPU에는 여러 수준과 페이지 크기별 TLB, 연관도 제한이 있어 이 계산은 출발점이다. 총 페이지 수가 적어도 항목들이 같은 위치에 충돌하면 성능 문제가 생길 수 있다.

## 다른 프로세스의 주소를 혼동하지 않으려면

서로 다른 프로세스는 같은 가상 페이지 번호를 서로 다른 프레임에 연결할 수 있다. 그래서 프로세스 전환 시 옛 항목을 비우거나 주소 공간 식별자를 사용해 구분하는 방식이 필요하다. [OSTEP의 TLB 장](https://pages.cs.wisc.edu/~remzi/OSTEP/vm-tlbs.pdf)은 식별자를 이용해 여러 주소 공간의 변환을 함께 보관하는 원리를 설명한다. 모든 문맥 교환이 항상 전체 TLB를 비운다고 외우면 실제 구현을 놓친다.

큰 페이지는 한 항목으로 더 넓은 범위를 표현해 변환 재사용에 유리할 수 있다. 하지만 물리 공간 확보, 내부 낭비, 할당 지연과 같은 다른 비용이 생긴다. 큰 페이지를 켰다는 사실만으로 무조건 빨라진다고 결론 내릴 수 없다. 작업의 활성 페이지 수와 접근 방식이 실제로 변환 병목을 만드는지 확인해야 한다.

TLB는 대형 배열, 데이터베이스, 과학 계산, 가상화 환경을 분석할 때 중요하다. 자료를 연속적으로 배치하거나 작은 영역에서 충분히 계산한 뒤 다음 영역으로 이동하면 주소 변환도 재사용하기 쉬워진다. CPU 캐시 미스가 적은데 메모리 접근이 느리다면, 데이터 위치뿐 아니라 그 위치를 찾는 변환 경로도 살펴볼 필요가 있다.

### 참고 자료

- [OSTEP — Paging: Faster Translations (TLBs)](https://pages.cs.wisc.edu/~remzi/OSTEP/vm-tlbs.pdf)
