Vous êtes sur la page 1sur 123

SYSTME D'EXPLOITATION (LINUX)

Par: Dr TCHOUPE TCHENDJI Maurice Universit de Dschang

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

CM=12h, TD=12h, TP=21h


//Par: Dr TCHOUPE T. Maurice

Support : Systme d'exploitation (Linux)

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

de bases Programmation en Shell


Support : Systme d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice

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

Support : Systme d'exploitation (Linux)

Thorie des SE

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Dfinition et rle dun SE


6

Un systme informatique, quest ce que cest ?

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Dfinition et rle dun SE


7

En anglais Operating System (OS) Quest-ce que cest ?

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.

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Dfinition et rle dun SE


8

A quoi a sert ?

simplifier la vie des utilisateurs et des programmeurs: machine virtuelle (abstraite) grer les ressources de la machine dune manire efficace

Les ressources dun ordinateur sont :


le processeur, les mmoires, les priphriques

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Systme dexploitation en tant que machine virtuelle (1/3)


9

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

Support : Systme d'exploitation (Linux)

Systme dexploitation en tant que machine virtuelle (2/3)


10

Programme utilisateur

appel systme

<ouvrir_fichier TP/expr.txt> Systme dexploitation Pilote dimprimante

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

Systme dexploitation en tant que machine virtuelle (3/3)


11

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

Support : Systme d'exploitation (Linux)

Dfinition et rle dun SE


12

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).

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Tches du systme dexploitation - rsum


13

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

Dfinition et rle dun SE


14

FONCTIONS DUN SYSTEME DEXPLOITATION ABORDEES DANS LE COURS


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

Support : Systme d'exploitation (Linux)

STRUCTURE DUN SYSTEME DEXPLOITATION MODERNE : UNIX


15

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

STRUCTURE DUN SYSTEME DEXPLOITATION MODERNE : UNIX


16

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

Support : Systme d'exploitation (Linux)

17

Systme de fichiers UNIX/Linux

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Le Systme de Fichiers: LE SGF DUNIX


18

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

Support : Systme d'exploitation (Linux)

Le Systme de Fichiers: LE SGF DUNIX


19

Hirarchie des rpertoires.

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.

Deux systmes de fichiers spars


Support : Systme d'exploitation (Linux)

Aprs le montage
//Par: Dr TCHOUPE T. Maurice

Le Systme de Fichiers: LE SGF DUNIX


20

Hirarchie des rpertoires.

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 :

<nom de machine>.[<nom de domaine>]/<chemin absolu>/<nom de fichier>

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.

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Le Systme de Fichiers: LE SGF DUNIX


21

Hirarchie des rpertoires.

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Le Systme de Fichiers: LE SGF DUNIX


22

Hirarchie dun systme de fichiers


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)

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Le Systme de Fichiers: LE SGF DUNIX


23

Copie, dplacement, liens sur les fichiers.

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

Support : Systme d'exploitation (Linux)

Le Systme de Fichiers: LE SGF DUNIX


24

Contrles d'accs
On
le

distingue trois classes dutilisateurs :

propritaire (u : user, par dfaut crateur), le groupe (g : group, par dfaut groupe principal du crateur) et le reste du monde (o : others).
Chaque

classe peut se voir affecter sur un fichier les

droits
de

lecture (r : read), dcriture (w : write) et d'excution (x : execute).


Support : Systme d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice

Le Systme de Fichiers: LE SGF DUNIX


25

Contrles d'accs

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Le Systme de Fichiers: LE SGF DUNIX


26

sticky bit, set uid, set gid :

Exemple: voir ci-dessous


//Par: Dr TCHOUPE T. Maurice

Support : Systme d'exploitation (Linux)

Le Systme de Fichiers: LE SGF DUNIX


27

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.)

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Le Systme de Fichiers: LE SGF DUNIX


28

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

Support : Systme d'exploitation (Linux)

Le Systme de Fichiers: LE SGF DUNIX


29

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

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Le Systme de Fichiers: LE SGF DUNIX


30

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

9282 Nov 13 13:27 ../c/bks

9282 Nov 13 13:27 ../c/bks

9282 Nov 13 13:27 ../c/bks

200 Jan 27 18:51 /tmp/toto

200 Jan 27 18:51 /tmp/toto


//Par: Dr TCHOUPE T. Maurice

Support : Systme d'exploitation (Linux)

