2015-08-29 1 views
0

Cette question n'est spécifique à aucune implémentation de CPU, mais les réponses spécifiques à l'UC sont les bienvenues.Gestion des erreurs de traduction MMU dans le flux d'instructions - qu'advient-il de la MMU?

Je suis actuellement en train de mettre en œuvre un processeur full MMU-activé, et un problème simple est survenu. Donc, imaginez la situation où un simple échec de TLB se produit causé par le flux d'instructions (ou le cache d'instructions). Cela déclencherait un échec TLB. Maintenant, si le PTE n'est pas trouvé, une exception sera déclenchée, comme une "erreur de traduction de page". Jusqu'à présent, pas de problème du tout.

Maintenant, afin d'appeler le gestionnaire d'erreurs, le flux d'instructions (ou le cache) doit extraire le code du gestionnaire d'exceptions. Pour cela, il devra rechercher de nouveau l'entrée PTE correspondante dans TLB, et éventuellement une autre marche de table. Imaginez que, encore une fois, l'entrée PTE est introuvable. On s'attendrait à ce qu'un autre gestionnaire d'exception soit appelé. Maintenant, sur ce dernier gestionnaire d'exceptions, puisque le gestionnaire lui-même pourrait ne pas être trouvé ou être valide, MMU est désactivé avant que le gestionnaire soit récupéré et exécuté (contournant ainsi chaque MMU, y compris le mapping Phys-Virt), ou existe-t-il une autre technique (non fatale) pour faire face à cette situation?

Alvie

Répondre

0

Je ne peux pas dire avec certitude sur le monde réel système d'exploitation, mais de la petite expérience en regardant les petits grains, l'accent semble toujours être en veillant à ce que le gestionnaire de défaut de page en lui-même est jamais paginé et est toujours dans un endroit qui ne soulève jamais une faute de page. Cela permettrait de s'assurer qu'une situation telle que décrite dans votre problème ne se pose jamais.

En général, il semble logique qu'une partie du code de noyau du noyau réside statiquement sur la mémoire physique avec un mappage connu; mais étant donné que vous essayiez de toute façon d'écrire un système d'exploitation à mémoire virtuelle complet, je suppose que vous sauriez le savoir.

+0

Ma question est en fait liée au matériel et non au logiciel. Donc, dans le cas où nous ne pouvons pas gérer correctement le défaut, la seule option semble être une réinitialisation complète. Je me demandais si, pour un scénario précis, la MMU pourrait être désactivée pour éviter que cela ne se produise. Peut être mappé (dur) au code du firmware, par exemple. –