GEF 435 Principes des systèmes dexploitation Appels de système (Tanenbaum 1.6)
Revue Donnez un exemple de comment un interblocage peut se produire. Dans quelle structure est-ce que le SE sauvegarde linformation dun processus?
Synopsis Appels de système Quelques appels de système spécifiques fork( ) execve( ) link( ) *NIX à Windows des comparaisons
Appels de système Les appels de système sont linterface entre le SE et les programmes des utilisateurs Les librairies de procédures sont disponibles pour permettre aux langages à haut niveau de faire des appels de système Exemple: stdio.h rend disponible les fonctions nécessaires pour ouvrir, fermer et manipuler les fichiers. DOS et UNIX ont la librairie pour stdio mais linteraction est différente
Appels de système Que ce passe t-il durant un appel de fonction?
Appels de système Comment est-ce quun appel de système est différent?
Appels de système Un espace pour vos notes…
Appels de système spécifiques Une brève description de certains appels de système dans un environnement *NIX aide à comprendre les services offerts par le SE Actuellement une description de certaines fonctions des librairies, mais en général, ces fonctions font des appels de système pour accomplir leurs tâches
Lappel fork( ) pid = fork(); /*Exemple dappel de sys*/ En Unix la seule façon de générer un nouveau processus est avec fork() fork() crée un duplicata exact du processus parent au point de lappel incluant les descripteurs de fichiers, létat des registres, la pile, etc. … Le texte du programme est partagé La valeur de retour est différente pour les deux processus: Parent reçoit le PID de lenfant Enfant reçoit 0
Appel fork( ) Si tout entre le parent et lenfant est pareil comment est-ce que le parent et lenfant font un travail différent? while (TRUE) /* repète à jamais */ { type_prompt(); /* montre le prompt */ read_command(command, parameters) /* Entrée du terminal */ if (fork() != 0) /* fork un processus enfant */ waitpid( -1, &status, 0); /* Attend pour lenfant de finir */ else execve (command, parameters, 0); /* exécute commande */ } Code du parent Code de lenfant
Appel execve( ) Maintenant que le processus enfant est démarré nous voulons lui faire exécuter quelque chose de différent du parent s=execve(nom, argv, environp) Remplace limage du processus courrant avec un programme spécifié par largument: nom argv devrait être familier (lab1) environp est un tableau dinformation de lenvironnement tel quun répertoire de travail ou home, etc.
Appel link( ) link( ) est intéressant parce quil montre comment les fichiers sont entreposés dans les systèmes Unix Est-ce que les fichiers sont localisés physiquement sur le disque en terme de fichiers et répertoires? Non Les fichiers sont seulement des groupements de données qui sont reliées Linformation sur chaque fichier est gardée dans une grande table Chaque fichier a un numéro appelé un i-node Cette table mappe ce i-node à une location physique sur le disque
Appel link( ) Quest-ce quun répertoire? *NIX: Les répertoires sont des fichiers avec une liste de (i-node, string) Déplacer des fichiers demande simplement dajouter/enlever les i-nodes de ces fichiers Comment fonctionne link() ?
Appel link( ) s = link(nom1, nom2) nom1 est le fichier auquel on veut se lier nom2 est le nouveau fichier que lon veut créer Exemple: link(/usr/jim/memo, /usr/ast/note); AvantAprès
Sommaire des appels de système
*NIX vs Windows Windows donne une interface plus loin du SE connue comme: Win32 API Il y a des milliers dappels API Plusieurs appels API font des appels de système mais dautres opèrent entièrement dans lespace utilisateur…impossible de les séparer. Certains de ces appels peuvent varier entre les versions de Windows Windows a des appels de système différents: certains sont supportés différemment; dautres ne sont pas supportés CreateProcess() est fork() + execve() Pas de link en Windows
Quiz Time! Questions?