64비트에서 highmem 없이 각 프로세스에 대해 격리된 주소 공간을 만드는 방법은 무엇입니까?

64비트에서 highmem 없이 각 프로세스에 대해 격리된 주소 공간을 만드는 방법은 무엇입니까?

내 질문은 아마도 어리석은 것 같습니다. 하지만 몇 번 검색한 후에도 64비트 아키텍처에서 highmem이 불필요한 이유를 여전히 이해하지 못합니다.

제가 검색해본 결과 x64비트에는 highmem이 없습니다. 즉, 모든 물리적 메모리가 가상 메모리에 직접 매핑됩니다.

그러나 동시에 보안을 포함한 다양한 이유로 모든 프로세스는 0x00000부터 sth까지 고유한 주소 공간을 갖게 됩니다.

모든 물리적 메모리가 이미 각 가상 메모리에 직접 매핑되어 있는 경우 물리적 메모리와 가상 메모리 매핑을 변경하지 않고 어떻게 각 프로세스에 대해 독립적이고 격리된 주소 공간을 만들 수 있습니까?

답변1

물리적 메모리와 가상 메모리 매핑을 변경하지 않고 각 프로세스에 대해 별도의 격리된 주소 공간을 어떻게 생성할 수 있습니까?

이것이 바로 가상 메모리가 허용하는 것과 커널이 하는 일입니다. 각 프로세스에는 자체적인 별도의 가상 메모리 맵이 있습니다. 이로 인해 한 프로세스의 페이지 1000은 메모리의 물리적 페이지 X를 가리키고, 다른 프로세스의 페이지 1000은 메모리의 물리적 페이지 Y를 가리키며, 다른 프로세스의 페이지 1000은 교체됩니다. 컨텍스트가 한 프로세스에서 다른 프로세스로 전환될 때마다 가상 메모리 맵이 새 프로세스에 맞게 변경됩니다.

고급 메모리이는 커널이 가상 주소 공간(32비트 x86, 일반적인 3G/1G 분할에서 가장 높은 주소 공간 GB)에 자체 물리적 메모리 맵을 유지하기 때문에 필요합니다. 커널은 현재 프로세스의 가상 메모리에 매핑되었는지 여부에 관계없이 물리적 메모리의 모든 페이지에 액세스할 수 있어야 합니다. 이것이 바로 직접적인 물리적 메모리 매핑이 유용한 이유입니다. 32비트 시스템에서 이 직접 매핑의 크기는 잠재적인 실제 메모리 크기에 비해 제한됩니다(32비트 x86에서 최대 약 896MiB). 이 영역 외부의 물리적 메모리에 액세스하려면 커널이 페이지를 동적으로 매핑해야 합니다. 64비트 시스템에서는 주소 공간의 커널 측에 충분한 공간이 있습니다.최대 64TiB의 물리적 메모리를 직접 매핑이는 대부분의 시스템에 충분합니다(이것이 충분하지 않은 시스템에서는 5레벨 페이지 테이블을 사용하여 최대 32PiB의 물리적 메모리 매핑을 허용합니다).

당신은 또한 볼 수 있습니다최근 LWN 기사여기에는 높은 메모리 새로 고침이 포함됩니다.

관련 정보