CPU는 어떤 물리적 주소가 어떤 가상 주소에 매핑되는지 어떻게 알 수 있나요?

CPU는 어떤 물리적 주소가 어떤 가상 주소에 매핑되는지 어떻게 알 수 있나요?

제가 이해한 바에 따르면, 각 프로세스는 물리적 주소가 아닌 가상 주소를 통해 메모리에 접근하고, CPU는 이러한 가상 주소를 MMU 유닛을 통해 물리적 주소로 변환하는 역할을 담당하며, 둘 이상의 프로세스가 동일한 가상 주소를 가질 수 있습니다.

그러면 우리는 이렇게 말합니다.프로세스 A가상 주소에 접근을 시도하고 있으며 12345,프로세스 B가상 주소에 접근을 시도하고 있습니다 12345.

MMU는 어떻게 각 프로세스의 가상 주소를 물리적 주소로 변환합니까? 가상 주소를 물리적 주소에 매핑하는 매핑 테이블을 각 프로세스에 제공합니까(CPU는 "프로세스"가 무엇인지조차 알지 못하므로 MMU는 책임은 어떤 명령이 어떤 프로세스에 속하는지 신경 쓰지 않고 맹목적으로 명령을 실행하는 것이며 "프로세스"는 운영 체제 개념 일뿐입니다)?

답변1

이것메모리 관리 유닛가상 주소를 물리적 주소로 변환하는 방법을 설명하는 표에 액세스하세요. (물리적 주소를 가상 주소로 변환할 필요가 없습니다. 동일한 물리적 주소는 여러 가상 주소를 통해 접근할 수 있거나 매핑 해제가 가능하기 때문에 일반적으로 불가능합니다.) 이 표의 레이아웃은 CPU 아키텍처에 따라 다르지만 일반적인 원칙은 다음과 같습니다. 항상 동일합니다. 테이블의 물리적 주소를 포함하는 CPU 레지스터가 있고, 여기에는 다른 테이블의 물리적 주소 등이 포함됩니다(기존 아키텍처의 총 2~4개 레벨). 테이블에는 데이터가 있는 물리적 주소가 포함되어 있습니다. 각 레벨에서 사용되는 테이블의 요소는 가상 주소의 특정 비트에 의해 결정됩니다.

MMU는 운영 체제 프로세스 자체에 대한 지식이 없습니다. CPU가 다른 프로세스 실행으로 전환할 때, 즉컨텍스트 스위치이런 일이 발생하면 필요에 따라 MMU 테이블을 업데이트하는 것이 운영 체제의 컨텍스트 전환 코드 작업입니다. 사실 모든 Unix 시스템은 각 프로세스의 메모리에 테이블 복사본을 보관하고 현재 프로세스의 최상위 테이블을 가리키도록 MMU 레지스터를 업데이트하기만 하면 됩니다.

실제로 MMU에는 운영 체제 프로세스를 관리하는 부분이 있습니다.TLB. MMU 테이블에서 항목을 조회하는 데는 여러 메모리 액세스가 포함되므로 비용이 많이 듭니다. TLB는 이러한 조회의 캐시입니다. 컨텍스트 전환 시 운영 체제는 새 프로세스에 대한 매핑이 다르기 때문에 TLB를 무효화(즉, 모든 캐시 항목 삭제)해야 합니다. 많은 아키텍처에서는 운영 체제가 각 MMU 테이블 항목에 "이 항목은 프로세스 N에 속합니다."라는 표시를 배치할 수 있습니다. TLB 항목에 현재 프로세스 번호가 아닌 프로세스 번호가 포함되어 있으면 해당 항목을 건너뜁니다. CPU 레지스터에는 컨텍스트 전환 코드에 의해 업데이트되는 현재 프로세스 번호가 포함되어 있습니다. 이 메커니즘은 TLB가 여러 프로세스에 대한 정보를 동시에 포함할 수 있어 이러한 프로세스 간에 전환할 때 성능을 향상시킬 수 있음을 의미합니다. 일반적으로 모든 운영 체제 프로세스 ID를 저장하는 데 필요한 것보다 N을 저장하는 데 사용할 수 있는 비트가 적기 때문에 N은 프로세스 ID가 아니라 이러한 목적으로 운영 체제에서 생성한 숫자이며 사용되는 경우 시간이 지남에 따라 변경됩니다.

답변2

Linux에서 커널은 5단계 페이지 테이블을 유지합니다(CPU 기능에 관계없이 추가 수준은 컴파일 타임에 제거됩니다). 최상위 수준은 페이지 전역 디렉터리이며 각 프로세스에는 자체 디렉터리가 있습니다.pgd존재하다mm_struct. 이런 방식으로 각 프로세스는 자체 매핑을 가질 수 있으므로 서로 다른 프로세스의 주소 12345는 서로 다른 물리적 주소를 가리킵니다.

CPU는 실제로 프로세스에 대해 알지 못하지만 프로세스를 지원하는 기능을 가지고 있습니다. x86형 CPU에는 다양한 작업 관련 기능이 있지만 무시되는 경우가 많습니다. 프로세스 스케줄링은 커널에 의해 관리되므로 자체적으로 페이지 테이블 변경 사항을 추적하고 작업 전환 시 새 프로세스 페이지 테이블로 전환하는 데 필요한 CPU 상태를 업데이트할 수 있습니다. x86 PC에서는 업데이트가 포함됩니다.CR3제어 레지스터는 페이지 디렉토리를 가리킵니다.

이것페이지 테이블 관리멜 고먼의 장Linux 가상 메모리 관리자 이해이 책은 좋은 개요를 제공합니다.

답변3

운영 체제의 모든 프로세스에는 PCB라는 데이터 구조가 있습니다.https://en.wikipedia.org/wiki/Process_control_block

PCB에는 무엇보다도 페이지 테이블, 메모리 제한, 세그먼트 테이블(운영 체제에서 사용하는 메모리에 따라 다름)에 대한 정보가 포함되어 있습니다. PCB는 프로세스당 하나의 프로세스별 데이터 구조입니다.

가상 메모리 주소는 + - 즉, 페이지 번호와 오프셋 12345으로 구분됩니다 . 각 프로세스에 대해 해당 페이지 테이블을 참조하여 물리적 메모리에서 동등한 페이지(프레임이라고 함)를 찾습니다.pageoffset12345

위의 사항을 고려하면 가상 주소가 동일하더라도 물리적 주소는 달라집니다.

각 페이지가 번역될 때 페이지 테이블을 조회하는 것은 매우 느릴 수 있으므로 MMU는 최근에 번역된 페이지의 캐시를 유지합니다. TLB(번역 참조 버퍼)라고 합니다.https://en.wikipedia.org/wiki/Translation_lookaside_buffer

관련 정보