J'ai une question rapide sur les TLB et les ASID dans ARMv8-A. D'après ce que je comprends (du guide du programmeur d'ARM et du Manuel de référence de l'architecture):
- Les descripteurs de page/de bloc (entrées de tableau MMU de feuille) ne contiennent pas d'identificateur ASID, seulement un bit nG (non global), qui dit ASID devrait être utilisé pour cette page.
- La valeur ASID réelle qui correspond à la valeur de registre réside dans le TLB. Il est défini lors de la marche d'une page et que l'entrée correspondante est ajoutée au TLB (avec l'ASID actuel, de sorte que les recherches TLB suivantes vérifient que le nouvel ASID correspond). Dites que je veux utiliser ASID pour éviter la mise à jour des tables lors du changement de contexte. Chaque processus a une valeur ASID résidente. Traitez 1 certaines données à vaddr a1
, processus 2 à vaddr a2
. Le contexte I passe de 1 à 2. Au cours de l'exécution, l'entrée TLB correspondant à a1
est éjectée (pour une raison quelconque). Processus 2 accède à a1
, un échec TLB se produit, et une page marche arrive, réussit et stocke l'entrée du processus 1 en utilisant la valeur ASID2, donnant l'accès de processus 2 aux données de processus 1.Pourquoi ASID seulement dans le TLB dans ARMv8-A? Comment éviter l'accès non-amorcé à la mémoire présente dans les tables mais éjecté de TLB?
Qu'est-ce que je ne comprends pas? Le mécanicien ASID ne devrait-il pas assurer la sécurité entre les processus 1 et 2 tout en évitant de mettre à jour les tables?
Facultatif question: si tous mes programmes ont .text
section à la même adresse virtuelle (au moins, tous les programmes ont la même adresse de point d'entrée), dois-je mettre à jour les tables chaque fois que je change de contexte ou puis-je avoir plusieurs entrées? correspondant à la même vaddr, en utilisant différents ASID?
ASID dans TLB n'est pas la sécurité, mais l'optimisation de vider maintenant plein TLB sur le changement de contexte. Chaque processus ** a son propre mappage de mémoire virtuel-physique **, et sans ASID OS va supprimer toutes les entrées TLB de TLB au commutateur de processus. Avec ASID OS peut conserver d'anciennes entrées TLB dans certains cas. – osgx
@osgx C'est exactement ce que je veux dire dans ma réponse.La raison pour laquelle je ne l'ai pas compris plus tôt est que j'ai surestimé le coût de changement de pages (très faible - seulement quelques requêtes L1) par rapport au coût de rinçage TLB (très haut - déclenche beaucoup de promenades). – maxbc
maxbc, oui, le point est que c'est * une optimisation *, lire plus dans ["Systèmes d'exploitation: Trois Easy Pieces"] (http://pages.cs.wisc.edu/~remzi/OSTEP/) (Remzi H Arpaci-Dusseau et Andrea C. Arpaci-Dusseau) ch. 19 "vm-tlb": http://pages.cs.wisc.edu/~remzi/OSTEP/vm-tlbs.pdf#page=9 "* Pour réduire ce surdébit, le champ Identificateur d'adresse d'adresse (ASID) TLB * " – osgx