Bloc de contrôle de processus

Sensibilisation au système d’exploitation

La sensibilisation au système d’exploitation de Simics est un module Simics qui comprend les structures de données et les abstractions du système d’exploitation fonctionnant sur le système cible Simics. Avec OS awareness, Simics et le débogueur Simics connaissent l’espace noyau, l’espace utilisateur, les processus, les threads et les tâches.

Fondamentalement, OS awareness effectue deux tâches : le suivi en direct des événements au fur et à mesure qu’ils se produisent, et l’investigation de l’état instantané du système d’exploitation. Le suivi en direct des événements signifie que l’OS awareness détecte quand le système d’exploitation effectue un changement de tâche, quand un logiciel fait un appel système, ou quand des interruptions se produisent. En effet, la façon la plus courante de détecter de tels événements est d’attendre les interruptions dans le système cible – tant qu’aucune interruption ne se produit, le même logiciel de niveau utilisateur s’exécute. Lorsqu’une interruption se produit, le système d’exploitation prend le relais et on considère que le processus en cours d’exécution a été interrompu. Lorsque le système d’exploitation revient à l’espace utilisateur, un certain processus est considéré comme ayant été commuté dans.

Le suivi en direct détermine quand quelque chose se produit, mais déterminer ce qui s’est passé nécessite d’enquêter sur l’état instantané du système d’exploitation. Par exemple, lorsqu’une interruption se déclenche, quels sont les threads actifs sur le processeur qui a reçu l’interruption ? Pour le déterminer, OS awareness doit connaître la structure des files d’attente OS des processus en cours et en attente, le contenu des structures de tâches ou des blocs de contrôle de processus, ainsi que d’autres structures de données. A condition que cela ait été configuré correctement, OS awareness peut alors parcourir les listes dans la mémoire cible et déterminer le nom du processus actuellement actif sur un processeur particulier, tous les processus existants, les modules logiciels chargés dynamiquement et leurs adresses de relocalisation, et tout autre élément d’intérêt.

Parce que le contenu précis des task structs et les décalages de champs particuliers peuvent varier entre les constructions et les versions du système d’exploitation, OS awareness doit être configuré avant de pouvoir être utilisé. Le plus souvent, il est possible de déterminer les paramètres de la connaissance du système d’exploitation en consultant une table de symboles ou un fichier du noyau avec les informations de débogage de la version du système d’exploitation. Cependant, il existe des systèmes d’exploitation dont les paramètres précis ne peuvent être déterminés qu’au moment de l’exécution, et dans ce cas, la configuration devra attendre que le système cible ait démarré. Dans tous les cas, une fois déterminé, l’ensemble des paramètres peut être sauvegardé et utilisé la prochaine fois que la même configuration cible est exécutée.

L’utilisation de fichiers de paramètres permet de faire en sorte que les configurations de sensibilisation à l’OS soient distribuées avec les images d’OS auxquelles elles font référence. Cela signifie qu’une équipe de plate-forme peut construire une image d’OS, configurer OS awareness pour elle, enregistrer les paramètres et fournir à ses utilisateurs l’OS et ses paramètres OS awareness sans avoir à fournir des fichiers de symboles ou des informations de débogage. Le fichier de paramètres de sensibilisation au système d’exploitation fait simplement partie de la pile logicielle fournie, et il est activé dans les scripts de démarrage utilisés pour lancer Simics. Les utilisateurs du système n’ont pas besoin de savoir comment configurer la sensibilisation au système d’exploitation – ils la font fonctionner dès qu’ils démarrent les configurations du système cible fournies. Les paramètres d’OS awareness sont également sauvegardés à l’intérieur des fichiers de points de contrôle de Simics, de sorte que l’OS awareness continue de fonctionner à travers les opérations de sauvegarde et de restauration des points de contrôle.

L’OS awareness permet de faire fonctionner les fonctionnalités de Simics uniquement sur un sous-ensemble particulier de la pile logicielle, comme avoir des points d’arrêt définis uniquement à l’intérieur d’un certain processus, ou tracer uniquement les accès mémoire effectués par le noyau et non par les tâches de niveau utilisateur. Une extension ou un script Simics écrit par l’utilisateur peut écouter les événements provenant de l’OS awareness et prendre des mesures en fonction du logiciel en cours d’exécution dans le système cible. Il est possible de demander au système OS awareness des notifications uniquement pour un certain processus, ou de voir toutes les actions pour tous les processus.

Le système OS awareness dans Simics fonctionne avec le concept d’un arbre de nœuds. Chaque nœud de l’arbre représente un niveau d’abstraction dans le modèle de processus OS. Typiquement, le nœud supérieur est le système d’exploitation lui-même, qui est ensuite divisé en tâches de niveau noyau et utilisateur. Dans un système d’exploitation comme Linux, chaque tâche de niveau utilisateur contient un ou plusieurs threads. Dans le noyau, la conscience du système d’exploitation distingue normalement les threads du noyau de la tâche inactive, car cela permet de tenir compte du temps d’exécution cible. La figure 3.3 montre un exemple d’arbre de nœuds d’un système Linux barebones.

Figure 3.3. Arbre de conscience du système d’exploitation.

Dans le CLI de Simics et l’interface graphique du débogueur, les requêtes de processus sont utilisées pour trouver les processus d’intérêt. Ces requêtes peuvent correspondre aux noms des processus, aux numéros d’identification des processus ou à d’autres propriétés mises à disposition par OS awareness. Dans la plupart des cas, le nom d’un processus est suffisant pour l’identifier, mais dans les systèmes complexes, des correspondances plus complexes sont nécessaires, telles que « le processus nommé foo sur la carte nommée bar ». Dans un système à longue durée d’exécution où un certain programme est exécuté de nombreuses fois, l’ID du processus peut être utilisé pour identifier un démarrage particulier d’un processus.

Simics OS awareness prend en charge les systèmes d’exploitation imbriqués pour gérer l’OS awareness pour les systèmes basés sur un hyperviseur. Dans un système avec un hyperviseur, il est nécessaire de suivre l’ordonnancement des systèmes d’exploitation invités sur les cœurs de processeurs cibles. Une fois que le système d’exploitation actif sur un cœur a été déterminé, il est possible d’appliquer l’OS awareness pour ce système d’exploitation afin de déterminer le processus ou le thread actif. Un seul arbre est donc utilisé pour l’ensemble du système, enraciné à l’hyperviseur.

Les détails de ce que l’OS awareness peut suivre et découvrir sur la pile logicielle cible varient en fonction du système d’exploitation invité et de la quantité de travail qui a été dépensée pour construire l’OS awareness pour celui-ci.

Par rapport aux systèmes d’OS awareness utilisés avec les débogueurs basés sur le matériel (JTAG), la capacité d’un simulateur à suivre précisément les commutations de tâches est unique. De telles fonctionnalités se sont avérées peu pratiques à mettre en œuvre dans les débogueurs basés sur le matériel, car elles entraîneraient une surcharge importante et dépasseraient la disponibilité des points d’arrêt matériels. L’inspection de l’état instantané est essentiellement la même que l’inspection de l’état du système par un débogueur matériel après l’arrêt du système, et en effet, le même code que celui utilisé pour les débogueurs matériels a été utilisé avec Simics pour déterminer des faits tels que les adresses de relocalisation pour les modules chargés dynamiquement.

Un débogueur basé sur un agent n’a pas besoin de conscience du système d’exploitation, car il s’exécute à l’intérieur du système cible et peut utiliser les API du système d’exploitation pour demander au système d’exploitation cible les tâches en cours, les modules chargés et d’autres informations.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.