CR3 레지스터는 x86 아키텍처에서 중요한 역할을 하는 레지스터로, 문맥 전환(context switch) 시 프로세스 간의 페이지 디렉토리 베이스 주소를 저장합니다. 이 레지스터는 가상 메모리 관리에서 핵심적인 역할을 하며, 특히 다음과 같은 방식으로 쓰레드 간 문맥 전환을 가능하게 합니다:
CR3 레지스터와 문맥 전환
-
현재 실행 중인 쓰레드의 상태 저장:
- 현재 실행 중인 쓰레드의 상태를 저장할 때, CPU는 일반 레지스터, 프로그램 카운터, 상태 레지스터 등을 저장합니다. 이 상태 정보에는 CR3 레지스터의 값도 포함됩니다.
- CR3 레지스터는 현재 쓰레드 또는 프로세스의 페이지 디렉토리 베이스 주소를 포함하고 있습니다. 이 주소는 현재 쓰레드가 사용하는 가상 메모리와 물리 메모리 간의 매핑 정보를 가리킵니다.
-
새로운 쓰레드의 상태 로드:
- 새로운 쓰레드가 실행되기 전에, CPU는 이 쓰레드의 상태를 복원합니다. 이 과정에서 저장된 CR3 레지스터의 값이 복원됩니다.
- 복원된 CR3 레지스터의 값은 새로운 쓰레드의 페이지 디렉토리 베이스 주소를 가리킵니다. 이 주소는 새로운 쓰레드가 사용하는 가상 메모리와 물리 메모리 간의 매핑 정보를 가리킵니다.
-
가상 메모리 공간의 전환:
- CR3 레지스터의 값이 변경됨으로써, CPU는 새로운 페이지 디렉토리를 사용하여 가상 주소를 물리 주소로 변환합니다.
- 이 변경은 전체 가상 메모리 공간을 새로운 쓰레드의 메모리 맵으로 전환합니다. 결과적으로, 각 쓰레드는 자신만의 가상 메모리 공간을 가지게 되어, 메모리 접근이 격리됩니다.
문맥 전환의 예
-
현재 쓰레드의 문맥 저장:
- 현재 쓰레드 A가 실행 중일 때, 운영 체제는 이 쓰레드의 레지스터 상태와 CR3 값을 저장합니다.
- 저장된 CR3 값은 쓰레드 A의 페이지 디렉토리 베이스 주소입니다.
-
새로운 쓰레드의 문맥 로드:
- 새로운 쓰레드 B를 실행하기 위해, 운영 체제는 쓰레드 B의 저장된 상태를 복원합니다.
- 여기에는 쓰레드 B의 CR3 값도 포함됩니다. 이 값은 쓰레드 B의 페이지 디렉토리 베이스 주소입니다.
-
가상 메모리 공간 전환:
- CR3 레지스터가 쓰레드 B의 페이지 디렉토리 베이스 주소로 설정되면, CPU는 이제 쓰레드 B의 가상 주소 공간을 사용하여 메모리 접근을 수행합니다.
- 결과적으로, 쓰레드 A의 가상 메모리 공간에서 쓰레드 B의 가상 메모리 공간으로 전환됩니다.
요약
CR3 레지스터는 문맥 전환 시 가상 메모리 주소 공간을 전환하는 데 필수적인 역할을 합니다. 각 쓰레드 또는 프로세스는 고유의 페이지 디렉토리를 가지고 있으며, CR3 레지스터의 값을 변경함으로써 CPU는 현재 실행 중인 쓰레드의 가상 메모리 맵을 전환합니다. 이는 쓰레드 간 메모리 격리를 유지하고, 각 쓰레드가 자신만의 독립적인 가상 주소 공간을 사용할 수 있게 합니다.