Le Systme de Fichiers: LE SGF DUNIX


31

Contrles d'accs

chown permet de modifier le propritaire dun fichier,


syntaxe: chown <nom> <refFich> Exemple:

$ chown root exemples/toto $ ls -l exemples/toto -rw-rw-r-- 1 root ens 84 Jan 27 19:09

exemples/toto

chgrp <groupe> <refFichier> permet de changer le groupe dun fichier.


$ ls -l exemples/toto
-rw-rw-r-- 1 root ens 84 Jan 27 19:09 exemples/toto

chgrp sys exemples/toto $ ls -l exemples/toto


-rw-rw-r-- 1 root sys 84 Jan 27 19:09
Support : Systme d'exploitation (Linux)

exemples/toto

//Par: Dr TCHOUPE T. Maurice

Le Systme de Fichiers: LE SGF DUNIX


32

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

Quelques appels systme relatifs aux fichiers


33

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)

df = open(nom, mode,) s = close(df) n = read(df, buffer, nb_octets)

n = write(df, buffer, nb_octets) pos = lseek(df, offset, org) s = stat(nom, &buf)

s = fstat(df, &buf)

Idem, partir du descripteur de fichier


Support : Systme d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice

Quelques appels systme relatifs aux rpertoires


34

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)

Cration dun lien


Suppression dun lien (et ventuellement du fichier) Changement du rpertoire courant Ouverture dun rpertoire en lecture Fermeture dun rpertoire Lecture dune entre du rpertoire Retour au dbut du rpertoire pour une nouvelle lecture
Support : Systme d'exploitation (Linux) //Par: Dr TCHOUPE T. Maurice

s = chdir(chemin) dir = opendir(chemin) s = closedir(dir) dirent = readdir(dir) rewinddir(dir)

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

sort <f1 >f2 2>f3

sort < f1 2>> f3

(ls -l toto > f1) 2> f2


Support : Systme d'exploitation (Linux)

Vers les tubes - exemple


Problme : compter le nombre de mots uniques dans une liste . sort u <f1 >f2 wc l <f2
#Trie lentre standard en laissant #une occurrence unique de chaque ligne #word count : affiche sur la sortie #standard le nombre de lignes #dans lentre standard Fichier f2

Fichier f1

sort u <f1 >f2

Processus excutant

Processus excutant

wc l <f1

demain hier mardi lundi demain lundi dimanche

stdin

stdout

demain dimanche hier lundi mardi

stdin

stdout

2 stderr

stderr

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice 37

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

sort u <f1 >f2

Processus excutant

Processus excutant

wc l <f1

stdin

stdout

stdin

stdout

2 stderr

stderr

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice 38

Le Systme de Fichiers: MISE EN OEUVRE DU S.G.F. UNIX


39

Les diffrents types de fichiers

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.

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Le Systme de Fichiers: MISE EN OEUVRE DU S.G.F. UNIX


40

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

Support : Systme d'exploitation (Linux)

Le Systme de Fichiers: MISE EN OEUVRE DU S.G.F. UNIX


41

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Le Systme de Fichiers: MISE EN OEUVRE DU S.G.F. UNIX


42

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

Support : Systme d'exploitation (Linux)

Le Systme de Fichiers: MISE EN OEUVRE DU S.G.F. UNIX


43

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

Support : Systme d'exploitation (Linux)

Le Systme de Fichiers: MISE EN OEUVRE DU S.G.F. UNIX


44

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.

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Le Systme de Fichiers: MISE EN OEUVRE DU S.G.F. UNIX


45

Les inodes

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Le Systme de Fichiers: MISE EN OEUVRE DU S.G.F. UNIX


46

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.

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Le Systme de Fichiers: MISE EN OEUVRE DU S.G.F. UNIX


47

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.

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

48

Gestion de processus

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

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.

Processus = programme en cours dexcution


50

Environnement dun processus Espace dadressage


FFFF

Pointeurs sur segments de code, de donnes et de pile


pile

Registres
PC
SP Drapeaux . . .

(lu, prt, bloqu)

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)

//Par: Dr TCHOUPE T. Maurice

LES PROCESSUS
51

Support : Systme d'exploitation (Linux)

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

Support : Systme d'exploitation (Linux)

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

Support : Systme d'exploitation (Linux)

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)

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Hirarchie de processus (sous UNIX)


56

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 :

