ONE QUESTION AT A TIME.

천천히 생각하고, 분명하게.

TODAY’S QUESTION1428 / 1500
운영체제난이도 하5분 답변 목표 · 보강본

큰 메모리 영역을 불규칙하게 읽는 프로그램에서 TLB miss가 늘었습니다. TLB는 주소 변환 비용을 어떻게 줄이며 miss와 페이지 폴트는 어떻게 다른가요?

잠깐, 답변을 보기 전에
먼저 내 말로 설명해 볼까요?

답변과 점검 포인트 펼치기답변 접기
01

구두 답변

정의를 외우기보다, 원리와 조건을 연결해 설명해 보세요.

TLB는 최근 가상 페이지와 물리 프레임, 권한 정보를 저장하는 변환 캐시입니다. 가상 주소를 사용할 때 TLB가 적중하면 여러 단계의 페이지 테이블을 다시 따라가지 않아 주소 변환 비용을 줄일 수 있습니다. TLB miss는 변환 항목을 찾지 못해 page-table walk가 필요한 사건이고, 페이지 폴트는 현재 매핑·권한으로 접근을 즉시 완료할 수 없어 운영체제의 fault handler가 개입하는 사건입니다. TLB에 없다는 사실만으로 디스크 접근이나 메모리 부족을 의미하지 않습니다. 이 차이를 주소 변환 캐시 관점에서 분석합니다.

세 종류의 miss를 나눕니다

큰 배열을 순차적으로 읽으면 페이지 안의 여러 원소가 같은 변환을 재사용하지만, 포인터 추적이나 넓은 영역의 무작위 접근은 짧은 시간에 많은 가상 페이지를 건드려 TLB reach를 넘길 수 있습니다. TLB miss 뒤 페이지 테이블에 유효한 매핑이 있으면 하드웨어 walk와 캐시 접근으로 끝납니다. 매핑이 없거나 권한이 맞지 않으면 page fault가 발생하고, 익명 페이지를 처음 쓰거나 파일 매핑을 처음 읽는 경우에는 디스크 없이 처리될 수도 있습니다. 데이터 cache miss는 내용이 캐시에 없는 현상이고 TLB miss와도 별도입니다.

큰 페이지는 하나의 TLB 항목으로 넓은 주소 범위를 덮어 TLB miss와 page-table 메모리를 줄일 수 있습니다. 그러나 작은 객체가 페이지 끝에 남는 내부 단편화, 큰 단위의 할당·압축 비용, page fault 때 읽는 단위 증가가 생길 수 있습니다. 프로세스 전환 때도 ASID·PCID 같은 주소 공간 태그를 지원하면 일부 TLB를 재사용할 수 있지만, 모든 하드웨어에서 전환 때 전체 TLB가 유지되거나 비워진다고 일반화하지 않겠습니다.

접근 패턴으로 검증합니다

TLB miss·page-table walk·data cache miss·minor/major fault와 메모리 대역폭을 같은 벤치마크에서 수집합니다. 연속 배열, 페이지마다 한 원소만 읽는 패턴, 포인터 추적, 작은·큰 페이지 구성을 나누고 실제 데이터 크기를 사용합니다. 큰 페이지 적용 뒤 TLB 지표만 좋아지고 RSS와 fault, p99가 악화될 수 있으므로 사용자 지연과 메모리 낭비를 함께 확인하겠습니다.

64GiB 영역에서 페이지마다 한 원소만 무작위로 읽으면 짧은 시간에 매우 많은 변환 항목을 만납니다. 같은 크기를 연속 배열로 순회하면 한 페이지의 여러 원소가 변환을 재사용할 수 있어 TLB reach 차이가 드러납니다. TLB miss 뒤 page table walk가 캐시에 적중하면 디스크 없이 끝날 수 있지만, walk 자체가 data cache와 메모리 대역폭을 경쟁할 수 있습니다.

큰 페이지는 한 TLB 항목의 범위를 넓히지만 작은 객체의 내부 낭비, 세밀한 보호·부분 회수의 불리함, 큰 단위 fault와 할당 실패를 만들 수 있습니다. page table을 바꾼 뒤 다른 코어의 낡은 변환을 무효화하는 shootdown 비용도 고려합니다. 연속·무작위·포인터 추적 패턴에서 TLB miss, walk, data cache miss, minor/major fault와 p99를 함께 측정하겠습니다.

같은 64GiB를 읽더라도 페이지마다 한 원소를 무작위로 읽는 패턴과 페이지 안의 원소를 연속 순회하는 패턴은 TLB 재사용이 다릅니다. page-table walk가 캐시에 적중하면 디스크 접근 없이 끝나지만 메모리 대역폭을 소비할 수 있습니다. 변환 miss 감소를 p99 개선과 동일시하지 않겠습니다.

TLB miss는 페이지 테이블 walk를 추가하지만 walk 결과가 캐시에 있으면 디스크 접근 없이 끝날 수 있습니다. 큰 페이지는 TLB reach를 넓히는 대신 세밀한 보호·부분 회수와 내부 단편화에 불리할 수 있습니다. 페이지 테이블 변경 뒤 다른 코어의 변환을 무효화하는 shootdown 비용도 있어, miss 감소만으로 성능 개선을 결론 내리지 않겠습니다.

02

득점 포인트

이해가 드러나는 지점을 확인해 보세요.

  • TLB·페이지 테이블·데이터 캐시의 역할을 분리한다.
  • TLB miss와 page fault, 디스크 접근의 관계를 조건별로 설명한다.
  • 큰 페이지·주소 공간 태그의 이득과 비용을 접근 패턴으로 검증한다.
03

감점 포인트

놓치기 쉬운 조건과 오해를 짚어 보세요.

  • TLB miss면 반드시 디스크 I/O가 발생한다고 말한다.
  • 큰 페이지는 내부 단편화와 fault 비용이 없다고 말한다.
  • 모든 프로세스 전환이 전체 TLB를 동일하게 비운다고 단정한다.
04

더 파고들 거리

하나 더 질문하며 이해의 범위를 넓혀 보세요.

득점·감점 포인트는 학습용 자기 점검 기준이며, 특정 회사의 실제 채점표가 아닙니다.

원리부터 공부하고 싶다면

답변을 보충하는 개념·예제·슈도코드를 읽어 보세요.

← 전체 질문 보기