CS Operating System - TLB

Huisu·2025년 2월 11일
0

CS

목록 보기
23/25
post-thumbnail

TLB

TLB는 무엇인가요?

CPU는 프로세스를 사용하기 위해 메모리에 두 번 접근해야 한다. 먼저 메모리에 저장된 page table에 접근하고, 가상 주소를 물리 주소로 변환한 뒤 실제 메모리에 접근하기 위해 page 테이블에서 얻은 물리 주소를 통해 실제 물리 메모리에 접근한다.

여기서 TLB (Translation Lookaside Buffer)는 메모리 접근 횟수를 줄이고자 CPU가 접근한 페이지와 프레임 정보를 저장한 곳이다. 즉 TLB는 (page, frame) 단위로 저장해 가상 주소에서 물리 메모리 주소로 변환할 때 속도를 높여 주는 캐시 메모리이다.

TLB를 쓰면 왜 빨라지나요?

TLB를 사용하면 TLB 히트가 존재하기 때문에 속도가 빨라질 수 있다. CPU는 TLB에 먼저 접근하여 메모리 매핑에 필요한 정보가 있는지 확인하고, 매핑 정보가 있다면 이를 사용하여 바로 물리 메모리에 접근한다. 이것이 TLB 히트이다. TLB 미스는 TLB에 필요한 매핑 정보가 없다면 물리 메모리에 저장된 page table에 접근하는 기존의 접근이다. 따라서 page에 대한 접근을 캐시 방식으로 관리하기 때문에 속도가 빨라진다.

MMU가 무엇인가요?

메모리의 공간이 한정적이기 때문에 사용자에게 더 많은 메모리를 제공하기 위해 가상 메모리라는 개념이 등장한 것이다. 이때, 가상 메모리의 논리 주소를 가지고 실제 데이터가 담겨 있는 곳에 접근하기 위해서는 빠른 주소 변환이 필요한데 이떼 MMU (Memory Management Unit) 가 관여한다. 논리 주소를 물리 주소로 변환해 주며 메모리 보호나 캐시 관리 등 CPU가 메모리에 접근하는 것을 총 관리해 주는 하드웨어이다.

TLB와 MMU는 어디에 위치해 있나요?

MMU는 일반적으로는 CPU 내에 존재하고, TLB는 메모리 관리 기법 중 캐싱과 관련된 부분을 담당하기 위해 MMU 내부에 존재한다.

코어가 여러개라면, TLB는 어떻게 동기화 할 수 있을까요?

TLB Shootdown

하나의 코어가 페이지 엔트리를 변경하면, 다른 코어들이 해당 변경 사항을 반영하도록 전체 global TLB를 무효화하는 TLB Shootdown을 실행한다.

ASID (Address Space Identifier) 활용

각 프로세스 혹은 코어에 대한 고유한 ASID를 할당하여, TLB 항목을 프로세스별로 구분하는 것이다. 프로세스가 전환될 때 모든 TLB를 플러시하지 않아도 된다는 장점이 있다.

TLB 관점에서, Context Switching 발생 시 어떤 변화가 발생하는지 설명해 주세요.

컨텍스트 스위칭은 CPU가 사용 중인 프로세스를 다른 프로세스로 변환하는 과정이다. 각 프로세스는 고유한 메모리 공간을 갖기 때문에 프로세스를 전환하는 과정에서 이전 프로세스와 새로운 프로세스간의 충돌이 발생하지 않게 하기 위해서 TLB를 비워야 한다. 이 과정을 TLB Flush라고 한다.

TLB Flush가 필요한 이유

  • 가상 주소 공간의 충돌 방지
    • 각 프로세스는 독립된 메모리 공간을 사용한다.
    • 컨텍스트 스위칭 과정에서 이전 프로세스로부터 사용된 주소 매핑 정보가 현재 프로세스의 매핑 정보와 충돌되지 않기 위해 TLB를 초기화한다.
  • 주소 변환의 일관성 유지
    • 이전 프로세스의 매핑 정보가 TLB에 남아 있다면 CPU가 현재 프로세스를 접근하는 과정에서 TLB에 접근할 때 이전 프로세스의 매핑 정보를 사용하지 않게 하기 위함이다.

0개의 댓글