Vous êtes sur la page 1sur 52

Cours des systmes dexploitation

Filire SMI(S4)

INTRODUCTION
Un systme informatique est constitu du matriel est du logiciel. Son objectif est de permettre le traitement automatique de linformation.

Systme informatique Du matriel

Du logiciel Les programmes systme Les programmes dapplication

Outils de dveloppement et dexcution de programmes

Systme dexploitation

compilateurs

diteurs

Interprteur

Les programmes dapplication accdent au matriel travers diffrentes couches logic ielles. Le systme dexploitation constitue la couche intermdiaire entre le matriel et les programmes dapplication.

Le programme systme d'exploitation est le programme fondamental des programmes systmes. Il contrle lexcution des programmes dapplication et agit comme une interface entre lutilisateur et le matriel. Il vise essentiellement deux objectifs: 1 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation Ergonomie: il facilite lutilisation dun ordinateur Efficacit: il permet dutiliser efficacement les ressources dun ordinateur

Filire SMI(S4)

Rles du systme d'exploitation


Les rles du systme d'exploitation sont divers : Gestion du processeur : le systme d'exploitation est charg de grer l'allocation du processeur entre les diffrents programmes grce un algorithme d'ordonnancement. Le type d'ordonnanceur est totalement dpendant du systme d'exploitation, en fonction de l'objectif vis. Gestion de la mmoire : le systme d'exploitation est charg de grer l'espace mmoire allou chaque application et, le cas chant, chaque usager. En cas d'insuffisance de mmoire physique, le systme d'exploitation peut crer une zone mmoire sur le disque dur, appele mmoire virtuelle. La mmoire virtuelle permet de faire fonctionner des applications ncessitant plus de mmoire qu'il n'y a de mmoire vive disponible sur le systme. En contrepartie cette mmoire est beaucoup plus lente. Gestion des entres/sorties : le systme d'exploitation permet d'unifier et de contrler l'accs des programmes aux ressources matrielles par l'intermdiaire des pilotes (appels galement gestionnaires de priphriques ou gestionnaires d'entre/sortie). Gestion de l'excution des applications : le systme d'exploitation est charg de la bonne excution des applications en leur affectant les ressources ncessaires leur bon fonctionnement. Il permet ce titre de tuer une application ne rpondant plus correctement. Gestion des droits : le systme d'exploitation est charg de la scurit lie l'excution des programmes en garantissant que les ressources ne sont utilises que par les programmes et utilisateurs possdant les droits adquats. Gestion des fichiers : le systme d'exploitation gre la lecture et l'criture dans le systme de fichiers et les droits d'accs aux fichiers par les utilisateurs et les applications.

Composants du systme d'exploitation


Le systme d'exploitation est compos d'un ensemble de logiciels permettant de grer les interactions avec le matriel. Parmi cet ensemble de logiciels on distingue gnralement les lments suivants : Le noyau (en anglais kernel) reprsentant les fonctions fondamentales du systme d'exploitation telles que la gestion de la mmoire, des processus, des fichiers, des entres-sorties principales, et des fonctionnalits de communication. L'interprteur de commande (en anglais shell, traduisez coquille par opposition au noyau) permettant la communication avec le systme d'exploitation par l'intermdiaire d'un langage de commandes, afin de permettre l'utilisateur de piloter les priphriques en ignorant tout des caractristiques du matriel qu'il utilise, de la gestion des adresses physiques, etc. . II. Les diffrentes classes de systmes d'exploitation Les systmes dexploitation peuvent tre classs en plusieurs classes. Ces classes diffrent les unes des autres suivant les points suivants : Selon les service rendus mono/multi-taches un systme multi-tches peut excuter plusieurs processus simultanment. Cest le cas dUNIX, Windows XP, mono/multi-utilisateurs un systme Multi-utilisateurs peut grer plusieurs utilisateurs utilisant simultanment les mmes ressources matrielles. C'est le cas d'UNIX, windows XP

Selon leur architecture Systmes centraliss o L'ensemble du systme est entirement prsent sur la machine considre. o Le systme ne gre que les ressources de la machine sur laquelle il est prsent. 2 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation

Filire SMI(S4)

Systmes rpartis (distributed systems) o Les diffrentes abstractions du systme sont rparties sur un ensemble de machines. o Le systme d'exploitation rparti apparat aux yeux de ses utilisateurs comme une machine virtuelle monoprocesseur mme lorsque cela n'est pas le cas. o Avec un systme rparti, l'utilisateur n'a pas se soucier de la localisation des ressources. Quand il lance un programme, il n'a pas connatre le nom de la machine qui l'excutera.

Selon leur capacit voluer Systmes ferms o Extensibilit rduite : Quand on veut rajouter des fonctionnalits un systme ferm, il faut remettre en cause sa conception. o Il n'y a aucun ou peu d'change possible avec d'autres systmes de type diffrent, voir mme avec des types identiques. Systmes ouverts o Extensibilit accrue : Il est possible de rajouter des fonctionnalits sans avoir repenser le systme et mme sans avoir l'arrter sur une machine. Selon l'architecture matrielle qui les supporte systme monoprocesseur (temps partag ou multiprogrammation) : o Ressource processeur unique : Il a fallu dvelopper un mcanisme de gestion des processus pour offrir un (pseudo) paralllisme lutilisateur. Systmes multiprocesseurs o Le multiprocessing est une technique consistant faire fonctionner plusieurs processeurs en parallle afin d'obtenir une puissance de calcul plus importante que celle obtenue avec un processeur. o On appelle SMP (Symmetric Multiprocessing ou Symmetric Multiprocessor) une architecture dans laquelle tous les processeurs accdent un espace mmoire partag. o Architecture mmoire distribue : Ce sont des architectures o chaque processeur possde sa propre mmoire locale ; o Architecture mixte Ce sont des architectures diffrents niveaux de mmoire (commune et prive). o Un systme multiprocesseur doit donc tre capable de grer le partage de la mmoire et les communications entre les diffrents processeurs et distribuer la charge de travail.

Cas particuliers
Systmes embarqus Les systmes embarqus sont des systmes d'exploitation prvus pour fonctionner sur des machines de petite taille, telles que des PDA (personal digital assistants ou en franais assistants numriques personnels) ou des appareils lectroniques autonomes (sondes spatiales, robot, ordinateur de bord de vhicule, etc.), possdant une autonomie rduite. Ainsi, une caractristique essentielle des systmes embarqus est leur gestion avance de l'nergie et leur capacit fonctionner avec des ressources limites. Les principaux systmes embarqus grand public pour assistants numriques personnels sont : PalmOS Windows CE / Windows Mobile / Window Smartphone Systmes temps-rel Ce sont des systmes pour lesquels l'excution des programmes est soumise des contraintes temporelles. Les rsultats de l'excution d'un programme n'est plus valide au del d'un certain temps connu et dtermin l'avance. Les systmes transaction : Grent des bases de donnes de grande taille. La mise jour de la base est ralise par des transactions

3 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation

Filire SMI(S4)

Exemples de systmes d'exploitation


On distingue plusieurs types de systmes d'exploitation, selon qu'ils sont capables de grer simultanment des informations d'une longueur de 16 bits, 32 bits, 64 bits ou plus.

Systme DOS Windows95/98/Me WindowsNT/2000 WindowsXP Windows7 Unix / Linux MAC/OS X VMS

Codage Mono-utilisateur Multi-utilisateur Mono-tche Multitche 16 bits X X 32 bits X X 32 bits X X 32/64 bits X X 32/64 bits X X 32/64 bits X X 32 bits X X 32 bits X X
X

4 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation

Filire SMI(S4)

Chapitre1 : Le systme dexploitation UNIX


I-INTRODUCTION Le cours des systmes dexploitation va sintresser l'tude des systmes d'exploitation en gnral et plus prcisment aux familles UNIX. Dans ce chapitre nous allons voir comment un utilisateur peut utiliser les services fournis par le systme d'exploitation au niveau de ses applications. La mise en uvre de ses services fait l'objet d'un autre chapitre. Pourquoi UNIX Pourquoi ce choix dUnix comme sujet d'tude pour le cours ? LE PRIX La disponibilit des sources De grande ressource bibliographique Caractristiques du systme crit dans un langage de haut niveau : C; Une interface simple et puissante : les shells, qui fournissent des services de haut niveau ; Des primitives puissantes qui permettent de simplifier l'criture des programmes ; Un systme de fichier hirarchique qui permet une maintenance simple et une implmentation efficace ; Un format gnrique pour les fichiers; le flot doctets qui simplifie l'criture des programmes ; Il cache compltement larchitecture des machines aux utilisateurs, Il fournit une interface simple aux priphriques . Il permet le paralllisme car il : est multitches et multiutilisateurs est multiprocesseurs : sur les ordinateurs multiprocesseurs un programme peut tre excut sur plusieurs processeurs. Permet la communication entre tches : plusieurs moyen de communication entre les processus utilisateurs : pipe, signaux, socket . Larchitecture du systme Larchitecture globale dUNIX est une architecture par couches (coquilles) successives comme le montre la figure 1.1. Les utilisateurs ordinaires communiquent avec la couche la plus volu celle des applications (en gnrale aujourdhui associ avec une interface graphique). Le programmeur lui va en fonction de ses besoins utiliser des couches de plus en plus profondes, plus prcises mais plus difficiles utiliser

shell Utilisateur Utilisateur awk

materiel ls noyau vi

cat

Figure 1.1

Chaque couche est construite pour pouvoir tre utilise sans connatre les couches infrieures (ni leur fonctionnement, ni leur interface). 5 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation

Filire SMI(S4)

Cette hirarchie dencapsulation permet dcrire des applications plus portables. En effet si elles sont crites dans les couches hautes, le travaille de portage est fait par le portage des couches infrieures. Pour des applications o le temps de calcul prime devant la portabilit, les couches basses seront utilises.

II- Le systme Linux


Linux est une version libre dUNIX (le code source du systme est disponible gratuitement et redistribuable) qui connait actuellement un grand succs, tant chez les utilisateurs particulier (en tant qualternative Windows) que sur les serveurs Internet/Intranet. Linux est diffus par diffrentes socits ou organisations, sous formes de distributions qui utilisent le mme noyau (ou presque) et organisent de diverses faons le systme (packages, mises jour, etc).

2.1 Les distributions Linux les plus rpandues


www.redhat.fr socit amricaine fonde en 1994. clbre pour avoir introduit le systme Red hat Package Manager (RPM), de gestion de paquets logiciels

fedora.redhat.com version grand publique gratuite de RedHat utilise le systme de gestion de paquets RPM

www.mandriva.com LA distribution franaise par excellence Trs rpandue dans le milieu ducatif utilise le systme de gestion de paquets RPM

www.novell.com/linux/suse socit allemande fonde Nuremberg en 1993 utilise le systme de gestion de paquets RPM

www.debian.org distribution issue d'un effort communautaire, le projet Debian , et non d'une entreprise distribution trs soigne et ingnieuse austre installer et administrer (dconseille aux dbutants ?) Utilise le systme de gestion de paquets debian

www.ubuntu-fr.org Distribution populaire base dbian lance en 2004. Son nom provient d'un ancien mot bantou (langue d'Afrique), ubuntu, signifiant Humanit aux autres, ou encore Je suis ce que je suis grce ce que nous sommes tous 6

Aicha KERFALI

Anne universitaire 2013/2014

Cours des systmes dexploitation

Filire SMI(S4)

2.3 Caractristiques gnrales du noyau Cest un systme Multitches / multiutilisateurs. Le fonctionnement multitche est assur par un mcanisme premptif : le systme interrompt autoritairement la tche en cours dexcution pour passer la main la suivante. Les tches sont protges ; certaines peuvent communiquer, c--d changer ou partager des donnes, se synchroniser dans leur excution ou sur le partage de ressources. Certaines tches peuvent tre temps rel . Linux comprend un noyau (kernel) et des utilitaires. Irremplaable par l'utilisateur, le noyau assure la gestion de la mmoire, le partage du processeur entre les diffrentes tches excuter et les entres/sorties de bas niveau sans intervention des utilisateurs, il est lanc au dmarrage du systme (le boot) et sexcute jusqu son arrt. Cest un programme relativement petit, qui est charg en mmoire principale. Il sexcute en mode superviseur; cest dire quil a accs toutes les fonctionnalits de la machine. Tous les autres programmes qui sexcutent sur la machine fonctionnent en mode utilisateur : il leur est interdit daccder directement au matriel et dutiliser certaines instructions. Chaque programme utilisateur na ainsi accs qu une certaine partie de la mmoire principale, et il lui est impossible de lire ou crire les zones mmoires attribues aux autres programmes. Lorsque lun de ces programmes dsire accder une ressource gre par le noyau, par exemple pour effectuer une opration dentre/sortie, il excute un appel systme. Le noyau excute alors la fonction correspondante, aprs avoir vrifi que le programme appelant est autoris la raliser. 2.4 Interface au noyau Comme le montre la figure 1.2, l'interface entre le noyau Linux et les priphriques est assure par les gestionnaires de priphriques (devices driver). L'interface entre le noyau et les programmes utilisateurs est assure par un ensemble d'appels systmes.

Figure 1.2

