물리적 주소 확장 - 가상 주소는 어떻게 작동하나요?

물리적 주소 확장 - 가상 주소는 어떻게 작동하나요?

저는 데비안 리눅스를 사용하고 있습니다. 플래그가 활성화된 32비트 아키텍처 시스템을 uname -m나타냅니다 . 예 . 장착된 RAM 용량은 6GB입니다.i686paegetconf LONG_BIT32

/proc/cpuinfo항목이 있습니다 address sizes : 40 bits physical, 48 bits virtual. 그러나 내 프로그램은 32비트 주소만 생성합니다. ( Address of x is 0xbfbaf5cc)

cat /proc/cpuinfo표시된 48비트 가상 주소와 C 프로그램에서 생성된 가상 주소 간의 관계를 이해할 수 없습니다. 전체 CPU 정보를 찾을 수 있습니다.여기.

누군가 이것을 설명할 수 있나요?

답변1

PAE가상 주소에 대해서는 아무것도 변경되지 않습니다. 이름에서 알 수 있듯이 물리적 주소에만 관련됩니다. 애플리케이션 프로그래머로서 PAE는 여러분을 위해 아무것도 변경하지 않습니다. 프로그램에는 여전히 32비트 주소 공간이 있으며 그 중 커널은 약 1비트를 차지합니다(Linux는 컴파일 옵션에 따라 사용자 공간에 1GB, 2GB 또는 3GB를 부여합니다). 더 큰 주소 공간을 원한다면 64비트 시스템이 필요합니다.

PAE의 목적은 커널이 4GB 이상의 물리적 RAM을 처리할 수 있도록 하는 것입니다. RAM을 모두 활용하려면 각각 최대 2GB(또는 1GB 또는 3GB)까지 매핑할 수 있는 여러 프로세스가 필요합니다.

PAE 모드에서 MMU 테이블은 3레벨 테이블을 사용하여 32비트 가상 주소를 40비트 물리적 주소에 매핑합니다. MMU 테이블이 2레벨 테이블을 사용하여 32비트 가상 주소를 매핑하는 비 PAE 모드와는 다릅니다. 32비트 물리적 주소).

"48비트 가상" 지정은 CPU의 기능을 나타냅니다. 이는 CPU가 64비트(즉, 64비트를 지원함)를 의미한다고 생각합니다.amd64(일명 x86-64)). 48비트 가상 주소를 사용하려면 64비트 운영 체제를 실행해야 합니다. 여기서 48비트는 애플리케이션 프로그래머에게 다소 혼란스럽습니다. CPU는 주소의 48비트만 변환하지만 주소는 64비트로 인코딩됩니다. 포인터는 6바이트가 아닌 8바이트를 차지합니다. 상위 16비트에는 다음이 포함될 수 있습니다.운영 체제에서 사용되는 추가 태그.

답변2

대표하다물리적 주소 확장CPU가 32비트 주소 버스를 가질 수 있도록 허용합니다.연설4G 이상.

/proc/cpuinfo디스플레이 지원이 충분하지 않은 경우 옵션이 활성화된 컴파일된 커널을 pae사용해야 합니다 pae(예: 사전 빌드된 데비안 3.16-2-686-pae를 사용하고 있습니다).

Linux 프로세스의 메모리 모델/레이아웃은 Linux 커널에 의해 정의되며 아키텍처마다 다릅니다(또는 그럴 수도 있음). 사용자 프로세스는 절대바라보다전체 물리적 RAM(커널만 해당)(커널이 프로세스를 허용할 수 있다고 가정)이론적으로2G를 사용하지만 실제로는 필요할 때만 사용하세요.페이지(일반적으로 각 크기는 4K 또는 16K입니다)지도물리적 RAM에서 프로세스를 입력합니다.

관련 정보