컴퓨터 사이언스

TLB

woohap 2024. 11. 7. 20:15

TLB (주소 변환 캐시)

자주 참조되는 가상-물리 주소 변환 정보를 저장하는 하드웨어 캐시 
주소 변환을 빠르게 하기 위해서 TLB를 사용한다.
TLB는 칩의 메모리 관리부(MMU)의 일부이다. - 프로세싱 코어와 가까운 곳에 위치

TLB를 사용하지 않는 경우

1. 가상 주소 생성
2. 가상 주소를 물리 주소로 변환하기 위해 메인 메모리에 있는 페이지 테이블 조회
    메모리 참조 1회
3. 데이터 접근 : 변환된 물리 주소를 사용하여 실제 데이터를 메모리에서 읽는다.
    메모리 참조 2회 

TLB를 사용하는 경우

1. 가상 주소 생성
2. TLB 조회 : TLB에 해당 가상 주소의 페이지 테이블 엔트리가 있는지 확인
    [TLB 히트]
    - 페이지 테이블에 대한 메모리 접근 없이 물리 주소를 즉시 얻음 
    - 추가 메모리 참조 없음
    [TLB 미스]
    - 메인 메모리에서 페이지 테이블을 조회해야 하므로 메모리 참조 1회 발생
    - 이후 해당 엔트리를 TLB에 저장 
    - 데이터 접근 : 물리 주소를 사용하여 메모리에서 데이터를 읽는다.
    TLB 히트시 - 메모리 참조 1회
    TLB 미스시 - 메모리 참조 2회

메모리 참조 횟수를 최소화해야 하는 이유

메모리 접근은 CPU 캐시에 비해 상대적으로 오래 걸림 
- 페이지 테이블은 메모리에 저장되기 때문에, 페이지 테이블을 참조할 때마다 메모리에 접근
- 현대 운영체제는 다단계 페이지 테이블 구조를 이루고 있어,
  최종 물리 주소를 얻기 위해 여러 번의 메모리 참조가 필요하므로 지연 발생
- 페이지 테이블 접근을 위한 메모리 읽기 작업은 엄청난 성능 저하를 유발
  즉, CPU가 데이터 접근할 때(모든 load/store 명령어)마다 페이지 테이블에 접근하게 됨 

TLB 공간 지역성으로 성능을 개선할 수 있음

배열의 연속적인 주소가 동일한 페이지에 있는 경우, TLB에서 첫 번째 접근할 때만
TLB 미스가 발생하고, 이후 모든 TLB 히트 발생하여 성능 개선 가능 

***** TLB 크기에 따른 성능
TLB 크기가 너무 크면, 검색 시간이 길어짐
너무 작으면 TLB 미스율이 높아짐 

***** 페이지 크기는 TLB 효율성에 매우 중요한 역할을 함 
페이지 크기가 크면, 공간 지역성으로 인해 TLB 히트율 증가
하나의 TLB 엔트리로 더 많은 물리 메모리 영역 참조 가능 
단, 페이지가 너무 크면, 내부 단편화 발생 

TLB 시간 지역성으로 인해 TLB 히트율이 높아진다.

TLB의 성공 여부는 프로그램의 공간 지역성과 시간 지역성 존재 여부에 달려 있음.
프로그램이 공간 혹은 시간 지역성을 보이는 경우
TLB 사용 효과가 더욱 두드러지게 나타날 것이다.

TLB의 구성

TLB는 32, 64, 128개의 엔트리를 가지며, 
완전 연관(fully associative) 방식으로 설계됨 
완전 연관 방식에서 변환 정보는 TLB 내에 어디든 위치할 수 있으며, 
원하는 변환 정보를 찾는 검색은 TLB 전체에서 병렬적으로 수행된다.
// TLB 구성 
VPN | PFN | 다른비트들 
valid bit - 유효한 변환 정보를 가지고 있는지 여부를 나타냄
protection bit - 페이지가 어떻게 접근될 수 있는지를 나타냄 
주소 공간 식별자(ACID) - 프로세스나 스레드의 가상 주소 공간을 구분하기 위한 식별자 
dirty bit - 페이지가 수정 되었는지 여부를 나타냄
page mask - 여러 개의 페이지 크기를 지원할 때 사용

TLB 문제점

TLB를 사용하면 프로세스 간 문맥 교환 시, 새로운 문제가 등장함 

**
TLB에 있는 가상 주소와 실제 주소 간의 변환 정보는 그것을 탑재시킨 프로세스에서만 유효
새로운 프로세스에서는 이전의 프로세스의 변환 정보를 사용하지 않도록 주의해야 함 

TLB가 정확하고 효율적으로 멀티 프로세스 간의 가상화를 지원하기 위해 추가적인 기능이 필요하다.
문맥 교환을 수행할 때, 다음 프로세스가 실행되기 전에 기존 TLB 내용을 비우는 것 

소프트웨어 기반 시스템의 경우, 특별한 하드웨어 명령어를 실행하여 비운다.
하드웨어로 관리되는 TLB는 페이지 테이블 레지스터가 변경될 때 비우기 가능 
→ 모든 valid bit를 0으로 설정하면 됨 
이를 통해 잘못된 변환 정보를 사용하는 상황을 방지

**
이 경우 문맥교환을 실행할 때마다. TLB 미스가 발생함 

일부 시스템에서는 문맥 교환이 발생하더라도 TLB의 내용을 보존할 수 있는 하드웨어 기능을 추가 
TLB 내에 주소 공간 식별자 필드(ACID)를 추가하는 것 → 프로세스 별 TLB 변환 정보 구분
즉, TLB를 비우지 않고 기존 TLB 엔트리를 그대로 유지할 수 있도록 함 

TLB는 동일한 물리 페이지를 참조하는 경우, 여러 프로세스가 해당 페이지를 공유할 수 있다. 
→ ASID를 사용하여 각 프로세스가 같은 물리 페이지를 참조하더라도 이를 프로세스별로 구분 가능

→ 메모리 부하를 줄임

'컴퓨터 사이언스' 카테고리의 다른 글

캐시  (0) 2024.11.11
멀티 레벨 페이지 테이블 (OSTEP 20장)  (0) 2024.11.08
가상 메모리 - 요약  (0) 2024.11.05
문맥교환  (0) 2024.11.02
인터럽트  (0) 2024.11.01