Les utilitaires les plus importants sont les suivants Interprteurs de commandes (nomms shells), permettant laccs dun utilisateur au systme. Les shells sont assez sophistiqus et sapparentent de vritables langages de programmation interprts. Commandes de manipulation de fichiers ; Commandes de gestion des processus ; diteurs de texte ; Outils de dveloppement : compilateurs, dbugueurs, analyseurs lexicaux et syntaxiques, etc. Connexion Un Compte correspond un nom de connexion ou nom d'utilisateur + un mot de passe. Le nom est attribu une fois pour toute un utilisateur par ladministrateur du site. Le mot de passe peut tre modifi par lutilisateur aussi souvent quil le dsire 7 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation

Filire SMI(S4)

Avec la gnralisation des interfaces graphiques, laccs un systme sous UNIX sest diversifi et (thoriquement) simplifi. La procdure dentre dun utilisateur dans le systme se nomme le login. La sortie est donc le logout. Aprs la vrification du mot de passe, le systme lance un interprteur de commande (shell). $ (ou % , # ) peuvent tre utilis comme invite de l'interprteur de commande utilis. L'interprteur attend que l'utilisateur tape une commande, excute cette commande, raffiche la chane d'invite, attend une nouvelle commande.... L'invite du root est en gnral # ; ce compte permet d'accder tous les fichiers et d'excuter toutes les manipulations systmes (administration). Ce fichier /etc/passwd rassemble des informations sur tous les utilisateurs ayant un compte sur le systme. Ce fichier contient une ligne par utilisateur et 7 champs par ligne, spars par le caractre ':. La figure 1. 3 illustre les champs composant chaque ligne de ce fichier.

figure 1.3 Le fichier /etc/shells contient les shells que lutilisateur peut utiliser 2. 5 Systme de fichiers Les fichiers permettent de stocker d'une faon permanente les donnes sur des disques ou d'autres supports physiques. Les fichiers sont grs par le systme d'exploitation. La partie du systme qui les grent est appel le systme de fichiers ou (file system). Dans ce chapitre nous allons traiter l'interface utilisateur relative l'accs aux fichiers et aux catalogues. La mise en uvre des fichiers feront l'objet d'un autre chapitre. 2.5.1 Les type de fichier : Pour le systme, les fichiers sont organiss en deux grandes familles : les fichiers ordiniaire que sont par exemple les fichiers texte, les excutables, etc. Cest--dire tout ce qui est manipul et structur par les utilisateurs. Les fichiers spciaux priphriques, mmoire, et autre fichiers physiques ou logique. Ces fichiers ont une structure interne dfinie (par les dveloppeurs du systme) qui doit tre respect ; cest pourquoi leur manipulation nest possible que par lintermdiaire du systme. Dans cette famille, on trouve plusieurs types de fichiers : Les catalogues(rpertoire) sont des fichiers spciaux, il faut pour les manipuler physiquement faire appel au systme ce qui en protge la structure. On trouve deux types de fichiers physiques dans le rpertoire /dev : Character devices (priphriques ou la communication ce fait octet par octet) les terminaux (claviers, crans) les imprimantes la mmoire etc 8 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation

Filire SMI(S4)

Block devices (priphriques ou la communication ce fait par groupe doctet appels blocs) les disques les bandes magntiques etc Les fichiers usages logiques et non physiques liens symboliques sockets tubes nomms Ce dernier type de fichiers spciaux est utilis pour servir dinterface entre disques, entre machines et simule des lignes de communication, etc. 2.5.2 Les inodes Linode est la structure qui contient toutes les informations sur un fichier donn lexception de sa rfrence dans larborescence (son nom). Les informations stockes dans une inode disque sont : utilisateur propritaire groupe propritaire type de fichier droits daccs (ugo*rwx) date de dernier accs date de dernire modification date de dernire modification de linode taille du fichier adresses des blocs-disque contenant le fichier. 2.5.3 Organisation utilisateur des Disques Comment permettre aux utilisateurs didentifier les donnes sur les supports de masse ? Le systme le plus rependu aujourdhui est un systme arborescent avec des fichiers utiliss comme des nuds. Comme il est ulistr sur la figure 1.3, la racine de cet arbre est note '/ /

home c1 c2

etc passw d projet Courier toto

tmp fich1

.profile fichA

figure 1.4 Chemins absolus et relatifs Un chemin absolu spcifie la suite des rpertoires traverser en partant de la racine, spars par des caractres / (et non \ comme sous DOS). Exemple /etc/passwd /home/c2/projet/fichA Tout chemin qui ne commence pas par un caractre / (prononc slash) est interprt comme un chemin relatif au rpertoire courant. Exemple rpertoire courant chemin relatif /home/c2 ./.profile 9 Aicha KERFALI Anne universitaire 2013/2014

fichB

Cours des systmes dexploitation

Filire SMI(S4)

/home/c2/projet ./fichA /tmp ../etc/passwd Rpertoire de connexion Aprs le login, linterprteur de commande a pour rpertoire courant le rpertoire de connexion de lutilisateur. Le rpertoire de connexion contient aussi certains fichiers de configuration permettant lutilisateur de personnaliser son environnement de travail. Ces fichiers sont normalement invisibles car leur nom commence par un point. A tout moment, on peut revenir au rpertoire de connexion grce la commande cd sans argument. On peut aussi spcifier un chemin partir du rpertoire de connexion dun utilisateur en utilisant ~ 2.5.4 Les commandes L'utilisateur manipule les fichiers via un ensemble de commandes La syntaxe gnrale d'une commande est commande [option ...] [argument ...] Lorsquon lance une commande plusieurs cas d'erreurs peuvent se produire : La commande n'existe pas. Le shell distingue les lettres majuscules des minuscules. Vous n'avez pas le droit d'excuter cette commande. Les options de la commande sont errones. En gnral la commande affiche un message d'utilisation, prcisant quels sont les options et arguments. Pour plus de dtails taper $ man commande. Les arguments de la commande sont errons ls [fichier ...] Affiche le contenu des rpertoires et les noms des fichiers passs en argument, ou s'il n'y a pas d'argument, tous les fichiers du rpertoire courant sauf ceux commenant par un point. Cette commande dispose de diverses options, dont les plus utilises sont : -a : affiche galement les nom des fichiers cachs (fichies dont le nom commence par '.' ; -l : affiche des informations supplmentaires sur les fichiers -i : affiche les numros d'i-node; -s : affiche la taille en Ko de chaque fichier. cat [ fichier ] Recopie les fichiers spcifis lun aprs lautre sur la sortie standard (concatnation). Si aucun argument nest spcifi, lit sur lentre standard (jusqu rencontrer un caractre fin de fichier CTRLD). cp source dest Si dest est un rpertoire, copie le ou les fichier(s) source vers dest. Si dest est un nom de fichier, dulpique source. mv source dest Si dest est un rpertoire, dplace le fichier source vers dest. Si dest est un nom de fichier, renomme source. rm fichier ... Supprime le ou les fichiers spcifis. Loption -r agit de faon rcursive, cest dire dtruit aussi les rpertoires (pleins ou vide) et leurs sous-rpertoires. pwd Affiche le rpertoire courant. mkdir ou md[chemin] Cre un rpertoire. Le chemin peut tre relatif (par exemple mkdir ../exam) ou absolu (par ex. mkdir /users/emmanuel/cours). cd [chemin] Change le rpertoire courant. Sans argument, ramne dans le rpertoire de connexion (HOME). Liens entre fichiers Un fichier peut avoir plusieurs noms. Le systme identifie un fichier non pas par un nom, mais par son numro de i-noeud. Les liens "hard" ou physique Cration de deux ou plusieurs noms vers un i-noeud unique au moyen de la commande ln. Avantage Une seule copie sur le disque et plusieurs faons dy accder Modification immdiatement sur tous les fichiers lis Simplifier laccs des fichiers dont le nom est difficile retenir 10 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation

Filire SMI(S4)

Limitation Impossible de faire un lien sur un rpertoire Cette commande n'est utilisable qu' l'intrieur d'un mme systme de fichiers (arborescence). Exemple $ln fichB fichBbis $ls a donne laffichage suivant : 423 fichA 666 fichB 666 fichBbis $ls ai donne 423 -rw-r--r-- 1 c1 cours 342 Oct 18 15:28 fichA 666 -rwxr-xr-x 2 c1 cours 106 Oct 10 10:53 fichB 666 -rwxr-xr-x 2 c1 cours 106 Oct 10 10:53 fichBbis Les liens Symboliques Ces liens, diffrents des prcdents, permettent de lier plusieurs noms un mme fichier sans rattacher ces derniers au i-noeud correspondant. Pour cela on utilise la commande ln avec l'option -s. On peut crer un lien au del du systme de fichiers du fichier dorigine (y compris les systme de fichier rseau : NFS). Linformation lien est plus lisible au ls. Dans ce type de lien il y a la cration dun nouvel i-noeud. Exemple $ ln -s foo bar $ ls -li bar foo 22195 lrwxrwxrwx 1 root root 3 Aug 5 16:51 bar->foo 22192 -rw-r--r-- 1 root root 12 Aug 5 16:50 foo head -n fich affichage les n premires lignes. Par dfaut head affiche les 10 premires lignes tail -n fich ; affichage des n dernires lignes ; tail +n fich; affichage partir de la ligne n tail nc fich; affichage des n dernier caractres Tail +nc fich; affichage partir du nme caractres Par dfaut tail affiche les 10 dernires lignes wc fich : affichage du nombre de lignes, de mots, de caractres. Les options -l, -w et -c pour les nombres de lignes, de mots et de caractres. grep [option] motif fichier affiche les lignes de fichier qui contiennent le motif motif. grep define stdio.h: recherche le mot "define" dans le fichier stdio.h. grep hello *: recherche le mot "hello" dans tous les fichiers du rpertoire. cut Il permet de slectionner certaines parties des lignes dun fichier ou de lentre standard (si aucun fichier nest prcis). cut [-c] [-f] list [-n] [-d delim][-s] [file] Options: -c list: spcifie les caractres slectionner. c2-5 slectionne les caractres 2 5 de chaque ligne. -f list: slectionne pour chaque ligne les champs spcifis, les champs tant dlimits par un caractre dlimiteur. -f 1,5 slectionne les champs 1 et 5. -d delim: spcifie le caractre dlimiteur. -s: supprime les lignes sans caractre dlimiteur. -list: Liste de nombres spars par une virgule, avec - pour indiquer un intervalle. 1,2,3,5 ou 1-3,5 Exemples: $ echo "bonjour" | cut -c 2-6 onjou $ echo "comment ca va" | cut -f2,3 -d ca va 11 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation

Filire SMI(S4)

awk constitue un mini langage de programmation pour le traitement des motifs. Grce cette commande, vous pouvez automatiser de nombreux calculs. Lexemple suivant permet de comprendre le fonctionnement de awk : awk -F"\t" {print $2} mon_fichier awk lit le contenu du fichier ligne par ligne. Pour chaque ligne, awk recherche des donnes spares entre elles par le champ indiqu dans loption -F et les place dans des arguments $1 , $2 $n. Dans lexemple, le sparateur est la tabulation (\t plac entre les doubles ctes " "); awk affiche alors la colonne 2. Concept de redirection la connexion, le shell dispose de trois flots de communication, lentre standard : stdin (numro 0). La sortie standard et erreur standard : stdout et stderr (numros 1 et 2). Lassociation par dfaut de ces flots est lcran pour stdout et stderr, et le clavier pour stdin. Une redirection est une modification de lune ou de lautre de c es associations. Elle est valable uniquement le temps de la commande sur laquelle elle porte. Ainsi, la redirection de la sortie standard permet de rcuprer le rsultat dans un fichier. Redirections vers/depuis des fichiers Pour la sortie, on utilise >: ls > resultat. Un fichier nomm ici resultat est cr (sil nexiste pas). Le rsultat de ls est mis dans resultat. Si resultat existe dj son contenu est cras. Rien napparait lcran (sauf sil se produit une erreur). Si lon dsire ne pas craser lancien contenu du fichier, mais crire sa fin, on peut utiliser >> : ls >> resultats. Pour rediger lentre standard, on utilise < : cat < UnFichier Il est possible de rediriger lentre et la sortie en mme temps : cat < UnFichier > Resultat il est possible de rediriger la sortie standard dune commande vers lentre dune autre commande grce au tube (pipe) not |. ls | sort -r Droits daccs un fichier Les utilisateurs dun fichier donn sont diviss en trois ensembles : le propritaire du fichier ; les utilisateurs du mme groupe de travail que le propritaire ; les autres utilisateurs ayant accs au systme.

La commande ls avec l'option -l (long) affiche de nombreuses informations sur le fichier :

12 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation

Filire SMI(S4)

Modification des droits daccs aux fichiers : Solution symbolique Dans ce cas on utilise les symboles u, g, o ou dont la signification est donne dans le tableau suivant

chmod permet de modifier les droit daccs un fichier. Cet opration nest autoris quau propritaire du fichier Exemple chmod go-w fichA; ls -l fichA -rw-r--r-- 1 c1 cours 342 Oct 18 15:28 fichA $chmod u+x fichA; ls -l fichA -rwxr--r-- 1 c1 cours 342 Oct 18 15:28 fichA $chmod g-r fichA; ls -l fichA -rwx---r-- 1 c1 cours 342 Oct 18 15:28 fichA $chmod ug+rw fichA; ls -l fichA -rwxrw-r-- 1 c1 cours 342 Oct 18 15:28 fichA $chmod g-rw fichA; ls -l fichA -rwx---r-- 1 c1 cours 342 Oct 18 15:28 fichA $chmod ug=rw fichA; ls -l fichA -rw-rw-r-- 1 c1 cours 342 Oct 18 15:28 fichA Modification des droits daccs aux fichiers : Solution symbolique Le code peut galement tre donn en mode octal.

765 reprsente 450 reprsente

rwx rw- r-x r-- r-x --13

Aicha KERFALI

Anne universitaire 2013/2014

Cours des systmes dexploitation $ ls -l toto -rw-r--r-- 1 c1 cours 342 Oct 18 15:28 toto $chmod 760 toto; ls -l toto -rwxrw---- 1 c1 cours 342 Oct 18 15:28 toto chgrp nom_groupe fichier Modifie le groupe propritaire d'un fichier. chown nom_utilisateur fichier Modifie l'utilisateur propritaire d'un fichier. chgrp et chown nest autoris quau superutilisateur $ ls -l f1 -rw-r----- 1 prof cours 11 Jul 13 13:00 f1 $ chown c1 f1 $ ls -l f1 -rw-r----- 1 c1 cours 11 Jul 13 13:01 f1

Filire SMI(S4)

2.5.5 Mta-caractres pour linterprtation des noms de fichiers Les caractres dits Jokers servent rfrencer des noms de fichiers : * =) une chane de caractres quelconque (mme vide) ; ? =) UN caractre quelconque ; [...] UN caractre quelconque dans lensemble dfini entre [ et ] ; [ !...] UN caractre quelconque hors de lensemble. Un ensemble est dfini par une liste de caractres ([adefgw]) ou un intervalle ([0-9]) ou toute combinaison des deux ([ab0-9A\ ;]). Par exemple, *.c tous les fichiers dont le nom se termine par un . suivi de c *.[csp] tous les fichiers dont le nom se termine par un . suivi dun caractre choisir parmi c, s ou p f* Tous les fichiers dont le nom commence par 'f'. f? Tous les fichiers dont le nom commence par 'f', suivi d'un seul caractre quelconque. f[a-z] Tous les fichiers dont le nom commence par 'f' suivi d'une lettre minuscule. ?.c Tous les fichiers dont le nom est form d'un caractre quelconque, suivi de '.c ?? Tous les fichiers dont le nom est form de deux caractres. *.[A-Za-z] Tous les fichiers dont le nom se termine par un '.' suivi d'une seule lettre majuscule ou minuscule. *.[ch0-9] Tous les fichiers dont le nom se termine par un '.' suivi d'un seul caractre choisir parmi 'c', 'h', ou un chiffre entre '0' et '9'. [ !0-9]* =) noms ne commenant pas par un chiffre [!f]* Tous les fichiers dont le nom ne commence pas par 'f' 2.6 La programmation shell Script shell est une suite de commande UNIX runies dans un fichier Soit le script suivant dans le fichier qui-est-la #!/bin/bash echo Liste des utilisateurs connects par ordre alphabtique who|sort Pour excuter le script, il faut rendre le fichier qui-est-la excutable $chmod 766 qui-est-la $qui-est-la 2.6 .1 Les variables Une variable est une donne identifie par un nom. On Dfinit une variable par Laffectation var=bonjour La commande read var On accde au contenu dune variable en ajoutant $. $var =hello word $ echo $var 14 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation hello world Si ambigut utiliser {} $x=shell $echo $xshell donne le message derreur variable xshell non dfinie $echo ${x}shell donne shellshell $echo $x-shell donne shell-shell

