2014-09-07 4 views
1

/proc/cpuinfo에서 현재 Linux는 48 비트 가상 주소 크기 만 사용하고 있음을 알 수 있습니다. /Documentation/x86/x86_64/mm.txt에 따르면 커널 가상 주소는 ffff800000000000 - ffff80ffffffffff (= 40 비트) 보호 구멍에서 시작됩니다. 어떻게 이해할 수 있니? 나는 라인이 hole caused by [48:63] sign extension이라고 읽는 것을 보았습니다. 커널이 가상 주소를 만날 때 낮은 48 비트 만 해석하고 높은 16 비트는 무시한다는 의미입니까?x86_64의 리눅스 가상 메모리 사용자/커널 공간

+0

있습니다 메모리 부족이다 질문 해주세요. 그러나 나는 왜 당신이 질문에 투표를 하는지를 정말로 알고 싶다. –

+0

[x86-64 가상 주소 공간 세부 정보] (http://en.wikipedia.org/wiki/X86-64#Virtual_address_space_details) –

답변

4

부호 확장은 x86-64가 메모리를 주소 지정하는 데 저수준 48 비트만을 사용하기 때문에 발생합니다. 프로그래머가 상위 16 비트를 악용하는 것을 방지하기 위해 47 번째 비트가 부호 확장됩니다. 따라서 비트 47이 0이면 모든 비트 [48:63]는 0이되고 비트 47이 1이면 모든 비트 [48:63]는 1이됩니다. 양식을 "정식"이라고합니다. 비표준 주소 (즉, 비트 [48:63]! = 47 비트)를 사용하려고하면 하드웨어가 일반 보호 오류를 발생시킵니다. 실제로

, 커널의 메모리는 17 상위 비트가 하나 있습니다 그 높은 주소가 있으며, 사용자 공간 메모리는 사람이 행복하지 않은 경우 상위 비트가 0