티스토리 뷰
page table은 메모리에 저장되는데, CPU는 프로세스를 사용하기 위해 메모리에 두 번 접근해야 한다.
- 메모리에 저장된 page table에 접근
- 가상 주소를 물리 주소로 변환하기 위해 page table에 접근한다.
- page table 기반으로 실제 메모리에 접근
- page 테이블에서 얻은 물리 주소를 통해 실제 물리 메모리에 접근한다.
CPU에서 메모리에 접근하는 것은 시간이 소요되는 작업이다. 따라서 메모리에 두 번의 접근이 필요하면 상당한 시간이 소요된다. 이러한 문제를 해결하기 위해서는 메모리에 접근하는 횟수를 줄여야 한다.
1. TLB(Translation Lookaside Buffer)
1-1. TLB란?
TLB(Translation Lookaside Buffer)는 메모리 접근 횟수를 줄이고자 CPU가 접근한 페이지와 프레임 정보를 TLB에 저장한다. TLB는 (page, frame) 단위로 저장하고 있으며, 가상 주소 → 물리 메모리 주소로 변환할 때 속도를 높여주는 캐시 메모리이다.
CPU가 가상 주소 → 물리 메모리로 변환하기 위해서 다음 순서를 거친다.
- TLB 조회 및 히트 : CPU는 TLB에 먼저 접근하여 메모리 매핑에 필요한 정보가 있는지 확인한다. 매핑 정보(page, frame)가 있다면 이를 사용하여 바로 물리 메모리에 접근한다. → TLB 히트
- TLB 미스 : TLB에 필요한 매핑 정보가 없다면 물리 메모리에 저장된 page table에 접근한다. page table에서 얻은 매핑 정보를 TLB에 저장하고 가상 주소 → 물리 메모리 주소로 매핑하여 실제 메모리에 접근한다. → 메모리에 두 번의 접근이 필요
1-2. TLB의 구성
- 페이지 번호 : 가상 주소의 페이지를 식별하기 위한 번호
- 프레임 번호 : 페이지에 대응되는 물리 메모리의 주소를 식별하는 번호
2. TLB Flush
TLB 플러쉬란 CPU가 프로세스를 사용하면서 TLB에 저장한 (page, frame) 매핑 정보를 모두 지우는 과정이다. 주로 컨텍스트 스위칭 과정에서 TLB 플러쉬가 발생한다.
2-1. 컨텍스트 스위칭과 TLB Flush
컨텍스트 스위칭은 CPU가 사용 중인 프로세스를 다른 프로세스로 변환하는 과정이다. 각 프로세스는 고유한 메모리 공간을 갖기 때문에 프로세스를 전환하는 과정에서 이전 프로세스와 새로운 프로세스간에 충돌이 발생하지 않기 위해서 TLB를 비워야한다. 이 과정이 TLB Flush이다.
TLB Flush가 필요한 이유를 정리하자면 다음과 같다.
- 가상 주소 공간의 충돌 방지
- 각 프로세스는 독립된 메모리 공간을 사용한다. 컨텍스트 스위칭 과정에서 이전 프로세스로부터 사용된 주소 매핑 정보(TLB에 저장된.)가 현재 프로세스의 매핑 정보와 충돌이 되지 않기 위해 TLB를 초기화한다.
- 주소 변환의 일관성 유지
- 이전 프로세스의 매핑 정보가 TLB에 남아있다면 CPU가 현재 프로세스를 접근하는 과정에서 TLB에 접근할 때 이전 프로세스의 매핑 정보를 사용할 수도 있다. 따라서 TLB Flush가 필요하다.
따라서 컨텍스트 스위칭은 다음 과정을 거치게 된다.
- 현재 프로세스의 상태를 PCB에 저장한다.
- 타이머 인터럽트에의해 준비 상태로 돌아간 프로세스의 메타 데이터를 PCB에 저장한다.
- TLB Flush
- 이전 프로세스의 매핑 정보를 모두 지운다.
- 새로운 프로세스의 상태를 복원한다.
- 새로운 프로세스의 메타 데이터를 복원하고, CPU가 프로세스를 사용하는 과정에서 매핑 정보를 TLB에 저장한다.