물리적 주소란 무엇입니까?
물리적 주소가 무엇인지, 가상 주소가 무엇인지 살펴보겠습니다.
물리적 주소: 주소 지정 버스에 배치된 주소입니다. 읽히면 회로는 해당 주소의 각 비트 값에 따라 해당 주소의 물리적 스토리지에 있는 데이터를 데이터 버스에 넣어 전송합니다. 쓰기인 경우 회로는 이 주소의 각 비트 값에 따라 해당 주소의 물리적 메모리를 데이터 버스의 내용에 배치합니다. 물리적 메모리는 바이트 (8 비트) 단위로 주소 지정됩니다.
가상 주소: 프로그램에 모두 사용되는 4G 가상 주소 공간의 주소입니다.
CPU 레지스터의 페이징 플래그 위치가 배치된 경우 메모리 작업을 수행하는 시스템 명령을 수행할 때 CPU 는 페이지 디렉토리와 페이지 테이블의 정보에 따라 가상 주소를 물리적 주소로 자동 변환하여 명령을 완료합니다. 예를 들어 mov eax, 004227b8h 는 주소 004227b8h 의 값을 레지스터에 할당하는 어셈블리 코드이며 가상 주소입니다. CPU 가 이 코드 행을 실행할 때 레지스터의 페이징 플래그 위치가 이미 배치되어 가상 주소를 물리적 주소로 자동 변환하고 물리적 주소로 값을 취하여 명령을 완료하는 것을 발견했습니다. 인텔 CPU 의 경우 페이징 플래그 비트는 레지스터 CR0 의 3 1 비트, 1 은 페이징 사용, 0 은 페이징 사용 안 함을 의미합니다. 초기화된 Win2k 의 경우 CR0 을 관찰한 결과 3 1 비트가 1 인 것으로 나타났습니다. 설명 Win2k 는 페이지 나누기를 사용합니다.
페이징 메커니즘을 사용하면 4G 의 주소 공간이 고정된 크기의 페이지로 나뉘어지며, 각 페이지는 물리적 메모리에 매핑되거나 하드 디스크의 스왑 파일에 매핑되거나 아무것도 매핑되지 않습니다. 일반 프로그램의 경우 4G 주소 공간의 극히 일부만이 물리적 메모리에 매핑되며, 대부분은 아무것도 매핑하지 않습니다. 물리적 메모리도 주소 공간을 매핑하기 위해 페이징됩니다. 32 비트 Win2k 의 경우 페이지 크기는 4K 바이트입니다. CPU 가 가상 주소를 물리적 주소로 변환하는 데 사용하는 정보는 페이지 디렉토리 및 페이지 테이블이라는 구조에 저장됩니다.
물리적 메모리 페이징. 물리적 페이지 크기는 4K 바이트이고 0 번째 물리적 페이지는 물리적 주소 0x00000000 으로 시작합니다. 페이지 크기가 4KB 인 0x 1000 바이트이므로 1 페이지는 물리적 주소 0x0000 1000 으로 시작합니다. 2 페이지는 물리적 주소 0x00002000 으로 시작합니다. 페이지 크기가 4KB 이기 때문에 물리적 페이지 주소를 지정하기 위해 32 비트 주소의 높이 20 비트만 필요하다는 것을 알 수 있습니다.
페이지 테이블, 페이지 테이블의 크기는 4K 바이트이며 하나의 물리적 페이지에 배치됩니다. 4 바이트 페이지 테이블 항목 1024 개로 구성됩니다. 페이지 테이블 항목의 크기는 4 바이트 (32 비트) 이므로 한 페이지 테이블에 1024 개의 페이지 테이블 항목이 있습니다. 페이지 테이블의 각 내용 (각 4 바이트, 32bit) 높이 20bit 는 물리적 페이지의 물리적 주소를, 낮음 12bit 는 일부 로고를 배치합니다.
페이지 목차, 4K 바이트 크기의 페이지 목차가 하나의 물리적 페이지에 배치됩니다. 1024 4 바이트 페이지 카탈로그 항목으로 구성되어 있습니다. 페이지 디렉토리 항목의 크기는 4 바이트 (32 비트) 이므로 한 페이지 디렉토리에 1024 개의 페이지 디렉토리 항목이 있습니다. 페이지 디렉토리에 있는 각 항목의 내용 (각 4 바이트) 은 20bit 높이 페이지 테이블의 물리적 주소 (페이지 테이블이 물리적 페이지에 있음), 12bit 아래로 일부 플래그입니다.
X86 시스템의 경우 페이지 디렉토리의 물리적 주소는 CPU 의 CR3 레지스터에 있습니다.
CPU 는 가상 주소를 물리적 주소로 변환합니다.
4 바이트 (32bit) 크기의 가상 주소로, 물리적 주소를 찾는 정보가 포함되어 있습니다. 두 번째부터 세 번째1비트까지의 10 비트 (최고1) 의 세 부분으로 나뉩니다 물리적 주소로 변환할 가상 주소의 경우 CPU 는 먼저 CR3 의 값을 기준으로 페이지 디렉토리가 있는 물리적 페이지를 찾습니다. 그런 다음 가상 주소의 22 위에서 3 위1비트까지의 10 비트 (최고 10 비트) 값을 기준으로 해당 페이지 카탈로그 항목 (PDE), PDE, PDE, 페이지 테이블의 물리적 주소를 사용하여 가상 주소의 12 비트에서 2 1 비트까지의 값을 기준으로 해당 페이지 테이블 항목 (PTE) 을 찾습니다. PTE, 페이지 테이블 항목에는 가상 주소에 해당하는 물리적 페이지의 물리적 주소가 포함됩니다. 마지막으로 가상 주소의 가장 낮은 12 비트, 즉 페이지 내 오프셋을 해당 물리적 페이지의 물리적 주소에 추가하여 가상 주소에 해당하는 물리적 주소를 얻습니다.
페이지 디렉터리에는 1024 개의 항목이 있으며, 가상 주소가 가장 높은 10 비트는 1024 개의 항목을 인덱싱할 수 있습니다 (2 의 10 제곱은/kloc 과 같음) 한 페이지 테이블에도 1024 개의 항목이 있으며, 가상 주소의 가운데 부분에 있는 10 비트는 정확히 1024 개 항목의 인덱스입니다. 가장 낮은 가상 주소 12bit(2 의 65438 제곱 +02 는 4096 임) 는 페이지 내 오프셋으로 물리적 페이지의 각 바이트인 4KB 만 인덱스화할 수 있습니다.
가상 주소를 물리적 주소로 변환하는 계산은 프로세서가 CR3 을 통해 현재 페이지 디렉토리가 있는 물리적 페이지를 찾아 가상 주소의 높이 10bit 를 가져온 다음 10bit 를 오른쪽으로 2bit 이동하는 것입니다 가상 주소에 해당하는 페이지 테이블이 있는 물리적 페이지를 찾아 가상 주소의 12 비트에서 2 1 비트 10 비트까지 찾은 다음 10 을 오른쪽으로 2 비트 이동합니다 PTE(4
0x0000000-0xffffffff 의 범위를 4GB 로 지정할 수 있는 32 비트 포인터입니다. 즉, 32 비트 포인터는 전체 4GB 주소 공간의 각 바이트를 처리할 수 있습니다. 한 페이지 테이블 항목은 4K 주소 공간과 물리적 메모리의 매핑을 담당하고, 1024 의 페이지 테이블 항목은 1024*4k=4M 주소 공간의 매핑을 담당합니다. 페이지 테이블에 해당하는 페이지 디렉토리 항목입니다. 한 페이지 디렉토리에는 1024 개의 항목이 있으며 1024 개의 페이지 테이블에 해당하며 각 페이지 테이블은 4M 의 주소 공간 매핑을 담당합니다. 1024 페이지 테이블은 1024*4M=4G 의 주소 공간 매핑을 담당합니다. 프로세스에는 페이지 디렉토리가 있습니다. 따라서 페이지 디렉토리와 페이지 테이블은 4G 주소 공간의 각 페이지와 물리적 메모리 간의 매핑을 보장합니다.
각 프로세스에는 0x00000000-0xFFFFFFFF 부터 고유한 4G 주소 공간이 있습니다. 각 프로세스마다 고유한 페이지 카탈로그 및 페이지 테이블 세트를 통해. 각 프로세스에는 고유한 페이지 디렉토리와 페이지 테이블이 있기 때문에 각 프로세스의 주소 공간이 매핑하는 물리적 메모리는 다릅니다. 두 프로세스 (모두 물리적 메모리 매핑이 있는 경우) 의 동일한 가상 주소의 값은 일반적으로 서로 다른 물리적 페이지에 해당하므로 다릅니다.
4G 주소 공간 중 낮은 0x00000000-0x7FFFFFFF 는 사용자 주소 공간이고 4G 주소 공간 중 높은 2G 입니다.
0x80000000-0xFFFFFFFF 는 시스템 주소 공간입니다. 시스템 주소 공간에 액세스하려면 프로그램에 ring0 권한이 필요합니다.