void main() {int i; fork(); i = i+1; fork(); i = i-1;}

void main() {int i; fork(); i = i+1; fork(); i = i-1;}

void main() {int i; fork(); i = i+1; fork(); i = i-1;}

Processus B
void main() {int i; fork(); i = i+1; fork(); i = i-1;}

Processus D

A B D C

Processus A

Support : Systme d'exploitation (Linux) Processus

//Par: Dr TCHOUPE T. Maurice

scheduling

Ordonnancement des processus


57

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

PC (unique) Programme C Programme B Processus C Processus B Processus A temps

0000 Programme A

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Algorithmes dordonnancement (1/2)


58

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

Mise en oeuvre par une file dattente : File de processus prts : P1 P2 P3 P4 P5 P6

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

Algorithmes dordonnancement (1/2)


59

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.

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Algorithmes dordonnancement (2/2)


60

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)

2. Le plus court dabord (pour minimiser le temps moyen dexcution)


8 4 4 4 4 4 4 8

Temps moyen = (8+12+16+20)/4 = 14

Support : Systme d'exploitation (Linux)

Temps moyen = (4+8+12+20)/4 = 11

//Par: Dr TCHOUPE T. Maurice

Etats dun processus


61

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

Support : Systme d'exploitation (Linux)

Etats dun processus (cas d'UNIX)


62

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

Support : Systme d'exploitation (Linux)

Etats dun processus (cas d'UNIX)


63

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

Support : Systme d'exploitation (Linux)

Etats dun processus (cas d'UNIX)


64

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

65

Communication entre processus

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

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.

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

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

Fich.c TP17.c CV.doc Test.ps

queue

5
tte

9
F_b

aprs I3

Fich.c TP17.c CV.doc Test.ps Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. queue Maurice

Conflits daccs aux variables partages (1/2)


68

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

Fich.c TP17.c CV.doc Test.ps

aprs I2b

queue

qb

qc Support : Systme d'exploitation (Linux)

aprs Fich.c TP17.c CV.doc Test.ps F_c //Par: Dr TCHOUPE T. Maurice I2c
tte queue

Conflits daccs aux variables partages (2/2)


Processus B : 69<qb queue> //I1b <charger fichier F_b dans [queue]> //I2b <queue qb+1> //I3b Processus C : <qc queue> //I1c <charger fichier F_c dans [queue]> //I2c <queue qc+1> //I3c qb qc qb qc 9 9 9 9

5
tte

9
F_c

Fich.c TP17.c CV.doc Test.ps

aprs I3b
queue

5
tte

9
F_c

Fich.c TP17.c CV.doc Test.ps

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

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Principes de la memoire virtuelle


72

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.

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Principes de la memoire virtuelle


73

Les diffrents problmes a rsoudre

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

Support : Systme d'exploitation (Linux)

Principes de la mmoire virtuelle


74

Les diffrents problmes a rsoudre

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.

Les fichiers mmaps

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Principes de la mmoire virtuelle


75

Quelques points de thorie

La hirarchie des mmoires

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.

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Principes de la mmoire virtuelle


76

Quelques points de thorie


La

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.

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Principes de la mmoire virtuelle


77

Quelques points de thorie

La notion de backing store

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).

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Principes de la mmoire virtuelle


78

Quelques points de thorie

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.

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Principes de la mmoire virtuelle


79

La segmentation

Principes de la segmentation

Segmentation simple

Support : Systme d'exploitation (Linux)

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

Principes de la mmoire virtuelle


80

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

Support : Systme d'exploitation (Linux)

81

Le SHELL et la programmation en SHELL:


LE LANGAGE DE COMMANDE

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

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

Support : Systme d'exploitation (Linux)

Scripts Shell
83

Les commandes excutes par le shell peuvent provenir soit:


du terminal (mode interactif), soit dun fichier (mode batch). On peut en effet crer des fichiers de commandes ce qui permet en quelque sorte aux utilisateurs de fabriquer leurs propres commandes. Ces commandes possdent les mmes prrogatives que les commandes dfinies dans les rpertoires /bin et /usr/bin. De cette manire, il est possible un utilisateur de se faonner un environnement sur mesure.

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Scripts Shell
84

Les interprteurs de commandes sous UNIX

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.

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Scripts Shell
85

Comment lancer lexcution dun programme schell


Un

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

Comment lancer lexcution dun programme schell


Ces deux dernires manires de procder ont pour inconvnient de crer un nouveau processus descendant du processus SHELL courant do la commande est lance et qui dans certain cas peut tre gnant. gnralement, on aimerait que le fichier de commande soit interprt dans le mme processus que celui du shell pour cela, on redirige momentanment lentre standard du shell interactif courant au moyen de la commande . <reference fichier commande> ainsi la commande $ . com1 excute le script com1.

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Scripts Shell: lexique


87

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.

Par exemple cp et rm, sont des commandes.

une commande interne est une instruction analogue un appel de sousprogramme interne au shell. Son action est ralise par le shell luimme.

Par exemple exit est une commande interne au shell.

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

Support : Systme d'exploitation (Linux)

Scripts Shell: lexique


88

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

Support : Systme d'exploitation (Linux)

Scripts Shell: caractres gnriques


89

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.

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Scripts Shell: caractres gnriques


90

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]* .

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Scripts Shell: Caractres spciaux


91

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

Support : Systme d'exploitation (Linux)

Scripts Shell:Variables et paramtres


92

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.

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Scripts Shell: Variables Utilisateurs


93

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

Support : Systme d'exploitation (Linux)

Scripts Shell
94

Traitement des quotes

Les chanes de caractres doivent tre encadres par des quotes (.).
$ TEMPS=Il faut beau $ echo $TEMPS Il fait beau $

Traitement des accents graves

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 $

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

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

Support : Systme d'exploitation (Linux)

Scripts Shell: Variables prdfinies


96

Il existe des variables prdfinies. Parmi celles-ci :

# 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

Support : Systme d'exploitation (Linux)

Scripts Shell: Expansion des variables


97

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.

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Scripts Shell: Expansion des variables


98

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

Support : Systme d'exploitation (Linux)

Scripts Shell: Porte et environnement


99

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

Support : Systme d'exploitation (Linux)

Scripts Shell: Porte et environnement


100

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

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

101

Scripts Shell: expressions, lecture et affichage


Le calcul dexpression sur des variables est support par le shell sous certaines contraintes.

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

Scripts Shell: expressions, lecture et affichage

Les comparaisons arithmtiques :

lt (<), gt (>), le (<=), ge (>=), eq (==), ne ( !=).

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

Les comparaisons sur les fichiers :


Support : Systme d'exploitation (Linux)

103

Scripts Shell: expressions, lecture et affichage

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

Support : Systme d'exploitation (Linux)

Scripts Shell: boucles et conditionnelles


104

Les mots-cls sont :

if then else fi case esac for while until do done select


for indice in liste do liste_de_commandes done

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

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Scripts Shell: boucles et conditionnelles


105

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

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Scripts Shell: boucles et conditionnelles


106

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

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Scripts Shell: boucles et conditionnelles


107

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

Support : Systme d'exploitation (Linux)

Scripts Shell: boucles et conditionnelles


108

Slection if

On peut imbriquer les structures if comme dans le cas suivant :


if... then... else if... then... else... fi fi

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

peut scrire commande_1 && commande_2

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Scripts Shell: boucles et conditionnelles


109

Slection if: Exemple :

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

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Scripts Shell: boucles et conditionnelles


110

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.

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Scripts Shell: boucles et conditionnelles


111

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

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Scripts Shell: les commandes


112

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.

Une commande dlivre en retour une valeur appele code de retour.


Un code de retour nul indique une excution sans erreur. Les valeurs positives et ngatives ont des significations propres chaque commande.

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Scripts Shell: les commandes


113

Les commandes peuvent tre excutes de diffrentes manires :


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

Support : Systme d'exploitation (Linux)

Scripts Shell: les commandes


114

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

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Scripts Shell: les commandes


115

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

Support : Systme d'exploitation (Linux)

Scripts Shell: les commandes


116

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

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Scripts Shell: les commandes


117

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

Support : Systme d'exploitation (Linux)

Scripts Shell: les commandes


118

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

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Scripts Shell: les commandes


119

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.

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice

Scripts Shell: les commandes


120

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

Scripts Shell: excution d'un script shell


121

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

Support : Systme d'exploitation (Linux)

Scripts Shell: excution d'un script shell


122

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

Support : Systme d'exploitation (Linux)

Scripts Shell: les commandes


123

Contrle des processus


Lorsque

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.

Support : Systme d'exploitation (Linux)

//Par: Dr TCHOUPE T. Maurice