64 비트 프로세스 가상 주소 공간은 Linux에서 어떻게 분할됩니까? 분할되는 방법을 보여줍니다. 그러나 64 비트

다음 이미지는 32 비트 프로세스 가상 주소 공간이 분할되는 방법을 보여줍니다.

여기에 이미지 설명을 입력하십시오

그러나 64 비트 프로세스 가상 주소 공간은 어떻게 분할됩니까?



답변

64 비트 x86 가상 메모리 맵은 주소 공간을 2 개로 분할합니다. 하위 섹션 (상위 비트가 0으로 설정 됨)은 사용자 공간이고, 상위 섹션 (상위 비트가 1로 설정 됨)은 커널 공간입니다. (x86-64는 “표준”, “하반”및 “상반”주소를 정의하며 여러 비트는 사실상 48 또는 56으로 제한됩니다 . 자세한 내용 은 Wikipedia 를 참조하십시오.

완전한 맵은 커널 에 자세히 설명 되어 있습니다 . 현재는 다음과 같습니다

========================================================================================
    Start addr    | Offset  |     End addr     |  Size   | VM area description
========================================================================================
                  |         |                  |         |
 0000000000000000 |    0    | 00007fffffffffff |  128 TB | user-space virtual memory
__________________|_________|__________________|_________|______________________________
                  |         |                  |         |
 0000800000000000 | +128 TB | ffff7fffffffffff | ~16M TB | non-canonical
__________________|_________|__________________|_________|______________________________
                  |         |                  |         |
 ffff800000000000 | -128 TB | ffffffffffffffff |  128 TB | kernel-space virtual memory
__________________|_________|__________________|_________|______________________________

48 비트 가상 주소 56 비트 변형은 16K PB 홀의 양쪽에 64PB의 사용 가능한 주소 공간이있는 동일한 구조를 갖습니다.

32 비트의 경우와 달리 “64 비트”메모리 맵은 하드웨어 제약 조건을 직접 반영합니다.


답변