Filire SMI(S4)

2.6 .2 Expressions arithmtiques $expr $var + 1 affiche la valeur de var incrmente de 1. il faut mettre des espaces dans lexpression. $let var=var+1 b=4*var/ 3 incrmente var de 1 et affecte b la valeur 4var/3. il ne faut pas despace dans les expression $((y=2*var+6)) Affecte y la valeur de lexpression 2var+6. (()) a une valeur, y accder par $(()) 2.6 .3 Liste des variables prdfinies HOME : rpertoire de connexion PATH : liste des rpetoire de erecherche des commande PWD : rpertoire courant REPLAY : paramtre par dfaut de read PPID : numro de processus pre ? : code de retour de la dernire commande $ : numro du processus du script ! :numro de processus de la dernire tche lance en arrire plan Variable de position 0: nom du script 1: 1er paramtres, 2:2me paramtres, etc. * ou @ : liste de tous les paramtres # : nombre des paramtres Exemple #!/bin/bash # commentaire Echo "information sur le script" echo "Le nombre dargument est $#" echo "Les arguments sont $*" echo "Le premier est $1" echo "Le numero du process est $$" 2.6.4 Excution conditionnelle Il est possible dexcuter une suite dinstruction sous une certaine condition. if [ test ] then commande-si-vrai else commande-si-faux fi Le teste peut tre une condition sur un fichier, ou une comparaison de chanes ou de valeur. Il ne faut pas oublier les espaces dans if [ test ] 2.6.4.1 Conditions sur les fichiers Cette liste permet de raliser des testes sur les fichiers. [ -s file ]: vrai si le fichier existe et est non vide. [ -e file ]: vrai si le fichier existe. [ -f file ]: vrai si cest un fichier ordinaire. [ -d file ]: vrai si cest un rpertoire. [ -r file ]: vrai si le fichier est libre en lecture. 15 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation [ -w file ]: vrai si le fichier est libre en criture. [ -x file ]: vrai si le fichier est excutable. [ -L fich ] : vrai si le fichier est un lien symbolique [ -O fich ] : vrai si le fichier appartient au propritaire du processus [ fich1 nt fich2 ]: vrai si fich1 est plus rcent que fich2 [ fich1 ot fich2 ]: vrai si fich1 est plus vieux que fich2 [ fich1 et fich2 ]: vrai si fich1 est un lien vers fich2 2.6.4.2 Comparaison de valeurs et chanes La comparaison des entier utilise les testes suivant : [ exp1 -eq exp2 ]: vrai si exp1 = exp2. [ exp1 -ne exp2 ]: vrai si exp1 <> exp2. [ exp1 -lt exp2 ]: vrai si exp1 < exp2. [ exp1 -le exp2 ]: vrai si exp1 <= exp2 [ exp1 -gt exp2 ]: vrai si exp1 > exp2. [ exp1 -ge exp2 ]: vrai si exp1 >= exp2 Les testes concernant les chanes de caractre utilisent les comparaison suivantes : [ chaine = motif ]: vrai si chaine est de forme motif [ chaine!= motif ]: vrai si chaine nest pas de la forme motif [ chaine1<chaine2 ]: vrai si chaine1 est infrieur chaine2 [ chaine1>chaine2 ]: vrai si chaine1 est suprieur chaine2 [ -z chaine ]: vrai si chaine est de longueur nulle [ -n chaine ]: vrai si chaine est de longueur non nulle Exemple Afficher le contenu dun fichier sil existe. #/bin/bash if [ -f $1 ] then cat $1 fi Crer un rpertoire toto sil nexiste pas dj. #/bin/bash if [ ! -d toto ] then mkdir toto fi 2.6.4.3 Combinaison de tests [ E -a F ] est vrai si les expressions E et F sont vraies. [ E -o F ] est vrai si E ou F est vraie. On peut utiliser && au lieu de a et on peut utiliser || au lieu de -o 2.6.5 Choix multiple Case .in ... ... esac case cvaleur in val11|val12||val1x liste_commandes1 ;; val21|val22||val1y liste_commandes2;; ... valn1|valn2||val1z 1liste_commandesn;; esac liste_commandesi est excute si valeur est de la forme de l'une des valij Le caractre * recouvre toute valeur

Filire SMI(S4)

16 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation

Filire SMI(S4)

2.6.6 Structures de contrle itrations for variable vin liste_valeurs do liste_commandes done Excuter liste_commandes pour chaque valeur de variable dans liste_valeurs. Le manque de in liste_valeurs est quivalent in $* (variable prend tour tour les valeurs des variables de position) Mots cls do et done prcds d'un ';' ou d'un retour la ligne. On peut aussi utiliser la structure de contrle while condition do liste_commandes done

17 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation

Filire SMI(S4)

Chapitre 2 Les processus


I- caractristique Un processus est un programme qui s'excute et il possde un compteur ordinal, un ensemble de registres et une mmoire (donnes, code et pile ).

Le code correspond aux instructions, en langage machine, du programme excuter. La zone de donnes contient les variables globales ou statiques du programme ainsi que les allocations dynamiques de mmoire. Enfin, les appels de fonctions, avec leurs paramtres et leurs variables locales, viennent s'empiler sur la pile. Conceptuellement, chaque processus a son processeur propre virtuel. En ralit, le vrai processeur commute entre plusieurs processus sous la direction dun ordonnanceur.

II- Les diffrents tats d'un processus


2.1 Au niveau systme Au niveau systme un processus peut tre dans l'un des tats suivants : Elu sil est en cours d'excution sur un processeur. il y a toujours autant de processus lu que de processeurs. Prt sil est suspendu provisoirement pour permettre l'excution d'un autre processus. Un processus est prt sil ne lui manque que la ressource processeur pour sexcuter. Bloqu sil est en attente dun vnement extrieur (bloc disque, frappe clavier pour pouvoir continuer) La transition entre ces trois tats est matrialise par le schma suivant: Slection Cration nn Prt Premption Fin attente Bloqu 2.2 Vision utilisateur des tats dun processus Pour un utilisateur, un processus peut se trouver dans trois tats : en excution (excution de la commande), suspendu (CTRL-Z) ou termin. Le schma suivant rcapitule les transitions permettant de passer dun tat un autre. 18 Aicha KERFALI Anne universitaire 2013/2014 Attente Elu Destruction

Cours des systmes dexploitation

Filire SMI(S4)

Par dfaut, une commande sexcute en avant-plan (en anglais foreground). Dans ce cas pour excuter une commande, le shell cre un processus enfant et attend quil se termine. Le processus enfant excute la commande. Les processus parent et enfant sexcutent squentiellement (lun aprs lautre). Une seule commande est donc excute la fois. Une commande peut aussi sexcuter en arrire-plan (en anglais background). Par exemple, lutilisateur saisit date &. Dans ce cas le shell cre un processus enfant et nattend pas quil se termine. Le processus enfant excute la commande date. Les deux processus, parent et enfant, sexcutent alors simultanment . Sous Unix, il est possible de suspendre le processus en avant-plan en tapant CTRL-Z. Le processus suspendu pourra reprendre ultrieurement. Il existe deux faons de reprendre un processus suspendu En avant-plan par la commande fg (foreground), En arrire-plan par la commande bg (background). Par exemple : $gedit lancement de gedit en avant-plan CTRL-Z dition suspendue) $ bg entraine la reprise de ldition en arrire-plan Un job est dfini comme un processus en arrire-plan ou suspendu. La commande jobs permet de lister ces processus III- Relation entre les processus Les processus des utilisateurs sont lancs par un interprte de commande (shell). Ils peuvent eux-mme lancer ensuite d'autres processus. On appelle le processus crateur, le pre, et les processus crs, les fils. Les processus peuvent donc se structurer sous la forme d'une arborescence. Au lancement du systme, il n'existe qu'un seul processus, appel processus init Le processus "init" cre 2 sortes de processus : Des dmons, des processus qui ne sont rattachs aucun terminal, qui sont endormis la plupart du temps, mais qui se rveillent de temps en temps pour effectuer une tche prcise. Des processus interactifs, vous permettant de vous connecter.

19 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation

Filire SMI(S4)

init getty daemons

login

shell 3.1 Cration dun processus Un processus est crer au moyen dun appel systme, cest--dire par un autre processus ayant ralis cet appel, on voit apparatre naturellement la notion darborescence des processus, partir dun anctre commun tous, cre au dmarrage du systme (processus init sous Unix). Un processus et identifi par un numro (PID) . La primitive getpid() renvoie le numro (PID) du processus qui lexcute. Chaque processus a un pre, celui qui la lanc. La primitive getppid() renvoie le numro du pre et getuid() permet dobtenir le numro dutilisateur (auquel appartient le processus) Le PID du processus init est 1 Au niveau des appels systme un processus est cr par une instruction fork() Format de cration des processus sous Unix Fork : pid_t fork() Lappel de cette primitive permet la cration d'un processus fils. Elle retourne le PID du fils l'intrieur du processus pre et 0 l'intrieur du processus fils. Il en rsulte que les branches pre et fils se distinguent dans le programme par un if sur la valeur du pid (pid = 0, on est dans le fils). Si le fils n'a pu tre cr, fork retourne -1 #include <stdio.h> #include <unistd.h> //pour faire appel aux primitives getpid() et getppid() int main(void) { fork(); printf("je suis le processus %d\n",getpid()); } $ gcc processus.c L'execution de ce programme donne le rsultat suivant : $ ./a.out je suis le processus 2005 //affichage du pre je suis le processus 2006 //affichage du fils Aprs sa cration le fils et son pre excutent la mme instruction. Pour distinguer le code du pre de ce celui du fils il faut tester la valeur retourne par fork() if (fork() != 0) { /* Excution du code du pre */ printf("je suis le pre, mon PID est %d\n", getpid()); 20 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation } else {

Filire SMI(S4)

