Changes between Version 9 and Version 10 of Archi-1-TD10


Ignore:
Timestamp:
Nov 19, 2022, 3:51:40 PM (2 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Archi-1-TD10

    v9 v10  
    2222
    2323
    24 [[Image(htdocs:img/os_bigpicture.png,nolink,height=400)]]
     24Le schéma présenté rapidement au cours 10 (slides 26 à 31) et en détail dans l'annexe du cours 10 (slides 1 à 32) représente l'exécution d'une application utilisateur très simple, dont le comportement est défini par la fonction `main()`, depuis le démarrage du SoC jusqu'à l'exécution de la fonction `exit()`.\\Son but est de comprendre les interactions entre le code de boot, le noyau, l'application et les bibliothèques système. Le schéma ne contient pas l'intégralité du code pour des raisons évidentes de lisibilité, mais ce qui reste devrait suffire.
     25
     26 [[Image(htdocs:img/os_bigpicture.png,nolink,height=400)]]
     27
     28- En bas à gauche, c'est le code de boot qui, ici, se contente d'initialiser la pile d'exécution du noyau et d'entrer dans le noyau par la fonction `kinit()` (kernel init).  Ce code s'exécute en mode `kernel`, mais il ne fait pas partie du noyau car dans un vrai système, il devrait charger le noyau depuis le disque, mais, ici, le noyau est déjà en mémoire.
     29- En bas, c'est le noyau avec la fonction `kinit()` qui initialise les structures de données internes du noyau, ici, il s'agit juste de mettre les variables globales non initialisées à 0, puis d'appeler la routine `app_load` qui va entrer dans la première fonction de l'application nommée `_start()`. Dans le noyau, on voit aussi, la routine `kentry` qui est le point d'entrée du noyau pour la gestion des services, ici, il n'y a que le gestionnaire d'appel système (`syscall`). Son comportement est succinctement résumé.
     30- En haut, c'est l'application, décomposée en trois parties. La première à gauche est la fonction `_start()` appelée par le noyau au début de l'application. Cette fonction initialise les variables globales, puis appelle la fonction `main()`. Si on sort de la fonction `main()`, elle fait l'appel système `exit()`. La seconde partie au centre contient le code de l'utilisateur. Enfin, la troisième partie, à droite, c'est le code des bibliothèques système utilisées par l'application, ce sont elles qui font les appels système.
     31
     32
     33
    2534= 1. Les modes d'exécution du MIPS
    2635