하나 설치했어요32비트 RHEL 운영 체제안에64비트체계.
위키 페이지에서PAE:
Linux 커널에는 버전 2.3.23부터 완전한 PAE 모드 지원이 포함되어 있습니다. Linus Torvalds는 1.3.15에서 PAE의 4MB 페이지 지원을 언급했으며 [18] 32비트 컴퓨터에서 최대 64GB 메모리에 액세스할 수 있습니다.
서버 중 하나의 현재 커널 버전은 다음과 같습니다.
2.6.32-431.17.1.el6.i686
질문 1
커널 버전이 다른 버전을 추가한다는 것을 의미합니까?스물넷GB RAM을 이미 가지고 있는 용량으로8GB RAM, 전체32GB 물리적 메모리를 사용할 수 있나요?
현재 시스템에 표시되는 내용8GB RAM을 사용할 수 있습니다( free
명령을 사용하여 확인했습니다).
질문 2
저는 아직도 가상 메모리 개념이 헷갈립니다.
32비트 시스템은 가상 메모리를 어떻게 사용합니까?
나는 읽었다32비트RHEL은 블록 단위로 메모리를 사용합니다.삼GB.
이는 어느 시점에서든 가장 큰 수만 있을 수 있음을 의미합니까?삼메인 메모리 GB?
내 생각엔 내가 그랬을 때부터32즉시 사용 가능한 GB 메모리32GB의 데이터가 주 메모리에 상주할 수 있습니다. 특히, 나는 다음의 답변을 이해하려고 노력하고 있습니다.여기:
각 프로세스는 자체 주소 공간에서 실행되며 32비트는 각 프로세스의 주소 공간을 약 3GB로 제한합니다. 32비트 응용 프로그램에서 사용하는 총 메모리 양은 전혀 관련이 없습니다. 돌아다닐 일이 없습니다.
답변1
글쎄, 나는 아래 제공된 것보다 더 간결한 대답을 기대하지 않을 것입니다여기.
32비트 운영 체제에 대한 제가 이해한 바는 주소가 32비트로 표시되므로 운영 체제가 최대 2^32 = 4GB의 메모리 공간을 사용할 수 있다는 것입니다.
가장 중요한 것은프로세스할 수 있는주소4GB입니다. 당신은 혼란 스러울 수 있습니다메모리그리고주소 공간. 프로세스는 주소 공간보다 더 많은 메모리를 가질 수 있습니다.그건완전히 합법적인그리고비디오 처리 및 기타 메모리 집약적 애플리케이션에서 일반적입니다. 프로세스는 수십 기가바이트의 메모리를 할당하고 원하는 대로 주소 공간 안팎으로 교체할 수 있습니다. 2GB만 액세스 가능사용자단일 주소 공간.
집에 4대의 차고가 있더라도 여전히 50대의 자동차를 보유할 수 있습니다.차고에 다 넣을 수는 없습니다.차고에 주차할 차량과 도로 밖의 주차장에 주차할 차량을 모두 46대 이상 보관하려면 다른 곳에 보조 보관소가 있어야 합니다.
이는 컴퓨터의 하드 드라이브에 4GB 이상의 RAM + 페이징 파일(예: 8GB RAM 및 20GB 페이징 파일)이 있는 경우 Windows나 Unix 등 모든 32비트 운영 체제에서 "메모리 부족"이 발생하지 않는다는 의미입니까?
그런 뜻은 절대 아닙니다. 단일 프로세스는 이보다 더 많은 메모리를 사용할 수 있습니다! 다시프로세스에서 사용하는 메모리 양은 프로세스에서 사용하는 가상 주소 공간의 양과 거의 관련이 없습니다.차고에 있는 자동차의 수는 소유한 자동차의 수와 전혀 관련이 없는 것과 같습니다.
그리고,두 프로세스가 비공개 메모리 페이지를 공유할 수 있습니다.. 20개의 프로세스가 모두 동일한 DLL을 로드하는 경우 해당 프로세스는 모두 해당 코드의 메모리 페이지를 공유합니다. 그들은 공유하지 않습니다가상 메모리 주소 공간, 그들은 공유한다메모리.
아직 명확하지 않다면 내 요점은 다음과 같습니다.메모리와 주소 공간이 같은 것이라고 생각하는 것을 멈춰야 합니다. 왜냐하면 그것들은 전혀 같은 것이 아니기 때문입니다.
이 32비트 운영 체제 시스템에 2GB RAM과 2GB 페이지 파일이 있는 경우 페이지 파일 크기를 늘려도 성능에 도움이 되지 않습니다. 이게 진짜야?
차량 50대와 차량 4대를 수용할 수 있는 차고, 차량 100대를 주차할 수 있는 노외 주차장이 있습니다. 주차장 규모를 200대까지 늘립니다. 이제 (50개의 추가 주차 공간 대신) 150개의 추가 주차 공간이 있으므로 자동차가 더 빨라질까요?
답변2
Ramesh의 대답은 완전히 잘못되었습니다. 프로세스는 주소 지정이 불가능하기 때문에 주소 공간보다 더 많은 메모리를 가질 수 없습니다! 4GB 이상의 메모리를 사용하려면 C/C++에서 폰터를 사용하는 것처럼 프로세스가 주소로 메모리에 액세스해야 합니다. 예를 들어, 10GB RAM이 있는 경우 32비트 포인터가 최대 4GB까지 확장할 수 있다면 프로세스가 5GB에 있는 데이터에 액세스하도록 어떻게 알릴 수 있을까요? 불가능한. 그의 설명은 모두 운영체제와 관련이 있다. 64GB 풀에서 특정 4GB 블록까지 활성화할 수 있습니다. 따라서 최대 동시성은 항상 4GB이며 모든 프로세스는 최대 4GB에 액세스할 수 있습니다. 그러면 SO는 다양한 프로세스에 대해 풀에서 다양한 4GB 블록을 활성화할 수 있지만 프로세스는 다시 4GB로 제한됩니다. 실제로 32비트 포인터는 최대 4GB까지 주소를 지정할 수 있지만 32비트 프로세스의 한계는 3GB입니다.