/* Excution du code du fils */ printf("je suis le fils, mon PID est %d et le PID de mon pere est %d\n", getpid(), getppid()); } Pendant l'excution du fork le systme: o alloue une entre dans la table des processus au nouveau processus, o alloue un pid unique au nouveau processus, o duplique le contexte du processus pre (code, donnes, compteur ordinal, compteur de pile, etc...), o retourne au pre le pid du fils cr et 0 au fils. o Le fils hrite de tous les attributs du pre sauf : son pid (hors du contexte du pre, fourni par le systme opratoire), les statistiques de temps d'excution (remises zro). Exemple avec fork() #include <stdio.h> #include <unistd.h> int main() { int pid=fork(); if(pid!=0) { printf("Je suis le perre."); printf(" Mon PID est : %d et le PID de mon fils est %d \n",getpid(),pid); } else{ printf("Je suis le fils."); printf(" Mon pid est:%d\n",getpid()); } } Rsultat: Je suis le pere. Mon PID est : 1320 et le PID de mon fils:1321 Je suis le fils. Mon PID est:1321 $ Peut aussi apparatre dans lordre inverse. Le fils et le pre excutent le mme programme, mais chacun a sa propre mmoire virtuelles ce qui donne naissance deux 2 jeux de donnes diffrents int i ; if (fork() != 0) { printf("Je suis le pre, mon PID est %d\n", getpid()); i = 3; } else { printf("Je suis le fils, mon PID est %d\n", getpid()); i = 5; } printf("Pour %d, i = %d\n", getpid(), i); } Rsultat Je suis le fils, mon PID est 1271 Pour 1271, i = 5 Je suis le pre, mon PID est 1270 Pour 1270, i = 3 3.2 Terminer et faire attendre un processus Un processus se termine aprs lexcution de la dernire instruction. La primitive void exit(int status) termine brutalement un processus. La valeur status est envoye au processus parent. La librairie utiliser est stdlib.h. 21 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation

Filire SMI(S4)

