De /proc/cpuinfo
nous pouvons voir que Linux utilise actuellement seulement la taille de l'adresse virtuelle de 48 bits. Selon le /Documentation/x86/x86_64/mm.txt, l'adresse virtuelle du noyau commence à ffff800000000000 - ffff80ffffffffff (= 40 bits). Comment comprendre cela? Je vois qu'il y a une ligne lue hole caused by [48:63] sign extension
. Cela signifie-t-il que le noyau n'interprétera que le bit bas de 48 bits et ignorera le bit haut 16 lorsqu'il rencontrera une adresse virtuelle?linux virtual memory utilisateur/noyau espace divisé en x86_64
Répondre
L'extension de signe est due au fait que x86-64 n'utilise que les 48 bits de poids faible pour la mémoire d'adressage. Par mesure de précaution, les programmeurs abusant des 16 bits de poids fort, le 47e bit est étendu. Par conséquent, si le bit 47 est un 0, alors tous les bits [48:63] seront également 0, et si le bit 47 est un 1, alors tous les bits [48:63] seront un 1. Une adresse qui a cette la forme est appelée "canonique". Si vous essayez d'utiliser une adresse non-canonique (c'est-à-dire si les bits [48:63]! = Bit 47) alors le matériel déclenchera une erreur de protection générale.
Dans la pratique, la mémoire du noyau sont les adresses élevées où les 17 bits de poids fort sont 1, et la mémoire de l'espace utilisateur sont peu de mémoire, où les bits de poids fort sont 0.
- 1. Faire fonctionner Microsoft Virtual PC sous Linux
- 2. Linux CPU/Memory Load Graph
- 3. récupération sous Linux Virtual Box
- 4. Alljoyn onboarding linux Ubuntu x86_64
- 5. Comment les processus partagent virtual mem (Linux)
- 6. Linux Virtual to Physical Mapping à RAM
- 7. exemples Linux x86_64 assemblage de filetage/sys_clone()
- 8. Comment fonctionne Backtrace sous Linux x86_64?
- 9. L'exécutable ARM Linux fonctionne mystérieusement sur x86_64
- 10. Linux binaire unique pour i386 et x86_64
- 11. Programmation de socket d'assemblage Linux x86_64
- 12. Linux Virtual Comportement Timer sur Threads Clone
- 13. Espace libre Linux incorrect
- 14. Linux espace check
- 15. apache drill memory memory
- 16. Eclipse Memory Analyzer: java.lang.OutOfMemoryError: espace de tas Java
- 17. java out of memory espace de tas d'erreur
- 18. En utilisant REGEXP_SUBSTR comme divisé en Oracle
- 19. Comment couper exactement 1 espace après avoir divisé la chaîne
- 20. Mystérieuse commande find hogging memory sur Linux Mint
- 21. Linux image à faible profil pour exécuter Virtual Box
- 22. Différence d'ABI entre les fonctions et les syscalls Linux x86_64
- 23. Comment epoll_wait est implémenté sous Linux pour x86_64
- 24. compilant llvm sur linux x86_64: suggestions sur les drapeaux d'optimisation?
- 25. erreur: commande 'x86_64-linux-gnu-gcc lors de l'installation mysqlclient
- 26. Regex pour la chaîne facultativement divisé par un espace vide
- 27. Comprendre LLVM-IR à l'assemblage pour x86_64-unknown-linux-gnu
- 28. Quelle est la différence entre /lib/i386-linux-gnu/libc.so.6, /lib/x86_64-linux-gnu/libc.so.6 et /usr/lib/x86_64-linux-gnu/libc.so ?
- 29. /lib/x86_64-linux-gnu/libthread_db.so.1 Le fichier n'existe pas
- 30. Sur Linux: Nous voyons ce qui suit: Physical, Real, Swap, Virtual Memory - Que devons-nous prendre en compte pour le dimensionnement?
Si quelqu'un est pas satisfait la question s'il vous plaît dites-moi. Mais je veux vraiment savoir pourquoi vous votez la question. –
[Détails de l'espace d'adressage virtuel x86-64] (http://en.wikipedia.org/wiki/X86-64#Virtual_address_space_details) –