- 가상 메모리 시리즈 모아 보기-
https://microelectronics.tistory.com/99
지금까지 가상메모리 시리즈를 다루면서 MMU에 대해 언급하지 않았다.
이제 가상메모리에 대한 기본적인 개념을 다 익혔으니, 해당 동작을 물리적으로 구현하는 장치인 MMU에 대해 알아보자.
MMU(메모리 관리 유닛)
MMU(Memory Management Unit)는 CPU와 물리 메모리 사이에서 가상 주소를 물리 주소로 변환하는 하드웨어 장치이다. 가상 메모리 시스템에서 메모리 접근을 관리하고, 프로그램들이 각자 독립적인 가상 주소 공간을 사용할 수 있도록 한다.
즉, 지금까지 다룬 가상메모리와 관련된 동작 일체를 책임지는 각각의 코어 내부에 위치한 하드웨어 이다.
1. MMU의 주요 기능
- 주소 변환 (VtoP, Virtual to Physical Translation)
- 모든 메모리 접근 시 가상 주소를 물리 주소로 변환한다.
- 하드웨어적으로 처리되므로 빠른 성능이 보장된다.
- 메모리 보호 (Memory Protection)
- 각 프로세스가 허용된 메모리 영역만 접근할 수 있도록 하여, 메모리 손상 및 보안 문제를 방지한다.
예를 들어, 코드 영역은 읽기 및 실행만 가능하도록 설정하고, 데이터 영역은 읽기 및 쓰기 가능하도록 설정할 수 있다.
- 접근 권한 검사 (Access Permission Check)
- 페이지 테이블의 각 엔트리에는 메모리 접근 권한 정보가 포함된다. 예를 들어, 읽기 가능(Read), 쓰기 가능(Write), 실행 가능(Execute) 권한을 설정할 수 있다.
- 사용자 모드와 커널 모드 구분
- MMU는 메모리 접근 시 현재 CPU 모드(사용자 모드 또는 커널 모드)를 고려하여 접근을 제어한다. 사용자 모드에서는 커널 영역에 접근 할 수 없도록 설정도니다.
- 접근 권한 검사 (Access Permission Check)
- 각 프로세스가 허용된 메모리 영역만 접근할 수 있도록 하여, 메모리 손상 및 보안 문제를 방지한다.
- 페이지 폴트 처리 (Page Fault Handling)
- 요청된 가상 페이지가 메인 메모리에 없을 경우 페이지 폴트를 발생시킨다.
- 캐시 관리 (Cache Management)
- TLB(Translation Lookaside Buffer)를 통해 주소 변환 정보를 캐싱하여 변환 속도를 높인다.
2. MMU의 주요 구성 요소
- 페이지 테이블 베이스 레지스터 (PTBR)
- 현재 프로세스의 페이지 테이블 위치를 가리키는 레지스터.
- TLB (Translation Lookaside Buffer)
- 최근에 사용된 페이지 테이블 엔트리를 캐싱하는 고속의 연관 메모리.
- TLB 히트 시 페이지 테이블 접근을 생략할 수 있다.
- 주소 변환 로직
- 가상 주소를 물리 주소로 변환하는 하드웨어 로직으로, 다단계 페이지 테이블 탐색 기능을 포함한다.
- 보호 및 접근 제어 로직
- 메모리 접근 권한을 확인하고, 불법적인 메모리 접근을 차단한다.
MMU와 컨텍스트 스위칭
1. 기존의 문제점
컨텍스트 스위칭이 발생할 때, 운영체제는 페이지 테이블 포인터를 적절한 페이지 테이블(또는 페이지 디렉토리)로 재설정해야 한다. 이 과정에서 페이지 테이블의 모든 항목이 변경되므로, TLB의 모든 항목을 무효화해야 한다. 이로 인해 TLB 히트율이 급격히 떨어지며, TLB가 다시 채워질 때까지 평균 메모리 접근 시간이 크게 증가한다.
2. 컨텍스트 번호 레지스터를 사용한 개선 (Rapid Context-Switching)
일부 MMU는 컨텍스트 번호 레지스터를 포함하여, 이 레지스터의 내용과 가상 페이지 번호를 결합하여 TLB를 조회한다. 컨텍스트 번호는 TLB 항목이 캐싱될 때의 태그 필드에 포함된다. 따라서 컨텍스트 스위치 시 컨텍스트 번호 레지스터와 페이지 테이블 포인터를 모두 재설정하면, 다른 컨텍스트의 TLB 항목은 더 이상 일치하지 않으므로 TLB를 플러시할 필요가 없다. TLB가 여러 컨텍스트에 대한 매핑을 충분히 캐싱할 수 있다면, 컨텍스트 스위치의 성능 저하를 최소화할 수 있다.
MMU와 캐시의 상호작용
1. MMU와 캐시의 통합 방식
TLB와 캐시는 데이터와 주소 접근에 관여하며, 이들을 어떻게 통합할지에 따라 성능이 크게 달라질 수 있다. TLB와 캐시를 통합하는 두 가지 주요 방식은 다음과 같다:
- 물리적 캐시(Physical Cache): 캐시를 MMU와 메인 메모리 사이에 배치하여 물리 주소 기반으로 사용할 수 있다. 이 경우 컨텍스트 스위치가 발생해도 캐시의 내용이 영향을 받지 않으므로, 캐시 미스 비율이 증가하지 않는다. 다만, MMU 변환 후에야 캐시 접근이 가능하므로 평균 메모리 접근 시간이 약간 증가할 수 있다.
- 가상 캐시(Virtual Cache): 캐시를 CPU와 MMU 사이에 배치하여 가상 주소로 작동하도록 하면, 캐시 미스 시에만 VPN-to-PPN 변환 비용이 발생한다. 그러나 컨텍스트 스위치가 발생하면 가상 메모리의 내용이 변경되므로, OS는 캐시의 모든 항목을 무효화해야 한다. 이로 인해 캐시 미스 비율이 높아져, 성능에 큰 영향을 미칠 수 있다.
컨텍스트 스위치를 고려하지 않고 설계를 한다면, 프로세스 끼리의 데이터 충돌이 발생할 것이다.
2. Virtually Indexed, Physically Tagged (VIPT) 캐시
위 두 접근법의 장점을 종합하여, 병렬로 MMU 변환과 캐시 접근을 하는 아이디어가 있다.
VIPT 캐시는 가상 주소를 사용하여 캐시를 인덱싱하고, 물리 주소 태그로 데이터 일치 여부를 확인하는 방식이다. 이 방식은 가상 캐시의 빠른 조회 속도와 물리적 캐시의 보호 기능을 결합한 형태로, 다음과 같은 절차로 동작한다:
- 가상 주소를 사용하여 캐시 인덱싱: CPU가 출력한 가상 주소의 페이지 오프셋을 사용해 캐시 라인을 조회한다. 페이지 오프셋은 가상 주소와 물리 주소에서 동일하기 때문에, 캐시를 빠르게 조회할 수 있다.
- 동시에 TLB에서 물리 주소 변환 수행: 가상 페이지 번호를 사용해 TLB에서 물리 페이지 번호를 얻는다. 이 과정은 캐시 조회와 동시에 수행된다.
- 캐시 태그 비교: 캐시에서 읽어온 태그(물리 주소)와 TLB에서 얻은 물리 주소를 비교해 데이터가 일치하는지 확인한다. 이 과정에서 태그가 맞지 않으면 캐시 미스가 발생한다.
3. VIPT 캐시의 장점과 단점
장점:
- 빠른 캐시 접근: 가상 주소를 이용해 즉시 캐시를 조회할 수 있으므로, 물리적 캐시에 비해 빠른 접근이 가능하다.
- 안전성 보장: 물리 주소 태그를 사용해 데이터 일치 여부를 확인하므로, 가상 메모리 보호 기능을 유지할 수 있다.
단점:
- 캐시 크기의 제한: 페이지 오프셋 크기(예: 12비트)를 넘지 않는 범위에서 캐시 인덱싱이 이루어져야 한다. 예를 들어, 4KB 페이지에서는 12비트로 인덱싱할 수 있으므로, 최대 4KB의 데이터를 인덱싱할 수 있다.
- Associativity(연관도) 증가 필요: VIPT 캐시의 용량을 늘리기 위해서는 Associativity(예: 8-way) 캐시를 사용해야 한다. 이렇게 하면 더 많은 데이터를 저장할 수 있다. (아래에서 자세히 설명)
캐시 크기 제한 극복
캐시 용량을 확장하려면 캐시 라인의 수를 늘리거나 블록 크기를 증가시켜야 한다. 그러나 VIPT를 사용하기 위해서는, 라인 번호가 가상 주소의 페이지 오프셋에 들어가야 하므로, 라인 수나 블록 크기를 무작정 늘릴 수는 없다. 따라서 캐시 연관성(Associativity)을 높이는 것이 용량 확장의 현실적인 방법이다.
예를 들어, 4KB 페이지를 사용하는 경우, 인덱스 가능한 범위는 4KB에 해당하지만, 8-way 연관 캐시를 사용하면 최대 32KB까지 데이터를 저장할 수 있다. 이는 각 연관도마다 동일한 인덱스를 사용하되, 다른 태그를 사용하는 방식으로 구현된다.
결론
MMU는 가상 메모리 시스템에서 가상 주소를 물리 주소로 변환하고 메모리 접근을 관리하는 하드웨어 장치이다.
컨텍스트 스위칭 시 성능 저하를 최소화하기 위해 컨텍스트 번호 레지스터를 사용할 수 있다.
VIPT 캐시는 가상 주소로 캐시를 인덱싱하고, 물리 주소 태그로 데이터의 일치 여부를 확인하는 방식으로, 성능과 보호 기능의 균형을 맞춘다. 다만, 페이지 크기로 인한 인덱스 비트 제한과 큰 캐시를 위한 높은 연관도 필요 등의 단점이 있다. VIPT 캐시는 현대 프로세서에서 가장 일반적인 L1 캐시 구조로 사용된다.
Reference
'Computer Architecture > Virtual Address & Cache' 카테고리의 다른 글
메모리 계층 구조(Memory Hierarchy)와 캐시 (0) | 2024.11.01 |
---|---|
가상 메모리 시리즈 요약 (0) | 2024.10.31 |
Multi-level Page Tables(다단계 페이지 테이블) (0) | 2024.10.29 |
TLB(Translation Lookaside Buffer)와 TLB 미스 (0) | 2024.10.28 |
Virtual Memory(가상 메모리)의 컨텍스트와 메모리 관리 (0) | 2024.10.27 |
댓글