int sleep(int seconds) fait attendre un processus un nombre donn de secondes. Le processus qui appelle sleep est bloqu pendant le nombre de secondes spcifi. Exemple1 int main() { if (fork() != 0) { printf("je suis le pre, mon PID est %d\n", getpid()); sleep(10) /* blocage pendant 10 secondes */ exit(0); } else { printf("je suis le fils, mon PID est %d\n", getpid()); sleep(10) /* blocage pendant 10 secondes */ exit(0); } Exemple 2: main() { if (fork() == 0) { // fils printf("je suis le fils, mon PID est %d\n", getpid()); exit(0);//terminaison du fils /* la partie suivante est non excutable par le fils */ printf("je suis le fils, le PID de mon pre est %d\n", getppid()); } else { printf("je suis le pere, mon PID est %d\n", getpid()); } } Exemple 3: main() { if (fork() == 0) { /* fils */ printf("je suis le fils, mon PID est %d\n", getpid()); exit(0); } else { /* pere */ sleep(30); } } Lexemple 3 est quivalent : main() { if (fork() == 0) { // fils printf("je suis le fils, mon PID est %d\n", getpid()); exit(0); } sleep(30);} 3.3 Les processus zombi Quand un processus se termine, il dlivre un code de retour (paramtre de la primitive exit()). Par exemple exit(0) donne un code de retour 0. Tout processus qui se termine passe dans ltat zombi tant que son pre na pas pris connaissance de sa terminaison. Voir Exemple 3 exit zombi fils disparu pre bash 22 Aicha KERFALI Anne universitaire 2013/2014 fork sleep bloqu termin

Cours des systmes dexploitation

Filire SMI(S4)

Le temps pendant lequel le processus fils est en tat zombi, il na plus son code ni ses donnes en mmoire; seules les informations utiles pour le pre sont conserves. Il faut viter de garder des processus en tat zombi. Pour cela il faut synchroniser le pre et le fils laide de la primitive wait. 3.4 Synchronisation entre un processus pre et ses fils #include <sys/types.h> #include <sys/wait.h> pid_t wait(int *ptretat) ; Si le processus appelant na aucun fils, la primitive wait renvoie -1. Si le processus appelant possde des fils qui ne sont pas ltat zombie , il est mis en attente jusqu' ce que lun des fils passe dans cet tat. Si le processus appelant possde des fils ltat zombie , la primitive renvoie le PID dun des fils et crit ladresse ptretat un entier qui renseigne sur la faon dont sest termin ce fils (code de retour) Si le processus fils est mort par un appel exit(code), alors loctet de poids faible de ce code est recopi dans loctet de poids fort de lentier point par ptretat (lautre octet est nul). Exemple4 #include<sys/wait.h> int main() { if (fork() != 0) { printf("je suis le pre, mon PID est %d\n", getpid()); while (1) ; /* boucle sans fin sans attendre le fils */ wait(0); } else { printf("je suis le fils, mon PID est %d\n", getpid()); Sleep(2) /* blocage pendant 2 secondes */ printf("fin du fils\n"); exit(0); } } exit zombi pre

fork

Exemple5 #include<sys/wait.h> int pidfils=fork(); if(pidfils!=0) { printf("Je suis le pre \n"); wait(0); } else { printf("arrt du fils \n"); sleep(30); exit(0); } pre fork Exemple 6 #include<sys/wait.h> int pidfils=fork(); if(pidfils!=0) { 23 Aicha KERFALI

exit bloqu

wait

Anne universitaire 2013/2014

Cours des systmes dexploitation printf("Je suis le pre \n"); wait(0); printf("mon fils a termin \n"); // ne sera excute qu'aprs terminaison du fils } else { printf("je suis le fils \n"); sleep(2); printf("arrt du fils \n"); exit(0); }

Filire SMI(S4)

Rsultats dexcution Je suis le pre je suis le fils arrt du fils mon fils a termin $ Si le processus fils est mort par un appel exit(code), alors loctet de poids faible de ce code est recopi dans loctet de poids fort de lentier point par ptretat (lautre octet est nul). Pour que le pre puisse utiliser la mme valeur que son fils, il fait appel WEXITSTATUS(*ptretat) Exemple 7 #include<unistd.h> #include<stdio.h> #include<stdlib.h> #include<errno.h> #include<sys/wait.h> #include<sys/types.h> main(void) { pid_t pid,pidfils ; int status ; printf("Processus pre de PID %d\n ",getpid()) ; switch(pid = fork()) { case -1 : perror("naufrage... ") ; exit(2) ; case 0 : printf(" Dbut du processus fils PID=%d \n ",getpid()) ; sleep(30) ; exit(33) ; default : pidfils = wait(&status) ; /* attention adresse ! ! ! */ printf(" Mort du processus fils PID=%d\n ",pidfils) ; printf(" code de retour :%d\n ",WEXITSTATUS(status)) ; } } Rsultat d'excution Processus pre de PID 3232 Dbut du processus fils PID=3233 Mort du processus fils PID=3233 code de retour :33 3.5 Excution dun programme spcifi sous UNIX #include <unistd.h> 24 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation

Filire SMI(S4)

int execl(const char *ref, const char *arg0,...,(char *)0); Les primitives de la famille exec* permettent un processus de charger en mmoire, en vue de son excution, un nouveau programme binaire. En cas de succs de lopration, il y a crasement du code, des donnes et par consquent aucune marche arrire nest possible. Le processus garde son PID et donc la plupart de ses caractristiques. Il existe plusieurs variante de exec. Pour en savoir plus executez : $man exec Exemple : main(){ if (fork()==0) { printf("fils\n"); execl("/bin/ls","ls","-al","/bin",NULL); //le fils excute ls -al /bin } exit(0) ; }

25 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation

Filire SMI(S4)

Chapitre 3 :
Introduction

Communication entres processus

Il existe diffrents moyens pour faire communiquer les processus sous Unix Les tubes permettent de transmettre un flux de caractres en mode continu entre processus appartenant ou non la mme famille Les files de massages permettent de transmettre des donnes structures entre processus appartenant ou non la mme famille Les sockets permettent une communication entre processus sexcutant sur des machines diffrentes dans un rseau dordinateurs. Les signaux permettent dinterrompre un processus pour excuter une autre tche I- Communication par tubes (pipe) Un tube est un canal de communication inter-processus unidirectionnel (communication dans un seul sens). Un processus crit (producteur) des donnes dans le tube et l'autre les lit (consommateur) dans le tube

criture

lecture

Caractristiques Un tube est gr comme une file FIFO (First In First Out: premier entr premier sorti). Les donnes sont lues dans lordre dans lequel elles ont t crites dans le tube. Les donnes crites dans le tube sont destines un seul processus et ne sont donc lus quune seule fois. la lecture dans un tube est destructive, une fois une donne est lue elle sera supprime. On peut avoir plusieurs processus lisant dans le mme tube mais ils ne liront pas les mmes donnes, car la lecture est destructive. Il existe deux types tubes anonymes: ne permettent que la communication entre processus dans la mme application: entre processus descendant du processus qui a cre le tube. tubes nomms: permettent des communications entre processus quelconques (processus crs dans des application diffrente mais pas ncessairement par le mme utilisateur).

1.1 - Les tubes anonymes


1.1.1 Cration et fermeture dun tube La cration d'un tube correspond celle de deux descripteurs de fichiers, l'un permettant d'crire dans le tube par lopration classique de lecture dans un fichier (write) et l'autre de lire dans le tube lopration classiques dcriture dans un fichier (read). Pour la cration dun type on utilise l'appel systme de la primitive pipe(); #include <unistd.h> int pipe (int p[2]); // tableau p des descripteurs En cas d'chec, cette fonction retourne -1 En cas de succs cette fonction retourne 0. Dans ce cas le tableau p contient les descripteurs des 2 extrmits du tube qui seront utiliss pour accder (en lecture/criture) au tube . Le descripteur d'indice 0 (p[0]) dsigne la sortie du tube, ouvert en lecture seule. Le descripteur d'indice 1 (p[1]) dsigne l'entre du tube, ouvert en criture seule. Exemple: main () { int p[2]; pipe(p); /* cration de tube */ } La fermeture d'un descripteur se fait grce la primitive close() close (int fd)avec fd est le descripteur du flux 26 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation Exemple: close (p [1]); // descripteur en criture non utilis close (p [0]); // descripteur en lecture non utilis

Filire SMI(S4)

1.1.2 criture et lecture dans un tube Lcriture dans un tube se fait grce la primitive write() dont la syntaxe est la suivante: int write (int p[1], void *buf, int Bufsize); P[1] : descripteur du flux buf : un pointeur sur la zone mmoire contenant les donnes crire dans le tube. bufsize: le nombre d'octets que lon souhaite crire dans le tube. En cas de succs cette fonction retourne le nombre d'octets effectivement crits. En cas derreur cette fonction retourne -1 Remarque: La valeur de Bufsize doit tre infrieure la capacit maximale dun tube PIPE_BUF dfinie dans le fichier <limits.h> (cette valeur calculer, elle dpend du systme). Exemple : Le processus crit dans un tube une chane de N caractres #include <stdio.h> #include <stdlib.h> #define N 6 main () { char *c; int p[2]; int nb_ecrits; c=(char *)malloc(N*sizeof(char)); c="ABCDEF"; pipe(p); /* cration de tube */ if ((nb_ecrits=write(p[1],c,6))==-1) { printf("Erreur d'ecriture dans le tube \n"); exit(0); } printf("nb_ecrits = %d \n ", nb_ecrits); } Soit N le nombre doctets libres dans le tube, autrement dit le nombre maximal doctets que lon peut crire encore dans le tube. Si la valeur de Bufsize est suprieure N, le processus sera bloqu jusqu' ce que Bufsize octets soient librs dans le tube. Algorithme dcriture Si nombre de lecteurs dans le tube =0 alors le signale SIGPIPE est envoy au processus Sinon le processus sera bloqu jusqu' ce que Bufsize octets soient librs dans le tube. fsi Un lecteur dans le tube est un processus qui dtient le descripteur de lecture associ ce tube. SIGPIPE arrte lexcution du processus. Ecriture dans un tube ferm en lecture Lorsquun processus tente dcrire dans un tube sans lecteur (descripteur en lecture est ferm), alors il reoit le signal SIGPIPE et il sera interrompu (s'il ne traite pas ce signal). Exemple main () { int p[2]; 27 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation pipe (p); // cration de tube close (p [0]); // descripteur en lecture est ferm printf( Debut d ecritue dans le tube ); if ( write(p[1],"abc" ,3)==-1) printf( erreur ecriture dans le tube); else printf(Pas d erreur); printf( processus termine ); }

Filire SMI(S4)

Rsultat dexcution: Ce programme affiche le message Debut decritue dans le tube et s'arrte. La lecture dans un tube se fait grce la primitive read dont la syntaxe est la suivante: int read (int p[0], void *buf, int bufsize); P[0] : descripteur du flux buf : un pointeur sur une zone mmoire dans laquelle elle seront ranges les donnes aprs lecture. bufsize: le nombre d'octets que lon souhaite lire partir du tube. En cas de succs cette fonction retourne le nombre d'octets effectivement lus. En cas derreur cette fonction retourne -1 Exemple dun processus qui lit et crit dans le mme canal de communication : #include <stdio.h> #include <stdlib.h> #define N 6 main () { char *c, *s; int p[2]; int nb_lus, nb_ecrits; c=(char *)malloc(N*sizeof(char)); s=(char *)malloc(N*sizeof(char)); c="ABCDEF"; pipe(p); /* cration de tube */ if ((nb_ecrits=write(p[1],c,N))==-1) { printf("Erreur d'ecriture dans le tube \n"); exit(0); } printf("nb_ecrits = %d \n ", nb_ecrits); if ((nb_lus=read(p[0],s,N))==-1) { printf("Erreur de lecture dans le tube \n"); exit(0); } else if (nb_lus==0) { printf("pas de caractre lu \n"); exit(0); } printf(" la chane lue est : %s \n", s); } Un lecteur qui tente de lire dans un tube vide trouve les problmes suivants : 28 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation

Filire SMI(S4)

Si le tube na pas de rdacteur (le descripteur en criture est ferm) alors la fonction read retourne 0 caractre lus. Si le tube a un rdacteur alors il reste bloqu jusqu ce que le tube ne soit pas vide.

Algorithme de lecture Si tube non vide et contient N octets alors La primitive extrait nb_lu gale min(N, bufsize) caractres et les place ladrsse buf Sinon Si nombre de rdacteurs =0 alors la primitive renvoie la valeur 0 Sinon le processus est bloqu jusqu tube non vide Fsi Fsi Un rdacteur est un processus qui dtient le descripteur dcriture associ au tube Lecture dans un tube vide ferm en criture (pas de rdacteur) Exemple: Lexemple suivant illustre le cas de la lecture dans un tube vide sans producteur (pas de processus qui crit dans le tube). void main () { char c; int p[2]; int nb_lus; pipe (p); // cration de tube close (p [1]); // descripteur en criture non utilis if ((nb_lus= read(p[0],&c,1))== -1) printf( erreur lecture dans le tube); else if (nb_lus==0) printf(Pas de caracteres lus); printf(processus termine \n); } Rsultat dexcution: Ce programme affiche Pas de caracteres lus, car comme il ny pas de producteur, la fonction read retourne 0. Lecture dans un tube vide avec rdacteur Exemple: Lecture dans un tube vide mais qui a un rdacteur. Lexemple suivant illustre le cas de la lecture dans un tube vide avec producteur. void main () { char c; int p[2]; int nb_lus; pipe (p); // cration de tube if ((nb_lus==read(p[0],&c,1))==-1) printf( erreur lecture dans le tube); else if (nb_lus==0) printf(Pas de caractre lu); printf(processus termine \n); } Rsultat dexcution: Ce programme reste bloqu. 1.1.3 Communication entre 2 processus Les exemples prcdents ont traits le cas o cest le mme processus qui lit et crit dans le tube. On va utiliser l'appel systme fork() pour crer un processus fils 29 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation

Filire SMI(S4)

Si la communication va du pre vers le fils, le pre ferme son descripteur de sortie de tube et le fils ferme son descripteur d'entre de tube.

pre fils
Dans cet exemple le pre envoie un tableau d'entier au fils. Ce dernier reoit le tableau et calcule la somme de ses lments et l'affiche #include <stdio.h> #include <stdlib.h> # define N 10 # define NN N*sizeof(int) main () { int *c, *s; /* on peut utiliser une seule variable */ int p[2]; int i, nb_lus, nb_ecrits, somme=0; c=(int *)malloc(N*sizeof(int)); s=(int *)malloc(N*sizeof(int)); pipe(p); /* cration de tube */ if (fork()!=0) { // le pre for (i=0; i<N; i++) c[i]=i+1; close(p[0]); if ((nb_ecrits=write(p[1],c,NN))==-1) { printf("pid = %d : Erreur d'ecriture dans le tube \n", getpid()); exit(0); } printf("pere pid = %d : nb_ecrits = %d \n ", getpid(),nb_ecrits); } else { // le fils close(p[1]); if ((nb_lus=read(p[0],s,NN))==-1){ printf("Erreur de lecture dans le tube \n"); exit(0); } else if (nb_lus==0) { printf("pas de caractre lu \n"); exit(0); } for (i=0; i<N; i++) somme=somme+s[i]; printf("fils = %d la somme des entiers recus est : %d \n", getpid(),somme); close(p[0]); } } 30 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation

Filire SMI(S4)

Maintenant on veut que le fils calcule la somme et l'envoit au pre pour l'afficher. Pour cela modifier le programme prcdent ( faire en TP)

1.2- Les tubes nomms.


Le problme des tubes anonymes est quils ne permettent pas la communication entre 2 processus quelconques. Il est ncessaire que le processus qui a cr le tube soit un anctre commun aux processus qui utilisent le tube pour communiquer. 1.2.1 Caractristique des tubes nomms Un tube nomm possde un nom dans le systme de fichiers: cest un fichier d'un type particulier. Exemple si toto est un tube nomm, avec la commande ls l on obtient: pwrx--x-r- . toto // p pour tube nomm Un tube nomm conserve toutes les proprits d'un tube: o unidirectionnel o taille limite, o lecture destructive, o lecture/criture ralises en mode FIFO. Un tube nomm permet des processus sans lien de parent dans le systme de communiquer. Tout processus possdant les autorisations appropries peut l'ouvrir en lecture ou en criture. S'il n'est pas dtruit, il persiste dans le systme aprs la fin du processus qui l'a cr. Un tube nomm est utilis comme un fichier normal: on peut utiliser les primitives : open(), close(), read(), write(). 1.2.2 Cration et ouverture dun tube nomms En langage de commande la cration se fait grce la primitive mknod: Exemple: $ mknod toto p // cre le tube nomm toto // p spcifie ''pipe'' Si un processus ouvre un tube nomm en lecture, il sera bloqu jusqu' ce qu'un processus ait ouvert le tube en criture Si un processus ouvre un tube en criture, il sera bloqu jusqu' ce qu'un processus ait ouvert le tube en lecture Pour louverture dun tube nomms, on utilise la primitive open() dfinie comme suit: int open(char *ref, int drapeau) ref : nom du tube nomm ouvrir drapeau : mode d'ouverture O_RDONLY : ouvre uniquement en lecture O_WRONLY : ouvre uniquement en criture O_RDWR : ouvre en lecture et criture En cas de succs, cette fonction retourne un descripteur du flux ouvert avec le mode spcifi En cas derreur, cette fonction retourne -1 Exemple: Deux processus nappartenant pas la mme application et qui communiquent entre eux via un tube nomm toto. Producteur (fichier product.c) #include <stdio.h> #include <fcntl.h> main( ) { int fd; fd = open("toto", O_WRONLY); write(fd, "filiere SMI S4", 14); printf("%d : fin ecriture", getpid() ); }

31 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation Consommateur (fichier consom.c) #include <stdio.h> #include <sys/fcntl.h> main( ) { int fd; char buf[50]; fd = open("toto", O_RDONLY); read(fd, buf, sizeof(buf)); printf("%d]: message recu est : %s \n", getpid(), buf); }

Filire SMI(S4)

Il faut pralablement crer le tube nomm toto dans le systme de fichiers, grce la primitive mknod $ mknod toto p $ ./product & [1] 2190 $ ./consom & 2190 : fin ecriture [1] Done product [1] 2191 2191: message recu: filiere SMI S4 [1] Done consom La fermeture se fait grce la primitive close() int close(int fd) o fd : descripteur du flux o Retourne 0 en cas de succs et -1 sinon La suppression d'un tube nomm se fait grce la primitive unlink() int unlink(const char *pathname) Dans un programme, la cration se fait grce lappel systme: mkfifo() int mkfifo (char *ref, mode_t droits) ref : nom du tube nomm droits : droit daccs au tube nomme. Cette fonction retourne 0 si la cration a russi et -1 en cas d'erreur Exemple: cration de deux tubes nommes toto1 et toto2 #include <stdio.h> #include <stdlib.h> main () { if (mkfifo ("toto1", 0666) == -1) { /* 0: pour octal, 6 pour le droit rw- */ printf ("Erreur de cration e toto1"); exit(0); } if (mkfifo ("toto2", 0666) == -1) { printf ("Erreur de cration de toto2"); exit(0); } sleep (10); printf (on efface le tube toto1\n"); unlink ("toto1"); } 1. Lancer ce programme en arrire-plan 2. Excuter la comande ls-l pour vrifier la cration des deux tubes toto1 et toto2 3 Vrifier la suppression de toto1 aprs la fin du processus 4. Vrifier la prsence de toto2 aprs la fin du processus. 32 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation La cration dans un programme peut se faire aussi grce lappel systme: mknod() Exemple: mkfifo ("toto1", 0666) est quivalent mknod ("toto1", S_IFIFO | 0666,0) #include <stdio.h> #include <sys/stat.h> #include <stdlib.h> main () { printf ("on va crer un tube de nom fifo1 et un tube de nom fifo2\n"); if (mknod ("fifo1", S_IFIFO | 0666,0) == -1) { /* 0: pour octal, 6 pour le droit rw- */ printf ("Erreur de cration e toto1"); exit(0); } if (mknod ("fifo2", S_IFIFO | 0666,0) == -1) { /* S_IFIFO obligatoire */ printf ("Erreur de cration de toto 2"); exit(0); } sleep (10); printf ("On efface le tube toto1\n"); unlink ("fifo1"); }

Filire SMI(S4)

II- Les signaux Un signal permet dinterrompre un processus pour excuter une autre tche. Un processus effectue un travail quelconque, quand il est interrompu par un signal. Chaque signal a une signification particulire, et chaque signal entrane une action par dfaut. Par exemple quand on envoie le signal SIGKILL un processus, il va mourir. Mais dans le cas de SIGCHLD, le processus va ignorer le signal ; dans le cas de SIGSTOP, il va se mettre en pause, etc. mais il est possible de dfinir un comportement particulier adopter. 2.1 Diffrents types de signaux Il existe un certain nombre de signaux, qui ont tous une signification diffrente. Un signal est caractris par son numro de signal (un entier). En programmation, on n'utilise en gnral jamais le numro du signal car chaque systme dexploitation change les numros, pour des raisons varies Souvent, on utilise les constantes telles que SIGINT, SIGCONT, etc. dfinies dans le fichier dentte sys/signal.h. La liste complte des signaux avec les numros correspondant est donne par la commande kill -l. 2.2 Terminologie des signaux Un signal envoy par le noyau ou par un autre processus est un signal pendant : un seul exemplaire d'un mme type de signal peut tre pendant. Si un signal est envoy un processus alors qu'il en existe un exemplaire pendant, il est perdu. Un signal est dlivr (ou pris en compte) lorsque le processus concern ralise laction qui lui est associe et qui peut tre : laction par dfaut : en gnral la mort du processus ignorer le signal laction dfinie par lutilisateur (handler) : le signal est dit capt. Un signal peut galement tre masqu (ou bloqu) : sa prise en compte sera diffre jusqu' ce que le signal ne soit plus masqu. 2.3 Envoi d'un signal On peut envoyer un signal depuis la ligne de commande grce la commande kill du shell dont la syntaxe est : kill [ -signal ] pid. Ou depuis un programme C, grce la primitive kill. #include <sys/types.h> 33 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation

Filire SMI(S4)

#include <signal.h> int kill(pid_t pid,int sig) ; Un tel appel cette primitive a pour effet denvoyer le signal de numro sig au(x) processus dduit(s) de la valeur de pid. Les processus destinataires sont les suivants en fonction de la valeur de pid : <1 tous les processus du groupe |pid| 1 tous les processus du systme(sauf 0 et 1) 0 tous les processus dans le mme groupe que le processus >0 processus didentit pid

La valeur du paramtre sig a linterprtation suivante : < 0 ou > NSIG valeur incorrecte ; 0 pas de signal envoy mais peut tre utilis pour tester lexistence dun processus. sinon signal de numro sig. Les processus metteur et rcepteur doivent avoir le mme propritaire ! ! ! La primitive renvoie 0 ou -1 selon quelle sest droule normalement (0) ou pas (-1). La fonction int raise (int sig) envoie le signal de numro sig donn au processus courant. raise(sig) est quivalent kill(getpid(),sig). unsigned int alarm(unsigned int seconds) permet de programmer l'envoi d'un signal SIGALRM aprs un dlai donn. Exemple Le processus pre teste lexistence de son fils avant de lui envoyer le signal SIGUSR1. #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #include <signal.h> int main(void) { pid_t pid,pidBis; int status; pid = fork(); if(pid==0) while(1) sleep(1); else { sleep(10); if(kill(pid,0) == -1) {printf("processus fils %d inexistant\n",pid); exit(1); } else {printf("envoi de SIGUSR1 au fils %d\n",pid); kill(pid,SIGUSR1); } pidBis=wait(&status); printf("Mort de fils %d avec status=%d\n",pidBis,status); exit(0); } } Rsultat de l'excution $ ./a.out 34 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation envoi de SIGUSR1 au fils 2898 Mort de fils 2898 avec status=10

Filire SMI(S4)

Dans le paramtre status de la fonction wait on a rcupr le numro du signal qui a caus la terminaison du fils. 2.4 Le captage des signaux 2.4.1 traitement des signaux partir d'un programme C Les handlers Un handler est une fonction qui sera excute au moment o le processus va recevoir un certain signal. A la rception d'un signal, le processus peut le traiter de deux faons diffrentes : Si on a dclar un handler, la fonction est excute et laction par dfaut nest pas applique. La primitive signal(numro_signal, fonction_a_appeler) permet de dclarer un handler. Mais il existe une autre fonction plus gnrale que signal mais plus complique utiliser : la primitive sigaction. Si le processus na pas de comportement spcifique prvu, le comportement par dfaut est appliqu La fonction signal permet de spcifier ou de connatre le comportement du processus la rception dun signal donn, il faut donner en paramtre la fonction le numro du signal sig que lon veut dtourner et la fonction de traitement fonction_a_appeler raliser la rception du signal. Trois possibilits pour ce paramtre fonction_a_appeler : SIG_DFL Comportement par dfaut, plusieurs possibilits exit Le processus se termine ignore Le processus ignore le signal pause Suspension du processus continue Reprise du processus si il tait suspendu. SIG_IGN le signal est ignor. les signaux SIGKILL, SIGSTOP ne peuvent pas tre ignors. HANDLER Une fonction de votre choix. Exemple #include <stdio.h> #include <sys/signal.h> void fonction_handler() { printf("Interruption du processus !\n"); } int main() { // Association du handler au signal SIGUSR1 signal(SIGUSR1, fonction_handler) ; // Boucle infinie, pour faire travailler le processus while (1) { sleep(1); printf(".\n"); } } On lance le programme, qui boucle infiniment puis on lui envoie le signal SIGUSR1, grce la commande kill du shell. Pour cela il faut connatre le PID du processus. $ ps -a PID TTY TIME CMD 2891 pts/0 00:00:00 a.out 2892 pts/1 00:00:00 ps $ kill -USR1 2891 ce qui nous donne ce rsultat : . . . . 35 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation . .Interruption du processus ! . . . . .

Filire SMI(S4)

On voit bien que la boucle infinie a t interrompue et que le handler a t excut. Une fois la fonction termine, le processus a continu son excution normale. Il est possible dignorer un signal en mettant comme handler la valeur SIG_IGN. Exemple #include <stdio.h> #include <sys/signal.h> void fonction_handler() { printf("Interruption du processus !\n"); } int main() { // Association du handler au signal SIGUSR1 signal(SIGUSR1, SIG_IGN); // Boucle infinie, pour faire travailler le processus while (1) { sleep(1); printf(".\n"); } } Si on lance l'excution de ce programme a va boucler d'une faon infinie sans interruption mme si on envoie au processus le signal partir de la ligne de commande. La primitive int pause(void) bloque le processus appelant jusqu' l'arriv d'un signal quelconque Exemple : envoi et traitement d'un signal partir d'un programme C. #include <stdio.h> #include <unistd.h> #include<stdlib.h> #include <signal.h> void fonction_handler(int num) { printf("%d %d jai recu un signal\n",getpid(),getppid()); } int main() { int pid; signal(SIGUSR1, fonction_handler); switch(pid = fork()) { case 0: pause(); //le fils attend l'arriv d'un signal break; default: sleep(1); kill(pid, SIGUSR1); //le pre envoit le signal SIGUSR1 au fils sleep(5); } } $./a.out 3173 3172 jai recu un signal 36 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation

Filire SMI(S4)

Exemple Dans cet exemple, on va compter le nombre d'exemplaires reus de chacun des signaux pour lesquels on peut redfinir le comportement. #include <stdio.h> #include <signal.h> #include <unistd.h> void handler(int); int nsig[NSIG]; int main(void) { int s; printf("le nombre de signaux est %d\n",NSIG); for (s = 1; s < NSIG; s++) { if (signal(s, handler) == SIG_ERR) fprintf(stdout, "Je ne peux pas attraper signal no %d\n", s); nsig[s] = 0; } while (1); } void handler(int s) { printf("Signal %d recu %d fois\n", s, ++nsig[s]); } Rsultat d'une excution $./a.out le nombre de signaux est 65 Je ne peux pas attraper signal no 9 Je ne peux pas attraper signal no 19 Je ne peux pas attraper signal no 32 Je ne peux pas attraper signal no 33 Signal 2 recu 1 fois <-------------------------^C Signal 2 recu 2 fois <-------------------------^C Signal 12 recu 1 fois<------------------------- kill -USR2 3429 Signal 12 recu 2 fois<-------------------------kill -USR2 3429 Signal 12 recu 3 fois<------------------------- kill -USR2 3429 Signal 10 recu 1 fois<------------------------- kill -USR1 3429 Signal 10 recu 2 fois<-------------------------kill -USR1 3429 [1]+ Stopp ./a.out <----------------kill -STOP 3429 kerfali@kerfali-HP-620:~/SIG$ Signal 18 recu 1 fois <-----------kill -CONT 3429 [1]+ Processus arrt ./a.out<------------ kill -KILL 3429

2.4.2 Manipulation des signaux partir du shell On peut galement manipuler les signaux directement dans le shell, en associant un traitement un ou plusieurs signaux. Pour cela on utilisera la commande trap : $ trap commande numro_de_signal ... $ trap who 2 15 $ trap "echo signal 3 recu" 3 $ Si le signal 2 ou 15 arrivent, la commande who sera lance. Si le signal 3 arrive, cest la commande "echo signal 3 recu" qui sera lance. Vous pouvez voir les diffrents traitements associs aux signaux en tapant : 37 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation $ trap 2:who 3:echo signal 3 recu 15:who $ Lorsquun signal est associ son traitement par dfaut, rien nest affich. Pour ignorer un signal, vous pouvez taper : $ trap " " 2 $ trap 2: 3:echo signal 3 recu 15:who $

Filire SMI(S4)

Exemple $ trap pwd 2 15 $ trap "echo signal 3 recu" 3 $ ps PID TTY TIME CMD 2822 pts/0 00:00:00 bash 3017 pts/0 00:00:00 ps $ kill -15 2822 /home/kerfali $ kill -2 2822 /home/kerfali $ kill -3 2822 signal 3 recu $ 2.5 Le masquage des signaux Manipulation des ensembles de signaux Le type sigset_t correspond de tels ensembles. Des fonctions sont disponibles pour construire et manipuler les ensembles de signaux avant de mettre en place un masquage collectif de ces signaux ou une suppression du masque courant. Fonction int sigemptyset(sigset_t *p_ens) ; int sigfillset(sigset_t *p_ens) ; int sigaddset(sigset_t *p_ens,int sig); int sigdelset(sigset_t *p_ens,int sig); int sigismember(sigset_t *p_ens,int sig); effet *p_ens={} *p_ens={1,...,NSIG} *p_ens=*p_ensU{sig} *p_ens=*p_ens-{sig} sig est dans *p_ens

Chacune de ces fonction renvoie 1 en cas derreur, 0 sinon sauf la fonction sigismember, elle renvoie 0 ou 1 selon que sig appartient ou non *p_ens. La primitive sigprocmask #include <signal.h> int sigprocmask(int opt, const sigset_t *new, sigset_t old) ; Cette primitive permet linstallation manuelle dun masque partir de lensemble point par new et ventuellement du masque antrieur que lon rcupre au retour de la primitive ladresse old si le troisime paramtre nest pas le pointeur nul. Le paramtre opt prcise ce que lon fait avec ces ensembles :

38 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation Valeur du paramtre opt Nouveau masque SIG_SETMASK *new SIG_BLOCK *new U *old SIG_UNBLOCK *old - *new La valeur de la fonction est 0 ou -1 selon qu'elle est ou non bien droule liste des signaux pendants masqus La primitive sigpending #include <signal.h> int sigpending(sigset_t *ens) ; Ecrit ladresse ens la liste des signaux pendants qui sont masqus(bloqus). La valeur de la fonction est 0 ou -1 selon qu'elle est ou non bien droule Exemple #include <stdio.h> #include <signal.h> #include <unistd.h> #include<stdlib.h> sigset_t ens1,ens2; int sig; main() { sigemptyset(&ens1); sigaddset(&ens1,SIGINT); sigaddset(&ens1,SIGQUIT); sigaddset(&ens1,SIGUSR1); printf(" les numero des sisgnaux %d %d %d\n",SIGINT,SIGUSR1,SIGQUIT); sigprocmask(SIG_SETMASK, &ens1,NULL); raise(SIGINT); kill(getpid(),SIGINT); kill(getpid(),SIGUSR1); sigpending(&ens2); printf("signaux pendants:"); for(sig=1;sig<NSIG;sig++) if (sigismember(&ens2,sig)) printf("%d....",sig); putchar('\n'); sigemptyset(&ens1); sigprocmask(SIG_SETMASK, &ens1,NULL); printf("Fin du processus\n"); exit(0);}

Filire SMI(S4)

Rsultat $ ./a.out les numero des sisgnaux 2 10 3 signaux pendants:2....10.... $ on voit bien que le dernier affichage n'a pas t execut parce le processus a t interrompu aprs dbloquage des signaux au niveau de l'instruction sigprocmask(SIG_SETMASK, &ens1,NULL);. Pour la suppression du masquage, on pouvait garder le mme ensemble ens1 et faire : sigprocmask(SIG_UNBLOCK,&ens1,&ens1); 2.6 Quelques signaux intressants SIGHUP Suspendre (Hang up). ce signal est envoy automatiquement au processus si on ferme le terminal auquel il est attach. 39 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation

Filire SMI(S4)

SIGINT Interrompre (Interrupt) partir du clavier. Ce signal est mis si vous pressez ^C. SIGQUIT Quitter (Quit) partir du clavier. Ce signal est mis si vous pressez ^D. SIGFPE Exception de virgule flottante (floating point exception). Ce signal est transmis automatiquement un programme ralisant certaines oprations mathmatiques non-permises. SIGKILL Tue (kill) un processus. Ceci est un des signaux qui ne peuvent jamais tre trait par un processus. Si un processus reoit ce signal, il doit imprativement quitter et ne raliser aucune opration de nettoyage (telle que fermer les fichiers ou enlever des fichiers temporaires). Vous pouvez envoyer un signal SIGKILL un processus s'il n'y a pas d'autre moyen de le terminer. SIGUSR1 ,SIGUSR2 Signal d'utilisateur (User signal). Ces signaux sont utiliss par les dveloppeurs lorsqu'ils souhaitent des fonctionnalits supplmentaires. Par exemple, certains processus commencent consigner des messages de dbogage quand vous envoyez SIGUSR1. SIGSEGV Violation de segmentation (segmentation violation). Ce signal est mis automatiquement quand un processus essaie d'accder de la mmoire en dehors de l'espace des adresses alloues. SIGPIPE Tube inactif (pipe died). Un programme a essay d'crire dans un tube, mais la sortie de ce dernier n'tait plus disponible. SIGTERM Terminaison (terminate): conduit un programme terminer proprement. SIGCHLD Terminaison des processus-fils (child terminate). Ce signal est envoy un processus-parent chaque fois qu'un des processus qu'il a engendr s'teint.

40 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation

Filire SMI(S4)

Chapitre 4 : Synchronisation des processus


Les processus dans les systmes ne sont pas indpendant les un des autres car ils peuvent partager des ressources. Des ressources peuvent tre accessibles par plusieurs processus la fois. Des ressources ne peuvent tre accessibles que par un seul processus la fois: on parle de ressource critique. Lorsque deux ou plusieurs processus sont en comptition pour le partage dune ressource critique, ont dit quils sont des processus concurrents. Les instructions du processus qui permettent daccder la ressource critique en lecture ou en criture forme ce quon appelle la section critique.

I- Problmes de partage des ressources


Exemple 1 Soient p1 et p2 deux processus concurrents. Chaque processus veut dcrmenter une variable V dans lespace dadressage qui lui est propre. Supposons la valeur initiale de chaque variable est v0. Chaque processus excute les instructions suivantes: partie du programme p1(A1) /* x dans lespace de p1*/ 1. x=V-1; 2. V=x; partie du programme p2(A2) /* x dans lespace de p2*/ 1. x=V-1; 2. V=x;

Alors la valeur finale de la variable V pour chaque processus est gale v0-1. Exemple2 Soient p1 et p2 deux processus concurrents qui veulent dcrmenter une variable partag V. Supposons que la valeur initiale de V est v0. Supposons que chaque processus excute les instructions suivantes: partie du programme p1 (A1) /* x dans lespace de p1 */ 1. x=V-1; 2. V=x; partie du programme p2 (A2) /* x dans lespace de p2 */ 1. x=V-1; 2. V=x;

Quelle est la valeur finale de V ? Premier scnario Supposons que cest le p1 qui commence lexcution et que lordonnanceur ne commute les tches est alloue le processeur p2 quaprs la fin dexcution de linstruction (2. V=x). dans ce cas la valeur de V aprs la fin du p1 est gale v0-1 et aprs la fin dexcution de p2, la valeur de V devient v0-2. Deuxime scnario Supposons que cest le p1 qui commence lexcution. p1 lit la valeur initiale v0 puis effectue lopration x=V-1. Avant que p1 crit la nouvelle valeur dans la variable V (instruction V=x), lordonnanceur commute les tches et alloue le processeur p2. p2 lit la valeur initiale de V (soit v0) et effectue les oprations x=V-1; et V=x. La nouvelle valeur de V devienne v0-1. Lordonnanceur ractive le premier processus p1 qui continue son excution au point o il tait arrt, cest--dire effectue lopration V=x, avec la valeur de x qui est v0-1. Les oprations dans processus sont effectues dans lordre suivant: p1.1; p2.1; p2.2; p1.2. Donc aprs lexcution des instructions dans cet ordre, la valeur finale de V est gale v0-1. ( au lieu de v0-2 ce qui tait attendu). Problme : Accs concurrent une variable partage. Pour lviter, on doit synchroniser les tches: sassurer que lensemble des oprations sur cette variable (accs + mise jour) est excut de manire indivisible (atomique). Par exemple on impose que p2 ne doit commencer son travail quaprs la fin dexcution de p1. 41 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation

Filire SMI(S4)

Si A1 et A2 sont atomiques, le rsultat de lexcution de A1 et A2 ne peut tre que celui de A1 suivie de A2 ou de A2 suivi de A1. On dit aussi que les squences dactions <1; 2 > (dans p1 et p2) est une section critique. Une section critique est excute en exclusion mutuelle (un seul processus au plus peut tre dans sa section critique un instant donn). II- Solution de la section critique Plusieurs solutions ont t propos pour rsoudre le problme de l'accs concurrent une ressource partage. La solution doit vrifier certaines conditions : Exclusion : tout instant, un processus au plus est en section critique ; Accs : si plusieurs processus sont bloqus lentre dune section critique libre, lun deux doit y entrer au bout dun temps fini ; Indpendance : le blocage par cette section critique doit tre indpendant des autres types de blocage, donc si un processus est bloqu hors de la section critique, il ne doit pas empcher un autre processus dy entrer ; Uniformit : aucun processus ne doit jouer de rle privilgi; ils doivent tous utiliser les mmes mcanismes. Considrons n processus qui partage la mme ressource. Le programme sous jacent chaque processus a la structure suivante: Rpter Section restante Section critique Jusqu faux Pendant lexcution parallle de p1,p2, et pn, il est possible que plusieurs processus soient un instant donn entrain dexcuter une instruction de leur section critique. Les solutions que nous allons prsenter ajoutent aux programmes sous-jacent deux groupes dinstructions : Section dentre dans la section critique et Section de sortie dans la section critique Rpeter Section restante Section dentre Section critique Section de sortie jusqu faux Plusieurs algorithmes ont t proposs pour rsoudre le problme de la section critique. Chaque algorithme a des avantages et des inconvnients. 2.1 Solution avec attente active tour une variable partage par P1 et P2 initialise 1 L'excution parallle de P1 et P2 est exprimer par : Parbegin P1;p2 Parend p1 p2 Rpter Rpter Section restante1 Section restante2 Tant que tour=2 faire rien; Tant que tour=1 faire rien; Section critique1 Section critique2 Tour<--2 Tour<--1 Jusqu faux Jusqu faux Avec cet algorithme, les processus ne peuvent entrer tous les deux en section critique Inconvnient 42 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation

Filire SMI(S4)

Supposons que p1 est dans <section restante> et tour=1,p2 ne peut pas entrer dans sa section critique. Il doit attendre que p1 excute sa section critique et met tour 2. L'attente sur while est une attente active.

Exemple Soit p1 et p2 deux processus qui partagent un tableau dentiers. Leurs programmes sous -jacent sont les suivants: p1 Section restante1 remplir le tableau T suite1 p2 Section restante2 afficher le tableau T suite2

Si on lance lexcution parallle de p1 et p2, on ne sait pas lequel des processus va commencer. Par consquent, il se peut que p2 affiche le tableau avant quil soit rempli par p1. Si on veut que la partie remplir le tableau T du processus p1 soit excut avant la partie afficher le tableau T de p2, il faut synchroniser les deux processus : Tour=1 p1 P2 Section restante1 Section restante2 Tant que tour=2 faire rien; Tant que tour=1 faire rien; remplir le tableau T afficher le tableau T tour<--2 Tour<--1 suite1 suite2 2.2- Solution avec les smaphores Dfinition :un smaphore S est une variable de type entier, laquelle il nest possible daccder que par deux oprations appele P et V P(S): tant que s=0 faire rien; S=S-1 V(S): S=S+1 On ajoute parfois lopration Init(S,valeur). Le teste et la modification de la variable smaphore se font de manire indivisible. On initialise le smaphore s_mut 1 pour assurer lexclusion mutuelle de n processus sexcutant en parall le. Le programme sous-jacent chaque processus est le suivant: Rpeter Section restante P(s_mut) Section critique V(s_mu) Jusqu faux Le premier processus qui excute P(s_mut) trouve la valeur de s_mut 1, fait passer cette valeur 0 peut donc entrer dans sa section critique .Un autre processus qui excute P(s_mut) doit attendre que le premier processus excute V(s_mut) pour quil puisse entrer dans sa section critique. Ce qui donne naissance au problme de lattente active. Pour viter ce problme il faut changer la dfinition des smaphores et des oprations P et V. Type semaphore=enregistrement valeur:entier liste_dattente des processus fin P(s:semaphore):si s.valeur<=0 alors 43 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation dbut <ajouter le processus s.liste_dattente> <mettre le processus en attente> fin sinon s.valeur=s.valeur-1 finsi V(s:semaphore):si s.liste_dattente non vide alors debut <choisir et enlever un processus de s.liste_dattente> <faire passer ltat prt le processus choisi> fin sinon s.valeur=s.valeur+1 finsi

Filire SMI(S4)

Les oprations P et V sur un smaphore sont supposs tre excutes de manire indivisible. Ceci signifie que, pendant quun processus excute une opration P ou V sur un smaphore S, aucun autre processus ne peut excuter P ou V sur ce mme smaphore S. La solution au problme de la section critique avec la seconde dfinition est obtenue de mme faon quavec la premire. La seule diffrence concerne ltat du processus: un processus qui excute lopration P(S) et trouve S.valeur ngative ou nulle effectue une attente passive puisquil est plac en tat bloqu. Ce blocage se poursuis jusqu ce quun processus excute V sur le mme smaphore et quil soit choisi. Les smaphores sont un moyen gnral pour rsoudre les problmes de synchronisation. On peut bloquer un processus sur une opration P tant quune condition nest pas ralise. Si la condition est ralise, un processus le signale aux autres en excutant lopration V, qui rveille lun des processus en attente. La solution pour l'exemple prcdent avec l'utilisation des smaphores est la suivante : Soit mut un smaphore initialis 0 p1 Section restante1 remplir le tableau T V(mut) suite1 p2 Section restante2 P(mut) afficher la tableau T suite2

p(mut) permet de bloquer p2 tant que p1 na pas encore rempli le tableau Aprs le remplissage du tableau, p1 excute V(mut) et dbloque le processus p2 afin dafficher le tableau T

44 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation

Filire SMI(S4)

Chapitre 5 : Ordonnancement des processus


Introduction
Dans un ordinateur monoprocesseur multiprogramm, les processus peuvent se trouver dans diffrents tats: Prts: Ils nont besoin que de la ressource processeur pour pouvoir sexcuter. Plusieurs processus se trouvent en concurrence pour lobtention du processeur. En effet, un processeur ne peut excuter quune seule instruction la fois et ne peut donc soccuper que dun processus un instant t. Bloqus: les processus nont pas besoin immdiatement du processeur pour sexcuter. Ils sont en attente dun vnement pour passer de ltat bloqu ltat prt. En excution: Un seul processus occupe le processeur linstant t. Ds quun processus occupe le processeur, il souhaite le garder le plus longtemps. Ds quun processus est prt, il souhaite avoir le processeur le plus vite possible. Donc, il y a un conflit dintrt. Le problme est comment choisir le processus qui pourra utiliser le processeur. On appelle ordonnancement la stratgie d'attribution du processeur aux processus qui en font la demande. LOrdonnanceur (scheduler) est la partie du noyau qui soccupe de lordonnancement des processus. Pour effectuer cette tche, il utilise un algorithme dordonnancement (scheduling algorithm) qui dtermine lordre de traitement des processus par le processeur selon des critres. Le principe de lordonnancement sapplique galement aux diffrents threads dun mme processus.

I- Quand faut-il ordonnancer ?


Ordonnancer cest allouer le processeur un nouveau processus. Il y'a diffrents moments o il est ncessaire d'ordonnancer : A la cration d'un processus : Il faut dcider si l'on doit d'abord excuter le processus enfant ou parent. A la fin d'un processus : Il faut dcider quel est le processus suivant excuter. Lors du blocage d'un processus : Souvent, un processus se bloque car il est en attente d'une entre/sortie pour poursuivre son excution. Dans ce cas on slectionne un nouveau processus excuter. Lors d'une interruption d'entre / sortie : Il faut dcider si l'on relance immdiatement le processus qui tait en attente de cette E/S o si on laisse le processus courant se poursuivre. Rgulirement : Il faut changer le processus actif afin qu'il ne monopolise pas l'ensemble du temps processeur. Ce changement peut avoir lieu des frquences diffrentes : aprs excution de n instructions, chaque interruption dhorloge, D'une faon gnrale, l'ordonnancement a plusieurs objectifs : Sassurer que chaque processus en attente dexcution reoive sa part de temps processeur. Minimiser le temps de rponse : lutilisateur devant sa machine ne doit pas trop attendre Le processeur doit tre utilis 100% Prendre en compte des priorits. Il faut exploiter au maximum le systme Ces objectifs sont parfois complmentaires, parfois contradictoires : augmenter la performance par rapport lun dentre eux peut se faire en dtriment dun autre. Il est impossible de crer un algorithme qui optimise tous les critres de faon simultane.

II- Environnement et catgories d'algorithmes d'ordonnancement


Pour les systmes informatiques, on distingue 3 types d'environnements : Environnement de traitements par lots dans lesquels Il n'y a pas d'utilisateur en attente. pour amliorer les performances, on diminue le nombre de changements de processus. Environnement interactif dans lequel un utilisateur interagit avec le systme. il faut permettre l'excution de programmes pas forcment interactifs et empcher un processus de monopoliser le processeur. 45 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation

Filire SMI(S4)

Environnement temps rel dans lequel la contrainte de temps est trs importante. Ainsi les tches doivent pouvoir s'excuter quasi immdiatement, elles ne peuvent pas se permettre d'avoir du retard. Dans chacun des environnements, on peut distinguer deux catgories dalgorithmes d'ordonnancement Algorithme dOrdonnancement sans rquisition (non premptif): slectionne un processus qui continue sexcuter jusqu la fin (soit il termine ou il se bloque sur une E/S ou en attente dun autre processus). Cet algorithme est inefficace: exemple un processus qui excute une boucle infinie. Algorithme dOrdonnancement avec rquisition (premptif) : Chaque signal dhorloge, il dcide si le processus courant a consomm son quantum de temps machine et alloue ventuellement le processeur un autre processus 2.1 L'ordonnancement sur les systmes de traitement par lots Les algorithmes que nous prsentons ici ne conviennent quaux systmes de traitement par lots. 2.1.1 L'algorithme du premier arriv, premier servi (first come first served) C'est l'algorithme le plus simple, il est non premptif. Lordre daccs au processeur est rglement suivant lordre d'arrive des processus. Le choix d'un nouveau processus ne se fait que sur blocage ou terminaison du processus courant. Le processus actif occupe le processeur autant qu'il le souhaite. Les autres processus se trouvent alors dans une file d'attente. Lorsque le processus actif se bloque ou termine, il sera plac la fin de la file d'attente et le premier processus de la file rquisitionne le processeur. Cest un algorithme simple comprendre et programmer (lquit bas sur le premier arriv le premier servi). Inconvnients: par exemple, certaines tches rapides devront attendre longuement la fin des tches prcdentes. 2.1.2 Excution du job le plus court C'est un algorithme non premptif. Il oblige connatre lavance les temps dexcution des jobs (tches). Le principe est donc de donner la priorit aux tches les plus courtes. Exemple : Supposons quon a 4 job A, B, C, D. Leurs temps dexcution respectifs en minutes sont: 4, 8, 4 et 4. Supposons aussi que les 4 jobs sont tous disponibles.

A 4

C 4

D 4

B 8

avec ordonnancement Temps

Temps moyen: 1/4(tA+tC+tD+tB)=11 Avec tA=4, tC=4+4, tD=4+4+4 et tB= 4+4+4+8 Est si tous les jobs ne sont pas disponible ? Supposons quon a 5 jobs A, B, C, D et E. Leurs temps dexcution et d'arriv sont donns par le tableau suivant :

46 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation

Filire SMI(S4)

Suivant l'algorithme du job le plus court, Le temps de rponse (le temps de sjour) de chaque processus est donn par le tableau suivant :

Le temps de rponse est obtenu en soustrayant le temps d'arriv du temps de terminaison du processus. Dans ce cas le temps moyen = (3+8+3+6+12)/5=6,4. 2.1.3 L'algorithme de l'excution du temps restant suivant le plus court C'est un algorithme premptif qui se base sur le prcdent. Son objectif est de choisir la tche dont le temps d'excution restant est le plus court parmi les autres. Le temps d'excution restant doit tre connu. Si une nouvelle tche est cre et que son temps d'excution total est plus court que le temps restant de la tche en cours, la tche en cours est suspendue pour laisser la place au nouveau job (premption). L'avantage principal de ce principe est qu'il favorise les tches courtes, ce qui est important sur des systmes de traitements par lots. 2.2 L'ordonnancement sur les systmes interactifs Ces algorithmes peuvent tre appliqus aussi au traitement par lots. 2.2.1 L'algorithme du tourniquet (round robin, circulaire) Cet algorithme est ancien et trs simple. C'est galement le plus quitable (tous les processus ont la mme priorit) et un des plus utiliss. De plus, il est relativement simple implmenter. Son principe est d'assigner un intervalle de temps d'excution unique (un quantum dexcution) chaque processus.

Cet algorithme alloue le processeur au processus en tte de file (cette file contient les processus prt), pendant un quantum de temps. Si le processus se bloque ou se termine avant la fin de son quantum, le processeur est immdiatement allou un autre processus (celui en tte de file). Si le processus ne se termine pas au bout de son quantum, son excution est suspendue. Le processeur est allou un autre processus (celui en tte de file) et ainsi de suite. Le processus suspendu est insr en queue de file. Les processus qui arrivent ou qui passent de ltat bloqu ltat prt sont insrs en queue de file. La problmatique centrale de cet algorithme est donc la dure de l'intervalle de temps d'excution (quantum). Chaque changement de processus (changement du contexte d'excution appel aussi commutation) ncessite un certain nombre de tches administratives coteuses en terme de temps (enregistrement et chargement des registres, vidage et chargement du cache mmoire ). Exemple: Si la commutation ncessite 1ms et le quantum 4ms 20% du temps processeurs perdu dans la commutation. Pour amliorer lefficacit, on peu augmenter la dure du quantum. Par exemple si le quantum dure 99 ms le temps perdu nest dun 1%. Dans ce cas se pose le problme de temps de rponse. 47 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation

Filire SMI(S4)

Par exemple, si 10 processus (10 utilisateurs) en attente, le dernier utilisateur doit attendre 1s pour pouvoir excuter une commande. Problme=rglage du quantum quantum trop petit: le processeur passe son temps commuter quantum trop grand: augmentation du temps de rponse dune commande (mme simple) Il faut donc trouver la dure de quantum idal en fonction de ce temps ncessaire au changement de processus et du type de tches que souhaite raliser l'utilisateur. Un compromis raisonnable semble tre un quantum d'environ 50 ms. 2.2.2 Ordonnancement avec priorit Lalgorithme round robin permet une rpartition quitable du processeur. Cependant il nest pas intressant si certains processus sont plus importants ou urgents que dautres. Lordonnancement avec priorit donne chaque processus un niveau de priorit. Le processus excuter est celui qui dtienne la priorit la plus lev (le plus prioritaire). On doit avoir plusieurs files dattente par niveau de priorit. Les processus dans chaque file dattente ont la mme priorit. Chaque processus possde un niveau de priorit qui lui est propre. Les processus s'excutent alors dans l'ordre de leurs priorits. Par exemple les processus qui font beaucoup dentre sortie, il est judicieux de leur donner la priorit de sexcuter (il passe le maximum de leurs temps en entre sortie qui peut tre excut simultanment avec un autre processus). Risque: les processus prioritaires peuvent sexcuter indfiniment Pour viter ce phnomne, on peut baisser rgulirement le niveau de priorit du processus en cours d'excution. Ainsi, lorsque sa priorit n'est plus la plus forte, il se repositionne dans la queue de la file ayant la mme priorit que la sienne L'assignation des priorits aux processus peut se faire soit de faon manuelle par les utilisateurs autoriss sur le systme d'exploitation, soit de faon automatique. En pratique, les processus sont regroups en catgories de priorits. Les processus ayant la mme priorit se retrouvent donc dans le mme groupe de processus. Les processus de mme priorit sont grer par un algorithme de type tourniquet.

En tte de la file dattente

Les processus excutables

Priorit 3

Priorit suprieure

Priorit 2

Priorit 1

H
48

Priorit infrieure

Aicha KERFALI

Anne universitaire 2013/2014

Cours des systmes dexploitation

Filire SMI(S4)

Les processus A, B et C vont tre excuts en premier. Une fois que la catgorie de priorit 3 sera vide, les processus de la catgorie de priorit 2 pourront tre excuts. Il faut par contre penser revoir les priorits car sinon les catgories de priorit infrieures subiront une privation de ressources. Ordonnancement "plus court dabord" Ordonnancement plus court dabord (voir ordonnancement sur les systmes des traitements par lots) Estimation de la dure de chaque processus en attente Excuter le processus le plus court Mthode optimale si les processus sont disponibles immdiatement. Il faut donc trouver le job le plus court parmi ceux qui doivent tre excuts. La solution peut tre de se baser sur des comportements antrieurs des mmes processus.

B 8

F 4

D 4

A 4

Sans ordonnancement

Temps moyen: (tB+tF+tD+tA)=14 Avec tB=8, tF=8+4, tD=8+4+4 et tA= 8+4+4+4

F 4

D 4

A 4

B 8

avec ordonnancement

Temps moyen: (tF+tD+tA+tB)=11 Avec tF=4, tD=4+4, tA=4+4+4 et tB= 4+4+4+8

III- Ordonnancement dans le systme linux


3.1 Politiques utilises Sous linux, il existe trois politiques dordonnancement : SCHED_FIFO : pour un processus temps rel non premptif SCHED _RR : pour un processus temps rel premptif SCHED _OTHER : pour un processus ordinaire (temps partag) Les trois files accueilleront les processus prts appartenant aux trois types. Les processus de la file SCHED_FIFO sont plus prioritaires que ceux de la file SCHED _RR qui eux-mmes sont plus prioritaires que ceux de la file SCHED _OTHER En Linux, chaque processus se voit attribuer une politique dordonnancement. Dans tous les cas, le processus possde aussi une valeur de priorit, variant de 1 40. Plus la valeur est leve, plus la priorit est haute. Par dfaut, un processus utilisateur a une valeur de priorit de 20. Il est possible, pour un processus, de modifier sa priorit, en utilisant lappel systme nice(valeur), o valeur est un nombre compris entre -20 et 20. Si la valeur est positive, on diminue dautant la priorit du processus. Rciproquement, si la valeur est ngative, on augmente la priorit. noter que seul root peut augmenter la priorit dun processus. Quel que soit sont type un processus Linux est insr dans la file associe son type selon sa priorit. tout moment, le processus de type x le plus prioritaire se trouve en tte de la file du mme type. Temps rel La politique dordonnancement SCHED_FIFO, garantit au processus une utilisation illimite du proc esseur. Il ne sera interrompu que dans une des circonstances suivantes : Le processus se bloque sur un appel systme ou se termine. Un autre processus de la classe SCHED_FIFO de priorit plus leve est prt. Dans ce cas le processus actuel est remplac par celui-ci. Le processus libre lui-mme le processeur, en excutant lappel systme sched_yield(). 49 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation

Filire SMI(S4)

Rien nest plus prioritaire quun processus de la classe SCHED_FIFO, lexception dun autre processus de la mme classe qui possde une valeur de priorit suprieure. La politique dordonnancement SCHED_RR, est, contrairement la premire, premptive. Chaque processus de cette classe se voit attribuer un quantum (temps limite dexcution). Lorsque ce quantum sera coul, le contrle sera donn un autre processus de mme priorit de la classe SCHED_RR, sil y en a un, en appliquant lalgorithme du tourniquet. noter que le tourniquet ne se fait quavec des processus de mme priorit. Ainsi, si deux processus de la classe SCHED_RR avec priorit 20 sexcutent, ils alterneront dans le processeur. Si entretemps apparat un processus de la mme classe, mais de priorit 25, cest ce dernier qui prend le contrle du processeur et ne le redonnera que lorsquil se terminera. moins, bien sr, que napparaisse un autre processus SCHED_RR de priorit suprieure ou gale, ou encore un processus SCHED_FIFO. Le quantum attribu un processus de la classe SCHED_RR est variable et tabli selon les mmes principes que ceux appliqus aux processus temps partag, dcrits la section suivante. Temps partag Nous avons vu, la section prcdente, les deux politiques dordonnancement en temps rel offertes par Linux. Il nous reste maintenant voir la dernire politique dordonnancement, qui regroupe tous les processus de la classe OTHER. Les processus de cette classe se partagent le processeur de manire ingale, selon leur priorit et leur usage du processeur. Premirement, comme nous lavons dj dit, chaque processus possde une valeur de priorit qui l ui est attribue au moment de sa cration. Cest ce que nous appellerons la priorit statique. Initialement, on attribue chaque processus un quantum dont la valeur utilise une unit de temps qui correspond normalement 10ms. La valeur initiale du quantum est gale la valeur de priorit. Ainsi, un processus de priorit 25 aura un quantum de 25 units, ce qui correspond 250 ms. Ce quantum est le temps allou au processus. chaque 10 ms, on diminue de 1 la valeur du quantum du processus en cours dexcution dans le processeur. Chaque fois que lordonnanceur est appel, une note est attribue tous les processus. Cette note, comme nous le verrons la section suivante, dpend la fois de la priorit du processus et de la valeur actuelle de son quantum. Cest cette note qui permettra de dterminer quel processus prendra le contrle du processeur. ventuellement, on peut arriver une situation o tous les processus sont dans une des deux situations suivantes : Son quantum est 0. Il a coul tout le temps qui lui tait allou. Il est bloqu. Il na pas ncessairement puis son quantum. Dans ce cas, tous les quantums (y compris les quantums des processus en attente qui ont encore une valeur non nulle) sont rajusts selon la formule suivante : Quantum Quantum /2+priorit Ceci a pour effet de favoriser les processus qui nont pas utilis tout le temps qui leur est allou. En effet, un processus qui na pas puis son quantum se retrouve avec un nouveau quantum plus lev que lancien. Comme nous le verrons dans la prochaine section, un processus qui voit son quantum augmenter peut se retrouver avec une meilleure note lorsque vient le moment de choisir un processus excuter. Algorithme dordonnancement Lorsque lordonnanceur est appel, Linux attribue une note chaque processus prt, en utilisant la mthode suivante : Si le processus est de la classe SCHED_FIFO ou SCHED_RR Note = 1000 + priorit Sinon Si Quantum Note = Quantum + Priorit Sinon Note = 0 On remarquera quun processus membre dune des deux classes de temps rel aura toujours priorit sur les autres. En effet, puisque le quantum ne peut dpasser le double de la priorit du processus, et que la valeur maximale de la priorit dun processus est 40, on naura jamais une note suprieure 120 pour un processus de la classe OTHER, ce qui est nettement infrieur au minimum de 1000 pour un processus temps rel. 50 Aicha KERFALI Anne universitaire 2013/2014

Cours des systmes dexploitation

Filire SMI(S4)

On remarquera aussi quun processus qui a coul tout son quantum reste en attente tant quil y a des processus qui peuvent sexcuter. Comme nous lavons dj dit, il ne se verra attribuer un nouveau quantum que lorsque tous les autres processus auront puis leur quantum ou seront bloqus. Exemple Supposons trois processus A, B et C, tous de la classe OTHER, et dont les priorits sont les suivantes : Processus A B C Priorit 20 18 10 Supposons quils arrivent tous dans le systme au mme moment et quils sont seuls. A et B sont des processus qui sinterrompent pour faire des appels systme bloquant, alors que C ne se bloque jamais. Initialement, cest videmment le processus A qui a la meilleure note. Processus Note A 20+20=40 B 18+18=36 C 10+10=20

Cest donc lui qui est excut, ayant droit 200 ms. Supposons maintenant quil sinterrompt aprs 160 ms pour excuter un appel systme bloquant. Le systme doit maintenant choisir entre B et C. B est lu et sexcute pendant 40 ms (lui aussi se bloque sur un appel systme). ce moment, le processus C prend le contrle et utilise toutes les 100 ms qui lui sont accordes. On se retrouve alors dans la situation suivante : A et B sont toujours bloqus, et C a un quantum nul. Le systme ralisera donc un rajustement du quantum. Les processus se verront attribuer les nouvelles valeurs suivantes (rappelons quil reste 40 ms A et 140 ms B) : Processus A B C Nouveau quantum 4/2 + 20 = 22 14/2 + 18 = 25 0/2 + 10 = 10 Comme A et B sont toujours bloqus, l'ordonnanceur choisit C pour tre excut nouveau. Supposons maintenant que A et B redeviennent prts durant ce temps. Dans ce cas l'ordonnanceur ne va pas interrompe le processus C, mais il va le laisser puiser son quantum (100ms). De nouveau, pour choisir l'un des processus, il faut leur affecter une note. Voici les notes qui sont attribues aux processus : Processus Note A 22 + 20 = 42 B 25 + 18 = 43 C 0

Cest donc B qui sera choisi, malgr sa priorit statique plus basse. Il est favoris parce quil a utilis une proportion plus petite du temps qui lui avait t allou. Un processus cr par un utilisateur de Linux est par dfaut de type SCHED _OTHER. Un processus peut changer la politique dordonnancement sil appartient ladministrateur. Plusieurs primitives permettent de lire ou de modifier la politique dordonnancement et la priorit dun processus. 3.2 Manipulation des priorits #include<sched.h> int sched_setscheduler(pid_t pid, int politique, const struct sched_param *param) Permet de modifier la politique dordonnancement ainsi que la priorit dun processus. Pid : ldentificateur du processus pour lequel on veut changer de politique dordonnancement Politique=(SCHED_FIFO, SCHED _RR, SCHED _OTHER) Param : paramtre dordonnancement contient la priorit struct sched_param { int sched_priority } int sched_getscheduler(pid_t pid) Permet dobtenir la politique dordonnancement du processus pid. Elle peut tre excute par ladministrateur mais aussi par nimporte quel utilisateur. int sched_setparam(pid_t pid, const struct sched_param *param) 51 Aicha KERFALI

Anne universitaire 2013/2014

Cours des systmes dexploitation

Filire SMI(S4)

Modifie la priorit du processus pid. Seul ladministrateur peut augmenter la priorit dun processus, lutilisateur ne peut que la baisser. int sched_getparam(pid_t pid, const struct sched_param *param) Retourne dans param la priorit dordonnancement du processus pid. En cas dchec, ces primitives retournent 1. int sched_get_priorit_min(int politique) Donne la priorit minimale que peut avoir un processus de type politique int sched_get_priorit_max(int politique) Donne la priorit maximale que peut avoir un processus de type politique int nice(int inc) Modifie la priorit du processus courant; la valeur de inc est ajoute la priorit courante. Si la valeur est ngative, la priorit du processus augmente. Si la valeur de inc est positive, la priorit du processus diminue. Nice(0) donne la priorit courante. Seul un processus appartenant ladministrateur peut spcifier une valeur ngative pour augmenter sa priorit.

52 Aicha KERFALI Anne universitaire 2013/2014