2014-09-07 1 views
1

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

+0

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. –

+0

[Détails de l'espace d'adressage virtuel x86-64] (http://en.wikipedia.org/wiki/X86-64#Virtual_address_space_details) –

Répondre

4

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.

Questions connexes