tmp

JunHyeok Kim·2024년 5월 21일
0

CR3 레지스터는 x86 아키텍처에서 중요한 역할을 하는 레지스터로, 문맥 전환(context switch) 시 프로세스 간의 페이지 디렉토리 베이스 주소를 저장합니다. 이 레지스터는 가상 메모리 관리에서 핵심적인 역할을 하며, 특히 다음과 같은 방식으로 쓰레드 간 문맥 전환을 가능하게 합니다:

CR3 레지스터와 문맥 전환

  1. 현재 실행 중인 쓰레드의 상태 저장:

    • 현재 실행 중인 쓰레드의 상태를 저장할 때, CPU는 일반 레지스터, 프로그램 카운터, 상태 레지스터 등을 저장합니다. 이 상태 정보에는 CR3 레지스터의 값도 포함됩니다.
    • CR3 레지스터는 현재 쓰레드 또는 프로세스의 페이지 디렉토리 베이스 주소를 포함하고 있습니다. 이 주소는 현재 쓰레드가 사용하는 가상 메모리와 물리 메모리 간의 매핑 정보를 가리킵니다.
  2. 새로운 쓰레드의 상태 로드:

    • 새로운 쓰레드가 실행되기 전에, CPU는 이 쓰레드의 상태를 복원합니다. 이 과정에서 저장된 CR3 레지스터의 값이 복원됩니다.
    • 복원된 CR3 레지스터의 값은 새로운 쓰레드의 페이지 디렉토리 베이스 주소를 가리킵니다. 이 주소는 새로운 쓰레드가 사용하는 가상 메모리와 물리 메모리 간의 매핑 정보를 가리킵니다.
  3. 가상 메모리 공간의 전환:

    • CR3 레지스터의 값이 변경됨으로써, CPU는 새로운 페이지 디렉토리를 사용하여 가상 주소를 물리 주소로 변환합니다.
    • 이 변경은 전체 가상 메모리 공간을 새로운 쓰레드의 메모리 맵으로 전환합니다. 결과적으로, 각 쓰레드는 자신만의 가상 메모리 공간을 가지게 되어, 메모리 접근이 격리됩니다.

문맥 전환의 예

  1. 현재 쓰레드의 문맥 저장:

    • 현재 쓰레드 A가 실행 중일 때, 운영 체제는 이 쓰레드의 레지스터 상태와 CR3 값을 저장합니다.
    • 저장된 CR3 값은 쓰레드 A의 페이지 디렉토리 베이스 주소입니다.
  2. 새로운 쓰레드의 문맥 로드:

    • 새로운 쓰레드 B를 실행하기 위해, 운영 체제는 쓰레드 B의 저장된 상태를 복원합니다.
    • 여기에는 쓰레드 B의 CR3 값도 포함됩니다. 이 값은 쓰레드 B의 페이지 디렉토리 베이스 주소입니다.
  3. 가상 메모리 공간 전환:

    • CR3 레지스터가 쓰레드 B의 페이지 디렉토리 베이스 주소로 설정되면, CPU는 이제 쓰레드 B의 가상 주소 공간을 사용하여 메모리 접근을 수행합니다.
    • 결과적으로, 쓰레드 A의 가상 메모리 공간에서 쓰레드 B의 가상 메모리 공간으로 전환됩니다.

요약

CR3 레지스터는 문맥 전환 시 가상 메모리 주소 공간을 전환하는 데 필수적인 역할을 합니다. 각 쓰레드 또는 프로세스는 고유의 페이지 디렉토리를 가지고 있으며, CR3 레지스터의 값을 변경함으로써 CPU는 현재 실행 중인 쓰레드의 가상 메모리 맵을 전환합니다. 이는 쓰레드 간 메모리 격리를 유지하고, 각 쓰레드가 자신만의 독립적인 가상 주소 공간을 사용할 수 있게 합니다.

0개의 댓글