존재하다리눅스 커널 개발(LKD) 3판, 12장 영역 아래 Robert Love는 다음과 같이 말합니다.
특히 Linux는 메모리 주소 지정에 있어 두 가지 하드웨어 단점을 해결해야 합니다.
일부 하드웨어 장치는 특정 메모리 주소에 대해서만 DMA(직접 메모리 액세스)를 수행할 수 있습니다.
일부 아키텍처는 가상으로 처리할 수 있는 것보다 더 많은 양의 메모리를 물리적으로 처리할 수 있습니다. 따라서 일부 메모리는 커널 주소 공간에 영구적으로 매핑되지 않습니다.
내 질문:
- 첫 번째는 괜찮습니다. 2는 무엇을 의미합니까?
- 그가 의미하는 바는 다음과 같습니다. 일부 아키텍처에는 주소를 지정할 수 있는 가상 주소보다 주소를 지정할 수 있는 실제 메모리가 더 많습니까?
- 어떻게 이럴 수있어? 가상 주소 공간은 실제 메모리보다 크거나 적어도 (있는 경우) 실제 메모리와 같다고 생각합니다.
- 또한 VAS(Virtual Address Space)가 물리적 메모리보다 크기 때문에 일부 메모리는 KAS(Kernel Address Space)에 영구적으로 매핑되지 않습니다.
하지만 KAS에는 물리적 메모리만 매핑되는 것 같아요. 위의 2번 항목이 무엇을 의미하는지, 그리고 여기서 내가 만들고 있는 잘못된 가정이 무엇인지 알려주세요.
답변1
PAE(물리적 주소 확장)그가 말한 것과 정확히 같은 소리였습니다.
32비트 CPU는 시스템에 더 많은 메모리가 있더라도 최대 4GB의 메모리만 매핑할 수 있습니다. 그러나 PAE를 사용하면 4GB 이상을 사용할 수 있지만 한 번에 4GB만 매핑할 수 있습니다(단일 프로세스는 4GB 이상을 사용할 수 없음).
따라서 기본적으로 커널은 활발하게 실행 중인 프로세스를 변경할 때 가상 메모리를 해당 프로세스에서 현재 사용 중인 물리적 메모리로 다시 매핑합니다.