CPU는 프로세스를 사용하기 위해 메모리에 두 번 접근해야 한다. 먼저 메모리에 저장된 page table에 접근하고, 가상 주소를 물리 주소로 변환한 뒤 실제 메모리에 접근하기 위해 page 테이블에서 얻은 물리 주소를 통해 실제 물리 메모리에 접근한다.
여기서 TLB (Translation Lookaside Buffer)는 메모리 접근 횟수를 줄이고자 CPU가 접근한 페이지와 프레임 정보를 저장한 곳이다. 즉 TLB는 (page, frame) 단위로 저장해 가상 주소에서 물리 메모리 주소로 변환할 때 속도를 높여 주는 캐시 메모리이다.
TLB를 사용하면 TLB 히트가 존재하기 때문에 속도가 빨라질 수 있다. CPU는 TLB에 먼저 접근하여 메모리 매핑에 필요한 정보가 있는지 확인하고, 매핑 정보가 있다면 이를 사용하여 바로 물리 메모리에 접근한다. 이것이 TLB 히트이다. TLB 미스는 TLB에 필요한 매핑 정보가 없다면 물리 메모리에 저장된 page table에 접근하는 기존의 접근이다. 따라서 page에 대한 접근을 캐시 방식으로 관리하기 때문에 속도가 빨라진다.
메모리의 공간이 한정적이기 때문에 사용자에게 더 많은 메모리를 제공하기 위해 가상 메모리라는 개념이 등장한 것이다. 이때, 가상 메모리의 논리 주소를 가지고 실제 데이터가 담겨 있는 곳에 접근하기 위해서는 빠른 주소 변환이 필요한데 이떼 MMU (Memory Management Unit) 가 관여한다. 논리 주소를 물리 주소로 변환해 주며 메모리 보호나 캐시 관리 등 CPU가 메모리에 접근하는 것을 총 관리해 주는 하드웨어이다.
MMU는 일반적으로는 CPU 내에 존재하고, TLB는 메모리 관리 기법 중 캐싱과 관련된 부분을 담당하기 위해 MMU 내부에 존재한다.
하나의 코어가 페이지 엔트리를 변경하면, 다른 코어들이 해당 변경 사항을 반영하도록 전체 global TLB를 무효화하는 TLB Shootdown을 실행한다.
각 프로세스 혹은 코어에 대한 고유한 ASID를 할당하여, TLB 항목을 프로세스별로 구분하는 것이다. 프로세스가 전환될 때 모든 TLB를 플러시하지 않아도 된다는 장점이 있다.
컨텍스트 스위칭은 CPU가 사용 중인 프로세스를 다른 프로세스로 변환하는 과정이다. 각 프로세스는 고유한 메모리 공간을 갖기 때문에 프로세스를 전환하는 과정에서 이전 프로세스와 새로운 프로세스간의 충돌이 발생하지 않게 하기 위해서 TLB를 비워야 한다. 이 과정을 TLB Flush라고 한다.
TLB Flush가 필요한 이유