Objectif
2
Objectif
comprendre, dcrire larchitecture et le fonctionnement des systmes dexploitation utiliser le SE Linux
Pr-requis
Afin de suivre ce cours sans difficult, il serait intressant: dtre familier avec lutilisation de base dun systme dexploitation :Windows, MS-DOS, de possder quelques notions dalgorithmique Possder des connaissances sur l'architecture des ordinateurs
Droulement du Cours
Programme
3
Thorie des SE
Dfinition
et rle dun SE Gestion des fichiers Gestion des processus Gestion de la mmoire Gestion des E/S
Etude du SE Linux
Installation, Commandes
Bibliographie
4
Tanenbaum A. Systmes dexploitation, Pearson Education, Paris 2003, 2e d. Armspach, J.-P.,Colin, P., Ostr-Waerzeggers, F. LINUX. Initiation et utilisation, Dunod, Paris 2004 Garrels, M. Bash Guide for Beginners, tlchargeable sur The Linux Documentation Project, http://www.tldp.org/guides.html ; o sur le rseau pdagogique R:/GTR/savary Cooper, M. Advanced Bash-Scripting Guide, plus complet que le prcdent, sur le mme site. Chiesa Jean Yves , support d cours Systme, Universit de Rouen De nombreuses rfrences internet
//Par: Dr TCHOUPE T. Maurice
Thorie des SE
Programme assurant la gestion de lordinateur et de ses priphriques [www.dicofr.com] Cest une couche logicielle, dont le rle est de grer les priphriques et de fournir aux programmes utilisateur une interface simplifie avec le matriel.
A quoi a sert ?
simplifier la vie des utilisateurs et des programmeurs: machine virtuelle (abstraite) grer les ressources de la machine dune manire efficace
Larchitecture au niveau du langage machine est lourde programmer, surtout pour les entres/sorties. Par exemple, dans les contrleurs de disquette des PC actuels une opration basique de lecture exige 13 paramtres de bas niveau compacts dans 9 octets. Ces paramtres prcisent : Ladresse du bloc qui doit tre lu Nombre de secteurs par piste Longueur de lespace inter-secteur etc. Sans lexistence du SE un programmeur devrait connatre tous ces dtails et les indiquer explicitement pour chaque lecture sur disquette. De plus il devrait personnellement contrler les arrts et redmarrages du moteur du lecteur disquette.
//Par: Dr TCHOUPE T. Maurice
Programme utilisateur
appel systme
Pilote de disquette
Pilote dcran
<dmarrer moteur> <lire_secteur(dbut_secteur_5,param1_5, param2_5,, param12_5)> <lire_secteur(dbut_secteur_0,param1_0, param2_0,, param12_0)> <lire_secteur(dbut_secteur_7,param1_7, param2_7,, param12_7)> <arrter_moteur>
Contrleur de disquette
Support : Systme d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice
Le systme dexploitation prsente au programmeur une interface daccs aux ressources de lordinateur (sous forme dappels systme). Grce cette interface le programmeur peut faire abstraction des dtails de fonctionnement des ressources (comme ceux lists sur le transparent prcdent). Cette interface est base sur des objets abstraits dont les plus importants sont les fichiers et les processus. Exemple : Le programmeur voit un disque comme une collection de fichiers qui peuvent tre ouverts, lus, crits et ferms. Le SE gre lallocation de secteurs aux fichiers, le chargement des fichiers en mmoire, la cohrence entre les fichiers en mmoire et leur copies sur le disque, le chargement et dchargement des pages (dans le cas de la mmoire virtuelle), etc. Ces actions sont transparentes pour le programmeur, cest--dire il nest pas oblig de les connatre pour se servir du disque.
//Par: Dr TCHOUPE T. Maurice
Le systme dexploitation en tant que machine virtuelle se prsente comme une couche logicielle qui permet lutilisation du matriel et coordonne les diffrents programmes dapplication. Le but est aussi de rendre lensemble transparent et facile utiliser vis vis de lutilisateur (IHM).
Gestion de fichiers
Gestion de la mmoire
Gestion dutilisateurs
Gestion de processus
Gestion des entres/sorties
Les programmes utilisateur peuvent accder ces diffrentes fonctionnalits laide des appels systme.
Support : Systme d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice
Grer les processus, leur existence simultane, leur coexistence dans la mmoire centrale, le temps qui leur est allou. Fournir aux processus les moyens daccs toutes les ressources en terme de mmoire et dentres sorties dont ils ont besoin. Chaque processus doit pouvoir simaginer quil dispose de la machine toute entire. Offrir une interface dutilisation la plus conviviale possible. Cela inclut lIHM (langage de commande, interface graphique), mais aussi le systme de fichiers, qui permet de grer la permanence des donnes entre les excutions de programme. Optimiser lutilisation des diffrents lments composant le systme informatique, disques, mmoire, priphriques et capteurs divers. Cest le rle du sous systme dentres-sorties. Offrir une interface de programmation la plus simple et la plus puissante possible.
//Par: Dr TCHOUPE T. Maurice
Caractristiques
Le noyau (kernel) : ensemble de fonctions systme assurant la gestion de la mmoire, des E/S et des processus. Un systme de fichiers hirarchis. Un/plusieurs interprteurs de commandes (shell). Processus asynchrones (arrire plan). Rentrant (partage du "texte") texte=instruction. Mcanisme de communication (synchronisation). E/S gnralises (intgres au SGF). R allocation (redirection) des E/S et dun processus. Nombreux utilitaires de programmation. Mcanisme de protection de mmoire en cas derreur de programmation. Interfaces utilisateurs graphiques
//Par: Dr TCHOUPE T. Maurice
17
Le fichier UNIX est une suite ventuellement vide doctets contenant une information quelconque. Aucune supposition nest faite par le systme sur la structure de ces octets (ASCII, binaire ou toute autre catgorie.). Linterprtation des bits contenus dans les fichiers est de lentire responsabilit de lutilisateur. Unix fait la diffrence dans les noms de fichiers entre les majuscules et les minuscules (case-sensitive). En thorie, tous les caractres du clavier sont autoriss dans les noms de fichiers. En pratique, il vaut mieux sabstenir dutiliser des caractres trop exotiques, risquant en particulier dtre interprts par certains programmes. C.est notamment le cas de * ou ? et de . en dbut de nom.
//Par: Dr TCHOUPE T. Maurice
Le systme de fichiers est peru par lutilisateur comme une hirarchie de rpertoires et de sous rpertoires. A la racine de larbre se trouve le rpertoire de nom /. Il nexiste pas de notions de disque comme dans MSDOS ou VMS. Les diffrents disques logiques (partitions de disques physiques) du systme ou des systmes constituent chacun un systme de fichier avec une racine. Chacun de ces systme de fichiers est raccroch dans larbre au dmarrage du systme ou explicitement par la commande mount.
Aprs le montage
//Par: Dr TCHOUPE T. Maurice
Un fichier peut tre dnomm par son chemin absolu ou par son chemin relatif au rpertoire courant. Dans la plus grande gnralit, le chemin absolu est du type :
On peut utiliser des extensions sur les noms de fichiers comme dans MSDOS, mais elles nont aucune signification pour le systme lui mme. Elles en ont ventuellement pour les bureaux de type graphique, qui peuvent alors associer une icne particulire une extension donne. La seule information qui indique quelque chose au systme est le fait que le fichier ait t marqu comme excutable (voir plus loin la notion de contrle d'accs). Cest cette seule condition que le systme acceptera de lancer son excution, sans dailleurs vrifier si le fichier en question est rellement excutable.
Le dtail des rpertoires systmes varie d'une implmentation une autre. Il existe malgr tout des ressemblances. /bin : commandes de base /dev : priphriques
/dev/fdx : lecteur de disquette /dev/hdx : partition de disque dur ide (hda, hdb, hdb, hdc) /dev/sdx : partition de disque dur scsi /dev/cdrom : comme le nom lindique /dev/lpx : imprimante /dev/mem : mmoire .
/etc : fichiers de configuration et dinstallation /home : fichiers utilisateurs /lib : bibliothques de programmes /sbin : commandes dadministration /usr : programmes et utilitaires mis disposition des utilisateurs /opt : programmes du systme local (voir aussi /usr/bin ou /usr/local/bin)
Voir les commandes ls (affichage de contenus de fichiers), cp (copie de fichiers), mv (dplacement de fichiers), rm (suppression de fichiers), mkdir (cration de rpertoires), cd (changement de rpertoire), rmdir (suppression de rpertoire). Le systme de fichiers peut contenir plusieurs entres qui font rfrence au mme fichier physique rel. Cest la notion de lien physique et de lien symbolique.
ln cre des liens physiques entre fichiers. ln -s cre des liens symboliques entre fichiers. Il sagit en quelque sorte dun raccourci pour dsigner le fichier. Le systme effectue automatiquement le drfrencement, sauf pour quelques oprations comme rm qui dtruit le lien et non le fichier point par le lien.
//Par: Dr TCHOUPE T. Maurice
Contrles d'accs
On
le
propritaire (u : user, par dfaut crateur), le groupe (g : group, par dfaut groupe principal du crateur) et le reste du monde (o : others).
Chaque
droits
de
Contrles d'accs
Contrles d'accs
La commande ls -l permet de connatre le dtail des droits sur un fichier: le type de fichier (catalogue, fichier ordinaire ou spcial), les droits d'accs pour les diffrents utilisateurs, le nombre de lien du fichier, les noms du propritaire et du groupe, la taille du fichier en nombre de caractres et la date de dernire modification
ls -l /etc/passwd -r--r--r-- 1 root sys 8620 Jan 21 12:41 /etc/passwd ls -l /bin/passwd -rwsr-sr-x 1 root sys 16686 Jul 30 12:41 /bin/passwd La commande passwd (fichier/bin/passwd) a le "set-uid" bit positionn (indication s en lieu et place de x pour le bit excution par le propritaire) et donc au travers de cette commande tout utilisateur peut modifier le fichier /etc/passwd (en l'occurrence changer son mot de passe.)
Contrles d'accs
La commande chmod permet de modifier les droits sur un fichier (noter la descente rcursive dune sous arborescence avec loption -r). ) pour pouvoir lutiliser sur un fichier, il faut en tre le propritaire. Syntaxe: chmod <mode> <refrenceFichier> Il existe deux syntaxe: la notation symbolique et la notation octale notation octale: Les modes peuvent tre absolus et sont alors obtenus par combinaison des nombres octaux 4000 positionne le "set-uid" bit 2000 positionne le "set-gid" bit 1000 positionne le "sticky" bit 0400 lisible par le propritaire 0040 lisible par les membres du groupe propritaire 0001 excutable par les autres utilisateurs exemple $ chmod 664 exemples/toto $ ls -l exemples/toto -rw-rw-r-- 1 jmr ens 84 Jan 27 19:09 exemples/toto
//Par: Dr TCHOUPE T. Maurice
Contrles d'accs
La commande chmod permet de modifier les droits sur un fichier (noter la descente rcursive dune sous arborescence avec loption -r). ) pour pouvoir lutiliser sur un fichier, il faut en tre le propritaire.
Syntaxe: chmod <mode> <refrenceFichier> Il existe deux syntaxe: la notation symbolique et la notation octale notation symbolique: les modes peuvent tre symboliques et ils ont alors la forme:
[<quit>] <permission> <operation> <quit> est une combinaison des lettres: u pour le propritaire, g pour le groupe, o pour les autres, a pour tous. <permission> est: + pour autoriser, - pour interdire, = imposer certaines permissions et supprimer les autres; <opration> est une combinaison des lettrez: r pour lire, w pour crire, x pour excuter, s pour le "set-uid" (bit associ u) ou le "set-gid" (associ g); t pour le "sticky" bit.
Exemples:
$ ls -l exemples/toto -rw-r----- 1 jmr ens 84 Jan 27 19:09 $ chmod go+r exemples/toto -rw-r--r-- 1 jmr ens 84 Jan 27 19:09
exemples/toto exemples/toto
Contrles d'accs
Exemples: $ ls -l ../c/bks -rwx--x--x 1 jmr ens $ chmod u+t ../c/bks $ chmod u+s ../c/bks $ ls -l ../c/bks -rws--x--t 1 jmr ens $ chmod g+s ../c/bks $ ls -l ../c/bks -rws--s--t 1 jmr ens $ ls -l /tmp/toto -rw-r--r-- 1 jmr ens $ chmod g=w /tmp/toto $ ls -l /tmp/toto -rw--w-r-- 1 jmr ens
Contrles d'accs
exemples/toto
$ ls -l exemples/toto
-rw-rw-r-- 1 root ens 84 Jan 27 19:09 exemples/toto
exemples/toto
Recherche de fichiers.
find
permet de rechercher un ou des fichiers dans le systme de fichier. On recherche rcursivement, en partant dun rpertoire des fichiers ou des rpertoires suivant certains critres (nom de fichier, ventuellement avec joker, type de fichier, nom de lutilisateur ou du groupe, droits daccs, type de fichier). test peut entre autres oprations, tester les caractristiques dun fichier et renvoyer une valeur de retour 0 si vrai et 1 si faux. Trs utile dans les scripts de langage de commandes (nous en reparlerons).
Support : Systme d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice
On peut galement inter-agir sur le SF par programme travers des appels systmes.
Appel systme Description
Ouverture en lecture, criture, etc. Fermeture dun fichier ouvert Lecture dun nombre doctets dun fichier vers un buffer Ecriture dun nombre doctets dun buffer vers un fichier Dplacement du pointeur de fichier Obtention dinformations sur le fichier (priphrique, inode, nb de liens durs sur le fichier, propritaire, groupe, taille, date de cration date du dernier accs, date de la dernire modification)
s = fstat(df, &buf)
On peut aussi interagir avec le SF par programme au moyen d'appels systmes Appel systme
s = mkdir(chemin, mode)
s = rmdir(chemin)
Description
Cration dun nouveau rpertoire.
Suppression dun rpertoire
s = link(fichier, lien)
s = unlink(chemin)
Redirections
stdout
Processus
Processus
stdin
stdin
stdout
fichier
2 stderr
2 stderr
Lorsquun processus dmarre de faon standard, 3 fichiers spciaux sont ouverts automatiquement : Entre standard (stdin) descripteur 0, par dfaut quivalent au clavier Sortie standard (stdout) descripteur 1, par dfaut quivalent lcran Sortie erreur standard (stderr) - descripteur 2, par dfaut quivalent lcran Ces 3 entres/sorties peuvent tre rediriges afin que la lecture/criture se fasse partir/vers dautres fichiers.
Support : Systme d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice 35
Redirections - exemples
Commande shell
sort sort < f1 sort > f2 sort >> f2
Description
Trie les lignes tapes au clavier; crit le rsultat tri lcran
Trie les lignes du fichier f1; crit le rsultat tri lcran Trie les lignes tapes au clavier; crit le rsultat tri dans le fichier f2 (si f2 existait avant il est efface et recr) Trie les lignes tapes au clavier; attache le rsultat tri la fin du fichier f2 (si f2 nexistait pas avant il cr) Trie les lignes tapes au clavier; crit le rsultat tri lcran. Les messages derreur ventuels sont crits dans le fichier f3. .. .. .. ..
36 //Par: Dr TCHOUPE T. Maurice
sort 2> f3
Fichier f1
Processus excutant
Processus excutant
wc l <f1
stdin
stdout
stdin
stdout
2 stderr
stderr
Tubes
Un tube = un flot de donnes entre deux processus obtenu par la redirection de la sortie standard dun processus vers lentre standard dun autre processus sans cration de fichier intermdiaire. Meilleure solution pour le problme prcdent : sort u <f1 | wc -l
Fichier f1
demain hier mardi lundi demain lundi dimanche
Processus excutant
Processus excutant
wc l <f1
stdin
stdout
stdin
stdout
2 stderr
stderr
Fichiers ordinaires(-) : suite doctets sans structure et sans marque de fin de fichier. Seule le mmorisation de la longueur permet de dtecter la fin du fichier. Fichiers rpertoires(d) : un fichier contenant des noms de fichiers. Liens symboliques(l) : contient seulement le chemin et le nom du fichier atteindre. Tubes nomms(p) : fichiers particuliers contenant des caractres, grs comme des tubes entre un processus producteur et un processus consommateur. Fichiers spciaux(c, p ou b) :
permettent aux processus de voir les priphriques comme des fichiers. Un programme na ainsi pas se soucier de lendroit o il crit. Les fichiers spciaux sont regroups par convention dans le rpertoire dev. Ils ne contiennent pas de donnes.
Structure dun disque Chaque systme de fichier UNIX implmente un ensemble de concepts communs drivs du systme de fichier dorigine. Les fichiers sont reprsents par des inodes , les rpertoires sont des fichiers simples contenant des listes dentres et les priphriques sont traits comme des fichiers (il suffit dmettre des demandes de lecture/criture sur des fichiers spciaux). Un disque se dcompose en un bloc de boot, et des volumes (partitions). Chaque volume contenant un systme de fichiers. Chaque systme de fichiers se compose dun superbloc, dune table des inodes, et des blocs de donnes o sont stocks les fichiers.
//Par: Dr TCHOUPE T. Maurice
Chacun de ces groupes est constitu de blocs logiques, contenant un multiple de 512 octets (variable selon la version du systme, les dcisions de formatage, .). La taille dun bloc logique est fixe dans un systme de fichier. On peut par contre choisir une taille diffrente de bloc selon le systme de fichier et son utilisation prvue. Les systmes de fichiers sur les disques se rpartissent dans des blocs de tailles fixe correspondant des units dentre-sorties du contrleur. La lecture ou lcriture dun lment du fichier ncessite le transfert intgral du bloc qui contient cet lment. Lors dun transfert de donnes dun disque physique vers la mmoire, le temps du transfert des donnes est compos du temps de positionnement de la tte devant le bloc lire, puis du temps de lecture du bloc et. Ce dernier est ngligeable devant le temps de positionnement. La question de la taille des blocs est donc une recherche de compromis entre la rapidit et lespace perdu sur le disque.
//Par: Dr TCHOUPE T. Maurice
Les inodes
Chaque fichier est reprsent par une structure nomme inode. Un inode contient la description (pour le SGF) dun fichier:
Propritaire, groupe, type de fichier, permissions Date d.accs, de modification et de dernier accs l.inode Taille Description des blocs constituant le fichier Etat de linode N de prihrique logique N de linode Pointeurs sur dautres inodes en mmoire Compteur de rfrence indiquant le nombre dinstances du fichier actuellement ouvertes Zone de verrous
//Par: Dr TCHOUPE T. Maurice
Les inodes
Chaque inode permet de retrouver lensemble des blocs de donnes constituant un fichier. Une premire srie de 10 entres contiennent chacune le numro de bloc dun bloc de donnes du disque.
Simple indirection : une onzime entre contient le numro d.un bloc de donnes qui contient lui mme 256 entres rfrenant chacune un bloc de donnes du disque. Double indirection : une douzime entre contient le numro d.un bloc de donnes qui contient lui mme 256 entres rfrenant chacune un bloc de donnes qui contient 256 entres rfrenant chacune un bloc de donnes du disque. Enfin triple indirection : une treizime entre contient le numro d.un bloc de donnes qui contient lui mme 256 entres rfrenant chacune un bloc de donnes qui contient 256 entres rfrenant chacune un bloc de donnes qui contient 256 entres rfrenant chacune un bloc de donnes du disque.
Les inodes
Les inodes
Remarque
: Un fichier peut avoir plusieurs liens donc plusieurs noms. Il suffit pour cela quils pointent sur le mme inode (celui du fichier). Linode n2 est linode racine du systme de fichiers.
Rpertoires
Un rpertoire est un fichier comme les autres. Chaque rpertoire peut contenir des fichiers ou des rpertoires. Les rpertoires sont structurs en arbre hirarchique (plus exactement en graphe sans cycle). Les donnes contenues dans un fichier de type rpertoire sont une suite dlments contenant chacun un numro dinode et le nom du fichier. Lorsque un processus a besoin dun fichier, le noyau parcourt les diffrents rpertoires jusqu trouver le nom recherch. Celui-ci fournit alors un numro dinode, qui est charg en mmoire et utilis dans la suite du processus.
48
Gestion de processus
LES PROCESSUS
49
Un processus est un programme en cours dexcution. Si un programme peut tre caractris par la suite de ses instructions, un processus va tre caractris par cette mme suite dinstruction, auxquelles il convient de rajouter un ensemble de donnes qui vont varier au cours du temps. Ainsi, un instant t donn, il sajoute ces instructions excutables la valeur des diffrents registres du processeur (qui la plupart du temps va caractriser linstruction suivante excutable), la valeur du compteur ordinal (qui dtermina la position atteinte dans lexcution du programme), les valeurs des diffrentes variables dans la mmoire. Un mme programme peut tre lanc plusieurs fois par le mme utilisateur ou par des utilisateurs diffrents. Le rsultat de chacun de ces lancements, le temps dexcution, le contenu de la mmoire lors de lexcution, parfois mme la quantit de mmoire occupe par les donnes seront pratiquement toujours diffrents. C'est mme ce qui fait fondamentalement la puissance de linformatique, par opposition aux automatismes. Il y aura bien un programme et plusieurs Support : Systme d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice processus.
Registres
PC
SP Drapeaux . . .
Etat
Divers caractristiques
Process ID (PID) Group ID (GID) Parent process ID (PPID) Priorit Date de lancement Temps UC utilis Rpertoire courant Fichiers ouverts
donnes
0000
code
Tous les processus sont recenss dans une table de processus, o une entre dcrit un processus.
Support : Systme d'exploitation (Linux)
LES PROCESSUS
51
Certains processus n'appartiennent pas un utilisateur en particulier. Ils sont ncessaire au fonctionnement du systme dans son ensemble , ou bien une partie du systme. C'est le cas par exemple des trs nombreux processus tournant en arrire plan sous Unix (dmons), et permettant de grer l'imprimante, le rseau, la mmoire, l'cran, etc.. On parlera dans ce cas de processus systmes, par opposition aux processus utilisateurs, appartenant un utilisateur particulier. Dans un systme Unix, la commande ps permet de visualiser les processus en cours d'excution. Sous Windows 9x, la squence de touches ctrl-alt-del permet de voir la liste des processus en cours. Sous Windows NT, plusieurs outils permettent cette mme visualisation, sous diffrentes formes et avec plus ou moins de dtails : le gestionnaire de tches, la liste des services,
//Par: Dr TCHOUPE T. Maurice
LES PROCESSUS
52
Dans un systme dexploitation traditionnel, on verra quun processus est caractris par un flux de contrle unique, et un espace dadressage unique. Sauf opration particulire (mmoire partage ou fichiers mapps en mmoire), plusieurs processus ne partagent jamais le mme espace mmoire. Ce cas de figure peut tre un dsavantage dans certaines circonstances. C'est pour cette raison qu'ont merg ces dernires annes les processus lgers (lightweight process) nomms communment threads
//Par: Dr TCHOUPE T. Maurice
LES PROCESSUS
53
Les threads permettent diffrents flots dexcution au sein dun mme processus, avec une marge importante d.indpendance les uns par rapport aux autres. Ils partagent, contrairement aux processus, un mme espace dadressage, les fichiers ouverts et dautres ressources. Ils peuvent galement interagir plus facilement les uns vis vis des autres. Enfin, et c.est souvent ce qui justifie grandement leur existence, leurs cration par le systme dexploitation est gnralement plus rapide que celle de processus, dans la mesure ou il ny a pas de copie de mmoire raliser. Les threads sont ainsi bien adapts des processus client/serveur, le serveur tant alors implment sous forme dun thread particulier (dispatcher), charg de mettre en activit un pool de threads serveurs (workers). Les concepts lis lexistence des threads sont relativement similaires ceux des processus, avec quelques complications supplmentaires dues la coexistence des threads l'intrieur du processus. Nous reviendrons plus tard sur le sujet.
//Par: Dr TCHOUPE T. Maurice
Cration de processus
54
Exemple : sous UNIX, linterprteur de commandes (shell) est un processus qui : saisit une commande au clavier cre un processus fils en lui indiquant quel programme excuter pour raliser la commande (sous Unix, fork est le seul appel systme de cration de processus) Attend que le processus fils se termine (si le processus fils est en avant plan) ou continue la saisie (si le processus fils est en arrire plan) La cration dun processus peut aussi se faire partir dun programme.
Support : Systme d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice
Terminaison de processus
55
Un processus peut se terminer suite lun des 4 vnements : Sortie normale, lorsque le processus a termin sa tche (sous Unix par lappel systme exit) Sortie suite une erreur (e.g. division par 0, inexistence dun fichier pass en paramtre) Tu par un autre processus (sous Unix par lappel systme kill)
Si le processus A cre le processus B, A est le parent de B, B est le fils de A. B peut son tour crer des processus. Un processus avec tous ses descendants forment un groupe de processus reprsent par un arbre de processus.
Exemple :
Processus B
void main() {int i; fork(); i = i+1; fork(); i = i-1;}
Processus D
A B D C
Processus A
scheduling
time sharing
Dans un systme multitche plusieurs processus sont en cours simultanment, mais le processeur ne peut, un moment donn, excuter quune instruction (dun programme) la fois. Le processeur travaille donc en temps partag. Lordonnanceur (scheduler) est le module du SE qui soccupe de slectionner le processus suivant excuter parmi ceux qui sont prts.
FFFF
0000 Programme A
1.
Tourniquet (round robin) : chaque processus a un intervalle fixe de temps de processeur (quantum). Le processeur est donn un autre processus lorsque le temps prvu pour le processus en cours sest coul le processus courant se bloque (e.g. en attendant une saisie au clavier)
P1
P6
quantum
P2
Aprs le quantum de P1 : P5 P4
Support : Systme d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice
P3
P2
P3
P4
P5
P6
P1
2.
Ordonnancement avec priorit : chaque processus a sa priorit et on lance le processus prt dont la priorit est la plus leve. La priorit du processus en cours diminue au fur et mesure de son temps pris dans le processeur. Lorsque cette priorit baisse en dessous de celle dun autre processus en attente, le processus courant cde sa place dans le processeur.
1. Tourniquet avec priorit : les processus attendent dans plusieurs files selon leurs priorits. La file de la plus grande priorit est servie dabord. A lintrieur dune file lordonnancement se fait selon la mthode de tourniquet.
Ttes de files Priorit 4 Priorit 3 Processus prts (Priorit la plus leve)
Priorit 2
Priorit 1 (Priorit la plus basse)
ETATS Elu (running) = en cours dexcution Prt (ready, runnable) = suspendu temporairement pour permettre lexcution dun autre processus Bloqu (blocked) = attendant un vnement extrieur, e.g. appui dune touche au clavier, pour pouvoir continuer
Elu
1 3
Prt
4
Bloqu
TRANSITIONS 1 = le processus se bloque en attente dvnement 2 = lordonnanceur choisit un autre processus 3 = lordonnanceur choisit ce processus 4 = lvnement attendu survient
//Par: Dr TCHOUPE T. Maurice
Plus prcisment, dans le systme UNIX, les diffrents tats d'un processus peuvent tre caractriss comme suit : Le processus est prt en mmoire. Il ne s'excute pas, mais il est charg en mmoire et est prt s'excuter ds que le noyau l'lira comme processus actif. Le processus s'excute en mode noyau , c'est dire qu'il fait appel une fonction du noyau du systme (read, write, fork, exec, .) . Le processus s'excute en mode utilisateur , c'est dire qu'il ralise des calculs d'une fonction de bibliothque (+, -, strcpy, .) . Le processus est prempt , c'est dire que le noyau a effectu un changement de contexte pour lire ( donner la main ) un autre processus. Le processus est zombie . Il a provoqu un appel une instruction de terminaison (exit), et n'aura donc plus besoin du CPU, mais son pre n'a pas encore pris connaissance de ses codes de retour et de ses statistiques d'excution. Cet tat est typique des processus UNIX. Il est normalement trs transitoire. C.est un tat terminal.
//Par: Dr TCHOUPE T. Maurice
Le processus est endormi en mmoire. Il a provoqu une instruction de mise en sommeil volontaire (sleep). Il n'a pas besoin d'tre lu par l'ordonnanceur. Il existe ensuite un certain nombre d'tats qui sont lis la gestion de la mmoire principale et de la mmoire secondaire . Il existe un processus du noyau ( le swapper ), qui se charge de faire de la place en mmoire vive (mmoire principale), en utilisant le disque comme zone de stockage temporaire (mmoire secondaire). Le processus est prt s'excuter, mais le swapper l'a transfr sur disque. Il devra de nouveau tre ramen en mmoire avant de pouvoir continuer son excution. Idem si il tait pralablement endormi ou prempt .
//Par: Dr TCHOUPE T. Maurice
65
Communication inter-processus
66
Souvent diffrents processus ne sont pas totalement indpendants : ils doivent changer des informations. Exemple : processus A est ddi la gestion dune imprimante, processus B dsire imprimer un document. B doit communiquer A le nom et lemplacement du fichier quil veut imprimer. Il existe deux mthodes classiques de communication inter-processus : des variables partages (shared variables) et lchange de messages (message passing). Exemple de variables partages : plusieurs processus veulent imprimer leurs rsultats sur une imprimante commune. Les noms des fichiers imprimer sont placs dans un tableau spcial fonctionnant comme une file : les variables partages dbut et fin indiquent le premier et le dernier fichier dans la file.
Variables partages
67
Supposons que processus B veut imprimer un fichier (nomm F_b). Le nom du fichier est plac dans un tableau spcial fonctionnant comme une file : les variables partages tte et queue indiquent le premier fichier dans la file et lendroit dinsertion dun nouveau fichier. 5 6 7 8 9
Fich.c TP17.c CV.doc Test.ps
aprs I1
Processus B : <qb queue> //I1 <charger fichier F_b dans [qb]> //I2 <queue qb+1> //I3
tte
queue
5
tte
9
F_b
aprs I2
queue
5
tte
9
F_b
aprs I3
Exemple : Deux processus B et C veulent placer au mme moment leurs fichiers (F_b et F_c) dans la file dimpression. Lordonnancement de ces processus est tel que leurs instructions sexcutent alternativement : I1b, I1c, I2b, I2c, I3b, I3c. 5 6 7 8 9 aprs Processus B : qb 9 Fich.c TP17.c CV.doc Test.ps I1b <qb queue> tte queue //I1b 5 6 7 8 9 qb 9 <charger fichier aprs Fich.c TP17.c CV.doc Test.ps F_b dans [queue]> //I2b I1c qc 9 <queue qb+1> //I3b tte queue Processus C : <qc queue> //I1c <charger fichier F_c dans [queue]> //I2c <queue qc+1> //I3c qb qc 9 9 9 9 5
tte
9
F_b
aprs I2b
queue
qb
aprs Fich.c TP17.c CV.doc Test.ps F_c //Par: Dr TCHOUPE T. Maurice I2c
tte queue
5
tte
9
F_c
aprs I3b
queue
5
tte
9
F_c
aprs I3c
queue
Problme : Le fichier F_b ne sera jamais imprim, car il a t cras par F_c. Source du problme : la variable partage queue est lue est modifie par deux processus la fois.
Les conflits daccs concurrents aux variables partages ont plusieurs solutions possibles (smaphores, moniteurs, ). Lide commune de ces solutions est lexclusion mutuelle : une variable partage ne doit pas tre lue ni modifie par plus dun processus la fois. Si dautres processus veulent y accder ils doivent attendre que le premier processusDr TCHOUPE T. Maurice ait fini. Support : Systme d'exploitation (Linux) //Par:
Echange de messages
70
Les mcanismes de communication par variables partages conviennent bien des processus qui tournent sur le mme processeur ou sur plusieurs processeurs possdant une mmoire commune. Pour les systmes distribus, i.e. constitus de plusieurs processeurs ayant chacun leur propre mmoire et relis par un rseau local, la communication interprocessus peut se faire par change de message : Un processus peut envoyer un message par rseau un destinateur prcis : send(destination, message) Un autre processus peut consommer un message par : receive(source, message) Les problmes qui se posent : Perte de message lors du passage par rseau - ncessit dacquittement Perte dacquittement - ncessit de retransmission dun message Reconnaissance dun message envoy 2 fois ( cause de perte dacquittement) Support : Systme d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice Authentification des processus envoyant et recevant le message, etc.
71
Gestion de la mmoire
Les diffrents problmes a rsoudre Avant de considrer le modle thorique gnral de la mmoire virtuelle, puis les manires de le mettre en pratique, voyons les diffrents problmes qu'elle doit rsoudre.
La relocation
Un programme contient un certain nombre de rfrences a des variables, fonctions ou zones du code. Ces rfrences sont parfois en relatif, mais souvent en absolu. Dans le cadre de la multiprogrammation, si le programme est charg a un endroit diffrent de la mmoire, ces rfrences absolues ne sont plus valables. Il existe plusieurs solutions pour rsoudre ce problme, une consiste a faire de la relocation dynamique au demarrage du programme : chaque adresse se voit rcrite suivant l'endroit exact ou le programme a t charg. Il est aussi possible, avec un cot non ngligeable, de faire de la relocation dynamique lors de chaque accs.
Le swap
Le deuxime problme a adresser est la possibilit de mettre sur le disque dur un certain nombre de zones mmoires, lorsque la mmoire centrale est pleine. Cette fonctionnalit est indispensable dans les systmes d'exploitation gnralistes, mme si elle peut tre inutile dans des cas prcis. Le troisime problme est celui de la protection mmoire, il doit tre ncessaire de faire en sorte qu'un processus ni puis pas lire, en encore moins crire, dans la mmoire d'une autre application ou du systme lui-mme.
//Par: Dr TCHOUPE T. Maurice
La protection mmoire
La mmoire partage
Le quatrime problme a adresser est celui de la mmoire partage, que l'on a voqu ci-dessus . Afin d'avoir de la communication rapide entre deux processus, il est ncessaire de prvoir un mcanisme pour avoir de la mmoire partage, sans pour autant dtruire la protection mmoire. Le dernier problme, moins critique, est de fournir aux programmes la capacit de projeter un chier en memoire, et de l'utiliser directement comme s'il s'agissait de donnes en mmoire. Ce mcanisme, nomm "mmap" permet a un programme d'avoir la flexibilit et la rapidit de donnes en mmoire, tout en ayant la persistance.
Tout d'abord, un petit rappel sur l'architecture du matriel. Dans un monde parfait, la mmoire est rapide d'accs, disponible en grande quantit, ne cote pas cher, et est rendue persistante a volont. Hlas, un tel monde n'existe pas.
Dans la ralit, la mmoire est soit rapide et trs chre, soit bon marche mais trs lente. Et la mmoire rapide n'est jamais persistante.
Afin d'obtenir des performances correctes sur un ordinateur, nous sommes donc obliges d'utiliser toute une srie de mmoires, certaines trs rapides mais en quantit trs faible, d'autres lentes mais en quantit trs leve.
ou le systme d'exploitation intervient a plein est sur la gestion de la mmoire centrale, c'est en effet a lui
qu'incombe (en gnral) de dcider ce qui doit tre gard en mmoire et ce qui doit tre uniquement sur le disque dur.
Il est bien important de comprendre que pour tout systme de gestion de la mmoire suffisamment volu, les notion de swap et de cache disque sont fusionnes. Les deux consistent a utiliser la mmoire comme un cache pour le disque :
dans le premier cas, on peut librer de la mmoire en l'crivant sur le disque, dans le second cas, on peut utiliser la mmoire disponible pour viter des accs disques par la suite.
Il existe bien sr quelques diffrences, par exemple, une modification sur un chier doit tre crite sur le disque tt ou tard pour viter une perte de donnes en cas de redmarrage ou coupure de courant, tandis qu'une zone de donnes d'un programme n'a jamais besoin d'tre crite. Mais sur le fond, les deux peuvent en effet tre grs de manire unifie. Tout ceci se rduit a la notion de backing store. La mmoire n'est cache pour le disque dur. Chaque zone mmoire, dpendant de son utilisation (bibliothque partage, excutable, donnes, cache disque) est associe a un backing store qui est la zone du disque qui permet de la stocker si ncessaire. Il peut arriver qu'une zone mmoire soit plus grande que son backing store (par exemple une machine quipe de 2Go de mmoire mais dont le swap a t limite a 1Go), le systme doit tre capable de grer ces cas, mais ils ne modifient pas le modle thorique. Enfin il est a noter que l'utilisation d'une partition brute comme backing store est souvent bien plus efficace que l'utilisation d'un chier (avec tous les soucis de fragmentation, . . .associes). Mais bien sr, ce n'est souvent pas possible (en pratique, seul le swap est sur une partition externe).
La MMU
Pour les solutions que nous allons voir par la suite (segmentation et pagination), il est ncessaire d'obtenir de l'aide du matriel. En effet, effectuer des traitements logiciels sur chaque accs mmoire serait bien trop coteux en temps, et difficile a raliser (puisque le logiciel a besoin lui-mme d'accder a la mmoire). Il existe donc une entit matrielle spciale nomme Memory Management Unit ou MMU en abrg, qui se situe thoriquement entre le CPU et la mmoire. Cette unit effectue une traduction entre l'adresse virtuelle demandee par la CPU et l'adresse physique comprise par le matriel. En pratique, la MMU est quasiment toujours intgre au CPU et accde directement aux registres du CPU, par exemple.
La segmentation
Principes de la segmentation
Segmentation simple
La segmentation simple, comme celle utilise dans le mode rel des processeurs x86, consiste a spcifier, pour tout accs mmoire, un registre de segment. Ce registre contient une valeur qui dtermine a partir d'ou l'adresse mmoire est spcifie. Par exemple, si on indique un segment commenant a l'adresse physique 0x1000, et qu'on demande l'adresse 0x42, on utilisera en ralit l'adresse 0x1042. L'adresse spcifie en complment du segment est souvent appele offset. Le registre de segment utiliser est parfois dtermin automatiquement, en effet, le x86 possde un registre spcifique a la pile et un autre spcifique au code (la ou sont charges les instructions).
//Par: Dr TCHOUPE T. Maurice
La pagination
Principes de la pagination
La pagination vise a rgler les principaux problmes de la segmentation. Son principe est de diviser la mmoire en zones de taille fixe (de 2Ko a 16Ko en gnral, 4Ko tant le plus frquent), appeles page. La mmoire physique elle est dcoupe en cadres de pages (page frames en anglais), de la mme taille. Pour chaque page, une table indique son cadre de page correspondant, ainsi que des informations sur son tat. En quelque sorte, une page est un segment de taille fixe et rduite. Mais la diffrence principale est que les pages sont transparentes pour le programme, qui lui-mme voit sa mmoire de manire continue. Le matriel et le systme d'exploitation grent cette pagination de manire transparente. Par exemple, avec des pages de 4096 octets, l'adresse mmoire 4196 correspond a 100 octets a l'intrieur de la page numro 1 (en informatique, la numrotation commence toujours a 0, ou presque). Si la table de correspondance indique qu'elle se trouve dans le cadre numro 2, l'adresse physique sera donc 8192 (dbut du cadre numro 2) + 100, soit 8292.
//Par: Dr TCHOUPE T. Maurice
81
Scripts Shell
82
Le nom de shell dsigne linterprteur de commandes du systme UNIX. Le shell est la fois un langage de programmation et un interprteur de commande. Le shell, lanc automatiquement ds le login interactif sur le systme Unix, ralise linterface (en mode texte) entre lutilisateur et le systme UNIX. Les programmes shell sont donc interprts par celui-ci. Comme le shell entoure virtuellement lensemble des commandes, les demandes faites par le programme se traduisent souvent par un appel une commande et on dit quil interprte un langage de commande. Par la suite, on confondra par abus de langage, les termes interprteur de langage de commande et langage de commande .
//Par: Dr TCHOUPE T. Maurice
Scripts Shell
83
Scripts Shell
84
Sous UNIX, linterprteur de commande nest pas unique : lutilisateur, sa convenance, peut choisir parmi plusieurs :
(Bourne-shell ou sh : en standard, le plus ancien historiquement, Korn-shell (ksh : conu comme une extension du Bourne-shell), C-shell (csh : dont la syntaxe est proche de celle du langage C), Bourne Again Shell (bash : le plus rpandu sous Linux), ...
Les programmes conus pour sh peuvent, quelques dtails prs, tre interprts par les autres shells.
Scripts Shell
85
programme shell (batch) est contenu dans un fichier. Pour le lancer, on peut utiliser trois mthodes :
rendre
le fichier excutable par chmod +x fich. Puis il ne reste plus qu taper fich [paramtres] chaque fois quon veut le lancer. Le shell constatera que ce fichier contient des commandes et les interprtera. sh [-options] fich [paramtres]
Cette commande permet de forcer l'excution du fichier ded commandes en crant un nouveau processus shell (prenant ses donnes dans le fichier de commandes)
Support : Systme d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice
Scripts Shell
86
Le shell interprte des instructions spares par des sparateurs. Les instructions tant de sortes trs diffrentes, nous utiliserons le vocabulaire suivant :
une commande est une instruction analogue un appel de sousprogramme dont le code est excutable par la machine.
une commande interne est une instruction analogue un appel de sousprogramme interne au shell. Son action est ralise par le shell luimme.
une instruction est une commande interne qui est une structure de contrle if, while, for, sont des instructions du shell. une phrase, ou une ligne de commande, est une composition syntaxiquement correcte de commandes, commandes internes et instructions que sait interprter le shell. Les sparateurs de phrases sont le retour chariot (rc) et le ;
//Par: Dr TCHOUPE T. Maurice
Dans une phrase, les sparateurs sont le blanc et la tabulation, leur nombre tant quelconque. Les mots du langage sont constitus avec les caractres lettres, chiffres et soulign. Ils commencent par une lettre ou un soulign. On peut utiliser des caractres spciaux condition de les invalider. Les mots dsignent les variables, les symboles du langage et les noms des fichiers. On pourra placer des commentaires condition de les faire prcder dun dise (#) et de les terminer par un (rc).
//Par: Dr TCHOUPE T. Maurice
Les caractres gnriques portent aussi le nom de caractres jokers. Ils servent remplacer un caractre quelconque ou nimporte quelle chane, mme vide (comme les jokers remplacent nimporte quelle carte). Lorsque le shell rencontre un mot comportant un caractre joker, il tente de remplacer ce caractre par toutes les solutions possibles. On obtient ainsi plusieurs combinaisons contenant le mot. Ces caractres sont le point dinterrogation, ltoile et les crochets.
? remplace un caractre quelconque sauf le retour cariot (rc). * remplace nimporte quelle chane de caractres, mme vide, ne comportant pas de (rc). [ ] remplace un caractre:
parmi ceux numrs entre les crochets ou un caractre parmi ceux qui ne sont pas numrs si la liste commence par un point dexclamation.
Lorsque le shell interprte les caractres gnriques, il ne les remplace pas sil ne trouve aucun nom de fichier mettre en correspondance. Par exemple:
rm * supprime tous les fichiers du rpertoire courant ainsi que tous les sous-rpertoires vides. ls -l t*.c liste tous les fichiers du rpertoire courant commenant par t et se terminant par .c. ls -l *.? liste tous les fichiers du rpertoire courant se terminant par . suivi dun seul caractre. cp [a-e]*.* .. copie tous les fichiers du rpertoire courant commenant par une des cinq premires lettres de lalphabet, et contenant au moins un point dans leur nom, mme en dernire position. La copie se fait dans le rpertoire pre. La commande ls -l ??? vous donnera les contenus de tous les rpertoires crits avec seulement 3 lettres. La commande ls -l ??e* liste le contenu des rpertoires commenant par 2 lettres quelconques suivies dun e et de nimporte quoi y compris un blanc. La commande ls -l [A-Z,a-e]* liste le contenu des rpertoires commenant par une lettre majuscule ou par une minuscule comprise entre a et e. On aurait aussi pu crire : ls -l [Ae]* .
Le caractre de continuation \ plac en fin de ligne indique que la phrase en cours nest pas termine et quelle se poursuit sur la ligne suivante. Le (rc) est ainsi transform en espace. Les caractres spciaux ont une signification dans le langage moins quils ne soient invalids. Un caractre spcial devient un caractre normal sil est prcd du caractre \ ou sil est situ dans un parenthsage particulier. Les caractres spciaux sont: & | < > $ () " {} \
//Par: Dr TCHOUPE T. Maurice
Les variables sont dsignes par des mots : elles ne se dclarent pas. Il nexiste aucune notion de type. Par convention, les variables sont crites en lettres majuscules. Les paramtres dsignent lensemble des chanes de caractres que lon crit la suite du nom dun fichier shell lors de son excution.
Linitialisation dune variable se fait par une affectation, ralise par le signe = (Pas despace de chaque ct de l = ). Lutilisation le la variable se fait avec le signe $. La valeur affecte la variable peut tre une valeur numrique, une chane, le rsultat dune commande, une liste de commandes parenthses.
$ HOME=/home/IUP2/etudiant $ echo $HOME /home/Iogin_name $ #$==Invite de commande
Si la variable na pas t initialise ou si elle comporte une erreur dcriture, la commande renvoie une chane vide. Si lon oublie le $, echo HOME renvoie HOME
//Par: Dr TCHOUPE T. Maurice
Scripts Shell
94
Les chanes de caractres doivent tre encadres par des quotes (.).
$ TEMPS=Il faut beau $ echo $TEMPS Il fait beau $
Toute commande entre accents graves sera excute et le rsultat affect la variable.
$ EN_LIGNE=`who | cut f 1 d " "` $ echo $EN_LIGNE root chiesa lerest $
Scripts Shell
95
Paramtres
Les paramtres sont initialiss si on les tape la suite du nom du fichier. Ils portent les numros de 1 9 prcds du $.
$1 est une expression dont la valeur est celle du premier paramtre effectif plac aprs une commande simple. $2, pour le deuxime, . et $9 pour le neuvime. $0 existe et dsigne la commande elle-mme.
Notons, tout de suite, que cette technique ne limite pas le nombre de paramtres 9, comme nous le verrons par la suite.
//Par: Dr TCHOUPE T. Maurice
# nombre de paramtres effectifs dune commande ? code de retour dune commande $ numro du processus shell en cours ! numro du dernier processus lanc en arrire-plan HOME nom du rpertoire personnel PATH rgle de recherche des commandes PS1 invite primaire du shell (par dfaut $) PS2 invite secondaire du shell (par dfaut >)
On peut dtruire une variable par la commande interne unset, sauf les variables PATH, PS1 et PS2.
//Par: Dr TCHOUPE T. Maurice
La substitution de valeur dune variable ou dun paramtre permet dvaluer conditionnellement la valeur de la variable ou du paramtre. Ce mcanisme sert donner des "valeurs par dfaut" des variables dont on ne sait pas si elles sont initialises. Ainsi :
${VAR:-mot} dlivre $VAR si la variable VAR est initialise, sinon initialise avec mot. ${VAR:=mot} assigne mot VAR si la variable nest pas initialise, puis value $VAR. ${VAR:?mot} dlivre $VAR si la variable est initialise, sinon affiche le nom de la variable suivi de :, puis mot, et termine le processus shell en cours.
Exemples
1) ESSAI=${VAR:-mot} VAR ntant pas initialise, ESSAI est initialis par mot (quivalent ESSAI=mot) ($VAR nexiste pas). VAR=init ESSAI=${VAR:-mot} VAR tant initialise par init, ESSAI est initialis par $VAR (quivalent ESSAI=$VAR). 2) ESSAI=${VAR:=mot} VAR ntant pas initialise, VAR est initialise par mot et ESSAI devient quivalent $VAR (quivalent VAR=mot, ESSAI=$VAR, donc ESSAI=mot) VAR=init ESSAI=${VAR:=mot} VAR tant initialise par init, ESSAI devient quivalent $VAR (quivalent ESSAI=$VAR) 3) ESSAI=${VAR:?mot} VAR ntant pas initialise, affiche VAR: et mot puis arrte le processus shell en cours. VAR=init ESSAI=${VAR:?mot} VAR tant initialise par init, ESSAI devient quivalent $VAR (quivalent ESSAI=$VAR) et le processus shell se continue.
//Par: Dr TCHOUPE T. Maurice
La porte dune variable est le processus qui la cre. Pour tre visible dans les autres processus shell qui seront crs par la suite, une variable doit tre exporte par la commande interne export : elle est alors place dans lenvironnement du processus, environnement dont hriteront ses fils. On lance export PATH pour exporter les chemins de recherche de nos commandes (ralis dans .profile). La liste des variables exportes dans lenvironnement est obtenue par la commande env. La liste de toutes les variables est obtenue par la commande set.
//Par: Dr TCHOUPE T. Maurice
Il est possible (en bash) de crer des variables locales aux fonctions qui les utilisent. Par exemple :
#!/bin/bash HELLO=Hello function hello { local HELLO=World echo $HELLO } echo $HELLO hello echo $HELLO
101
Tout dabord, les oprateurs arithmtiques sont en nombre rduit : +-*/ et % (le reste). Ensuite, les calculs sont raliss en nombre entiers seulement. Enfin, il faut utiliser le [ ] pour raliser lvaluation. Par exemple :
$ A=3 $ B=2 $ Echo 1+3 $ 1+3 $ echo $[1+3] $4 $ echo $[A+B] $5 $ echo $[A/B] $1 $ echo $[A/B]|bc l $ 1.5
La dernire ligne montre comment utiliser la commande calculateur bc pour se sortir de limpasse des nombres entiers.
Support : Systme d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice
102
Les comparaisons de chanes sont facilement comprhensibles, simplement il faut veiller ne pas confondre avec des comparaisons arithmtiques :
s1=s2 , s1>s2, s1<s2, -n s1 ( s1 n st pas vide ), -z s1 ( s1 est vide ). e -r f ( f existe et a le droit de lecture r ), -w f ( f existe et a le droit w ), -x f ( f existe et a le droit x ), -f f ( f existe et est un fichier ordinaire ), -d r ( le rpertoire r existe ), -u f ( f existe et a le bit set UID ), -s f ( f existe et nest pas de longueur nulle ).
//Par: Dr TCHOUPE T. Maurice
103
Les lectures et les critures sont ralises par des commandes internes du shell.
La commande interne read permet dnitialiser des variables en mode i conversationnel et admet comme paramtre une ou plusieurs variables spares par un sparateur de mots.
Elle initialise la premire avec la premire chane tape, le sparateur au clavier tant aussi le blanc (ou le TAB). Elle initialise la deuxime avec la deuxime chane, ... et elle initialise la dernire avec toutes les chanes de fin de ligne. #!/bin/bash echo Please, enter your firstname and lastname read FN LN echo "Hi! $LN, $FN !"
La commande echo permet d fficher la valeur d ne variable et est a u souvent une commande interne. Nous en avons dj vu de nombreux usages.
//Par: Dr TCHOUPE T. Maurice
Boucle for
La liste_de_commandes est excute pour chaque valeur de lindice (une variable non dclare) prise dans la suite de mots indique dans liste aprs le in .
NUM=0 for PARAM in $* do NUM=`expr $NUM + 1` echo "paramtre $NUM = $PARAM" done for USER in `cat liste` do elm $USER s " fichier message " < message done
Boucle while
while liste_de_commandes_1 do liste_de_commandes_2 done La liste_de_commandes_1 est excute. Si le code de retour de la dernire commande de liste_de_commandes_1 est 0 (vrai), alors la liste_de_commandes_2 est excute et la boucle continue.
NUM=0 while [ $1 ] #tant que $1 existe, [ ] commande test do NUM=`expr $NUM + 1` echo "paramtre $NUM = $1" shift #dcale les paramtres done
boucle until
until liste_de_commandes_1 do liste_de_commandes_2 done La liste_de_commandes_1 est excute. Ds que le code de retour de la dernire commande de liste_de_commandes_1 est 0 (vrai), la liste_de_commande_2 nest plus excute et la boucle sarrte.
NUM=0 until [ $# -eq 0 ] #jusqu ce que le nombre d #paramtres soit nul do NUM=`expr $NUM + 1` echo "paramtre $NUM = $1" shift #dcale les paramtres done
Slection if
if liste_de_commandes_1 then liste_de_commandes_2 else liste_de_commandes_3 fi
On teste le code de retour de la dernire commande de liste_de_commandes_1 ; sil est gal 0, liste_de_commandes_2 est excute sinon cest liste_de_commandes_3 qui lest. Lexistence de else liste_de_commandes_3 nest pas obligatoire. Le code de retour de la structure est 0 si liste_de_commandes_2 est excute sinon cest celui de la dernire commande de liste_de_commandes_3.
//Par: Dr TCHOUPE T. Maurice
Slection if
On peut aussi crire else if : elif (dans ce cas, un seul fi terminal) La structure if suivante :
if commande_1 then commande_2 fi
Indiquer si les fichiers dun rpertoire sont des fichiers (ordinaires ou spciaux) ou des sous-rpertoires.
for FICH in * do if [ -d $FICH ] # $FICH est-il un rpertoire ? then echo "rpertoire : $FICH" else echo "fichier : $FICH" fi done
Slection case
case expression in cas_1) liste_de_commandes_1 ;; cas_2) liste_de_commandes_2 ;; . .. cas_n) liste_de_commandes_n ;; esac
Linterprteur de commandes cherche une quivalence entre la chane expression et un des cas_i en suivant lordre de leur dfinition. Si une quivalence est trouve alors la liste_de_commandes associe est excute et la structure est termine. Comme le caractre * reprsente toute chane de caractres, on lutilise comme cas par dfaut. Si aucun cas ne convient, la structure case ne fait rien.
Slection case Exemple : Prciser si le paramtre est un chiffre, une lettre ou une suite de caractres.
NUM=0 for PARAM in $* do NUM=`expr $NUM + 1` case $PARAM in [0-9]) echo "le paramtre $NUM est un chiffre: $PARAM" ;; [a-z]|[A-Z]) echo "le paramtre $NUM est une lettre: $PARAM" ;; *) echo "le paramtre $NUM contient plusieurs caractres: $PARAM";; esac done
Les commandes correspondent aux instructions du langage de programmation. Une commande simple est une liste de mots spars par des espaces.
Le premier est le nom de la commande, les autres sont les options et les paramtres.
excution squentielle : commandes spares par un ; excution asynchrone : commande termine par un & (mme priorit que ;) excution conditionne : commandes spares par && : excution de la partie droite conditionne par un code de retour nul de ce qui prcde (priorit suprieure &) commandes spares par || : excution de la suite conditionne par un code de retour non nul de ce qui prcde (priorit identique &&) On peut aussi les trouver sous forme de pipe | :
la sortie standard du processus situ gauche est connecte par un tube lentre standard du processus situ droite.
//Par: Dr TCHOUPE T. Maurice
Commandes internes
Une commande interne est une commande prdfinie dans le shell pour laquelle il nexiste pas de fichier excutable portant son nom.
pwd imprime le rpertoire courant cd change de rpertoire mkdir cre un rpertoire rmdir supprime un rpertoire echo affiche ses arguments read lit une entre au clavier export export une variable (la rend visible au processus appelant) break sortir dune boucle (for, .). continue continuer litration suivante dune boucle (for, ..). exit quitter le programme avec, en code de retour, celui de la dernire commande excute (fin du shell en cours). return idem pour quitte
Commandes internes
. fichier excuter les commandes du fichier sans crer un nouveau processus : instruction vide du shell. set list_args fournir les valeurs des paramtres effectifs correspondant aux paramtres formels 1, 2, ... Permet ainsi de paramtrer les sous-programmes raliss par eval : il suffit pour cela que les commandes contenues dans la variable $VAR soient paramtres en faisant rfrence $1, $2 ... eval $VAR le contenu de la variable $VAR est considr comme une liste de commandes shell. Cela ressemble un appel de sous-programme sans paramtre
shift les paramtres formels sont renomms: $2->$1 ; $3->$2... Utile lorsquune commande a plus de 9 paramtres (exemple page 47). On a dj not que les paramtres formels dune commande sont dsigns par des chiffres et ce sont des paramtres de position : 0 reprsente le nom de la commande paramtre, 1 le premier paramtre, 2 le deuxime et ainsi de suite jusqu 9. La notation $* est quivalente "$1$2...", tandis que la notation $@ est quivalente "$1""$2".... On rappellera que $# renvoie le nombre de paramtres de la commande test expr [ expr ] test
//Par: Dr TCHOUPE T. Maurice
Commandes externes
Toutes les commandes peuvent tre utilises dans les scripts shell. Certaines commandes sont des grands classiques des scripts : awk recherche d'expressions rgulires et enchanement d.action si trouves . grep recherche d'expressions rgulires et impression de la ligne les contenant wc compte de mots sort tri bc calculateur
PARENTHESAGES
Les parenthsages servent regrouper des squences de mots ou isoler des mots. Ils sont multiples et ont des significations spcifiques:
{...} regroupement de commandes, parenthsage ordinaire ; dlimite aussi la porte de loprateur de prise de valeur $. (...) entoure une liste de commandes qui sont excutes par un nouveau processus UNIX. ... (quotes) parenthsage dans lequel aucun caractre, sauf , na de signification spciale. "..." (guillemets) parenthsage dans lequel aucun caractre, sauf " et $ na de signification spciale. ... (accents graves) excution de la phrase place entre les accents graves; dlivre la sortie standard des commandes situes dans ce parenthsage. Les caractres spciaux lintrieur du parenthsage ne sont interprts qu lexcution de la phrase.
Le rle des parenthsages par et " est dviter une utilisation fastidieuse du caractre \ quand il faut banaliser plusieurs caractres spciaux dans une commande. Bien entendu, on ne peut pas banaliser le caractre quote dans un parenthsage quote, ni le caractre guillemet dans un parenthsage guillemet.
//Par: Dr TCHOUPE T. Maurice
SOUS-PROGRAMMES
Procdure
Un texte crit en shell et stock dans un fichier constitue une procdure shell. Dans le texte, les paramtres formels ont pour noms 1, 2...9 et leurs valeurs sont dsignes par $1,..., $9. Lactivation de la procdure peut se faire en excutant la commande sh suivie du nom du fichier (avec certaines options si lon veut) ou en rendant le fichier excutable ce qui fabrique une nouvelle commande appele sous-programme shell. Une fonction est un sous-programme local un processus shell. Elle nest pas excute par un nouveau processus shell et nest pas stocke seule dans un fichier. Elle se dclare, un peu comme en C, dans le programme qui lutilise :
nom()
{ corps de la fonction }
Fonction
SOUS-PROGRAMMES
Les parenthses ne servent qu distinguer le nom dune fonction du nom dune variable.
Exemple:
Lexemple suivant reprend lcriture dun programme shell utilisant 3 fonctions (menu, erreur et traitement) appeles par un programme principal.(slection if). Ce programme rclame un paramtre, et seulement un, et celui-ci doit tre obligatoirement un fichier ordinaire. Le
programme principal effectue ces vrifications, appelle menu et traitement si c.est correct sinon lance erreur qui affiche le message correspondant l.erreur faite.
menu() { .. } traitemement() { .. } erreur() { if [ $1 -eq 1 ] then echo "Le fichier $2 n'existe pas" else echo "Donnez un seul paramtre, pas $1" fi } if [ -f $1 -a $# -eq 1 ] then menu traitement $1 else erreur $# $1 Support : Systme d'exploitation (Linux) fi
Remarques : On notera la diffrence entre les paramtres passs au shell-script et ceux passs aux fonctions. Le $1 (le nom du fichier traiter) du programme n.est pas le $1 de erreur (le nombre de paramtres passs au programme). Les variables cres dans des sousprogrammes ne sont pas purement locales ces fonctions, elles sont reconnues dans tout le fichier shell. En revanche, non seulement, elles sont dtruites la fin de lexcution du fichier shell mais encore, elles ne sont pas visibles dans les processus engendrs. On peut les y rendre visibles par la commande interne export. Une fonction nest pas exportable.
//Par: Dr TCHOUPE T. Maurice
Processus excutant
Aprs avoir effectu les ventuelles substitutions de paramtres, le shell traite les redirections, puis examine le premier mot de la commande. Sil est suivi dun signe = cela signifie que cest une affectation de variable. Sil correspond une commande interne, une commande structure (for, if...) ou une activation de fonction, la commande est excute dans le processus shell en cours. Dans le cas contraire, il y a cration dun nouveau processus auquel est passe en paramtre la commande. Les rgles de recherche des commandes sont fixes par la variable PATH qui est initialise la connexion.
//Par: Dr TCHOUPE T. Maurice
Paramtres de la commande sh Lorsquun processus est cr par la commande sh, plusieurs options dfinissant le mode dexcution peuvent tre indiques. Les plus utiles sont : -v imprime les lignes telles quelles sont lues par le processus shell -x imprime les commandes telles quelles sont excutes, aprs les substitutions de paramtres. Elles sont trs intressantes pour dtecter dventuelles erreurs de syntaxe. On les utilise de la manire suivante : sh -v proc. On peut aussi les inclure dans un fichier shell en crivant dans la procdure : set -v ou set -x
//Par: Dr TCHOUPE T. Maurice
des commandes sont lances en arrire-plan et quil est ncessaire de synchroniser la suite dun programme shell avec la fin de ces commandes, le programme shell doit se bloquer en attente de la fin de ces commandes par la commande interne wait. wait num suspend lexcution jusqu ce que le processus de n num, ou tous les processus lancs en arrire-plan, se terminent.