Vous êtes sur la page 1sur 100

Systme dexploitation:

Systme dexploitation (SE)


Operating System ou OS

Cest est un ensemble de programmes responsables de linterfaage entre les ressources matrielles et les applications logicielles.
Il fournit aux programmes applicatifs des points d'entre gnriques pour les priphriques

Rles du SE
Le matre dorchestre: essentiel pour utiliser les ressources de la machine
gestion de la mmoire centrale gestion des processeurs: temps de calcul entre plusieurs programmes qui sexcutent simultanment gestion des priphriques: E/S gestion des fichiers: sur les mmoires de masses gestion des ressources: attribution des ressources ncessaires excution du programme sans empitement gestion des utilisateurs: pas dinterfrence entre eux
3

Composition
Un systme d'exploitation est typiquement compos de : un noyau bibliothques dynamiques (libraries) un ensemble d'outils systme (utilitaires shell) programmes applicatifs de base

APPLICATIONS SYSTEME DEXPLOITATION MATERIEL

applications (jeux, outils bureautiques, ) Interprteur de commandes, compilateur, noyau Langage machine Dispositifs physiques
4

Composition

Composition

Noyau (kernel)
Le noyau assure les fonctionnalits suivantes :
gestion des priphriques (au moyen de pilotes) gestion des files d'excution (aussi nomme processus) :
attribution de la mmoire chaque processus ordonnancement des processus (rpartition du temps d'excution sur le ou les processeurs) synchronisation et communication entre processus

gestion des fichiers (au moyen de systmes de fichiers) gestion des protocoles rseau (TCP/IP, IPX, etc.)

Noyau
Au lancement:
Boot: le programme qui initialise lordinateur Permet aux premiers services daccder aux applications systme : gestion de la mmoire, accs aux disques durs et accs aux priphriques

Mmoire centrale (vive): rpartition


Rserve pour le systme Rserve pour les applications

Assure une indpendance entre les applications et les matriels


8

Les bibliothques dynamiques


= Libraries Regroupent les oprations souvent utilises, selon les fonctionnalits (E/S, fichier, ) Ces oprations sont disponibles pour tre appeles et excutes par dautres programmes

Le systme de fichiers
Un systme de fichiers est une structure de donnes permettant de stocker les informations et de les organiser dans des fichiers sur des mmoires secondaires (disque dur, disquette, CD-ROM, cl USB, etc.)

Une telle gestion des fichiers permet de traiter, de conserver des quantits importantes de donnes ainsi que de les partager entre plusieurs programmes informatiques
Il offre l'utilisateur une vue abstraite sur ses donnes et permet de les localiser partir d'un chemin d'accs

10

Interface homme-machine
Via ligne de commande
shell, MSDos

Interface graphique
Xterm, Linux, Windows, Macintosh GUI (Graphical User Interface)

11

Shell
Shell (coquille par opposition au noyau) = L'interprteur de commandes permettant la communication avec le SE par l'intermdiaire d'un langage de commandes Permet l'utilisateur de piloter les priphriques en ignorant tout des caractristiques du matriel qu'il utilise, de la gestion des adresses physiques, etc. Exemple sur Unix/Linux: csh, tcsh,
ls : lister les rpertoires et les fichiers du rpertoire courant mv x y : changer le nom du fichier/rpertoire x en y

12

Programmes applicatifs de base

Des applications et services souvent installs ensembles avec le SE Exp. calculatrice, diteur de texte, navigateur web, etc.

13

Multi-utilisateurs et multi-tches
Multi-utilisateurs
plusieurs utilisateurs utilisent le mme ordinateur en mme temps

Multi-tches
un utilisateur lance plusieurs applications

Gestion de temps et de ressources


Processus: excuter, suspendre, dtruire

14

volution des SE
1980s

Unix (sur des machines plus grosses) CP/M MSDOS Mac OS


Interface graphique Windows Mac OS X Linux avec GUI Compatibilit
15

1990s et 2000s

Comparaison des SE
Systme DOS Windows 3.1 Windows 95 Codage 16 16/32 32 Mono-/multiutilisateur mono mono mono Mono-/multitche mono non premptif coopratif

Win. NT/2000 Windows XP


Unix/Linux Mac OS X

32 32/64
32/64 32

multi multi
multi multi

premptif premptif
premptif premptif
16

Unix / Linux
SE

17

Fonctionnenent de base d'UNIX


Unix est un systme d'exploitation qui fonctionne par couches

Utilisateurs Shell
Noyau
le shell envoie des appels au noyau en fonction des requtes de lutilisateur
le noyau UNIX est charg en mmoire lors du dmarrage de l'ordinateur; il alloue les ressources mmoire et processeur, gre le stockage des fichiers

systme UNIX

Matriel

= Processeur, mmoire, disque dur, lecteur de CDROM, cran, clavier

18

Fonctionnenent de base d'UNIX (2)

19

Le SE Linux
Proprits
multi-tches multi-utilisateurs multi-postes Ouvert (et gratuit) !!

Ouverture/Fermeture dune session


Travailler sous Linux implique une connexion au systme Login:
Identification de lutilisateur: login + mot-de-passe droits accords par le super-utilisateur (root)

Logout:
NE PAS ETEINDRE une machine sauvagement commande logout dans la console
20

Initiation au shell
Une fois connect, le systme nous connat, ouvre une session notre nom et attend nos instructions via un programme spcial: Le Shell = interprteur de commandes
interface utilisateur de base (interlocuteur avec le syst.) interprtation ligne ligne plusieurs shells: sh, csh, tcsh, bash, ksh, zsh, ... langage de programmation

shell par dfaut : bash

21

- commandes -

Initiation au shell
Format des commandes:
cde [-option(s)] [argument(s)]

22

- commandes Exemples:
date whoami
affiche le nom de lutilisateur connect

Initiation au shell

echo
affiche un message (echo "bonjour !")

ls
liste le contenu dun rpertoire

man <cde>
manuel en ligne

23

- mta caractres -

Initiation au shell
Caractres spciaux:
!

[]

&

<

>

>>

L'astrisque ou toile: *

interprt comme toute suite de caractres alphanumriques utiliser avec prcaution (commande rm par ex...)
Le point dinterrogation: ?

remplace 1 seul caractre alphanumrique


24

- mta caractres Le point-virgule: ; Les crochets: []


Remplace un caractre choisi parmi ceux numrs entre les crochets

Initiation au shell

Sparateur de commandes

Lanti-slash: \
Inhibe la signification du mta-caractre qui suit

Interprtation des chanes de caractres


Texte entre '' (simples quotes): le texte nest pas interprt mais considr comme un mot Texte entre "" (doubles quotes): seuls sont interprts les mtacaractres $, \ et ` Texte entre `` (anti quotes): considr comme une commande interprter, et cest le rsultat qui sera utilis.
25

- mta caractres -

Initiation au shell
Exemples:
echo *
Tous les fichiers sauf ceux dont le nom commence par un point

echo *c
Tous les fichiers dont le nom se termine par un c

echo .*
Tous les fichiers dont le nom commence par un point

echo [0-9]*
Tous les fichiers dont le nom commence par un chiffre

26

Le systme de fichiers
Stocke les donnes:
de faon hirarchique structure arborescente TOUT est fichier

3 types de fichiers:
fichiers ordinaires rpertoires fichiers spciaux (priph., )
27

- fichiers -

Le systme de fichiers
Accs aux fichiers rglement (sauf: tous les droits pour root) 3 types dutilisateurs: propritaire (user) personnes du mm groupe (group) les autres (others) 3 types de permissions lecture (r) criture (w) excution (x) afficher le contenu afficher le contenu modifier excuter

crer/supp fichiers
traverser

fichier

rpertoire

28

- fichiers -

Le systme de fichiers
Affichage des caractristiques: ls -l
groupe

-rw-r--r-- 1 Administrator Users 58K 16 Jul 09:19


nb liens propritaire taille date

tp1.tex
nom

type

group

-rw-r--r-user
others
29

- fichiers Changer les permissions: chmod chmod <classe op perm, >|nnn <fic>
classe:
u : user g : group o : others a : all

Le systme de fichiers
chaque perm = 1 valeur:
r w x rien 4 2 1 0

op:
= : affectation - : suppr. + : ajout

df. des permissions (par addition) pour chaque classe


exemples:

perm:
r : lecture w : criture x : excution

chmod u=rwx,g=rx,o=r tp1.tex chmod a+x script.sh chmod 755 script.sh


30

- fichiers -

Le systme de fichiers
Manipulation des fichiers
copier : dplacer/renommer : effacer : afficher le contenu : trier le contenu : cp fic1 fic2 mv fic1 fic2 rm fic cat fic sort fic

31

- larborescence -

Le systme de fichiers
rpertoire racine
le rpertoire de login: ~ le rpertoire courant: . le rpertoire suprieur: .. connatre le rp. courant: pwd lister le contenu: ls bin /

tmp

home

Administrator

(voir man ls)


.cshrc cours docs

chemin daccs au fichier tp1.tex:


/home/ Administrator /cours/tp1.tex ou bien: ~/cours/tp1.ex tp1.tex
32

- larborescence -

Le systme de fichiers
pwd retourne: /home/Administrator/cours se dplacer: cd [/home/Administrator/cours]$ cd .. [/home/Administrator]$ [/home/Administrator]$ cd /tmp [/tmp]$ /

tmp

home

chemin relatif chemin absolu crer un rpertoire: mkdir [/tmp]$ mkdir buzz supprimer un rpertoire: rmdir [/tmp]$ rmdir buzz

buzz

Administrator

.cshrc

cours

docs

tp1.tex rpertoire courant


33

- partitions -

Le systme de fichiers
le disque est dcoup en partitions
commandes & applications comptes utilisateurs swap fichiers temp priphriques (disques, ...) ...

accs transparent
34

- partitions -

Le systme de fichiers
tous les disques amovibles (disquette, cdrom, cl usb) dans : /mnt ex pour utiliser une disquette:
Montage: mount /mnt/floppy lire/ecrire dans /mnt/floppy Dmontage: umount /mnt/floppy

idem pour cls usb


35

- liens -

Le systme de fichiers
Liens physiques
ln <nom_fic> <nouveau_nom_fic> permet de donner plusieurs noms un fichier pas pour les rpertoires ne traverse pas les partitions un fic est dtruit quand TOUS ses liens physiques sont supprims ( raccourcis)

Liens symboliques
ln -s <nom_fic> <nouveau_nom_fic> cre un raccourci traverse les partitions fonctionne aussi pour les rpertoires

Lister les liens dun fichier: ls -l <nom_fic>


36

TP1
Les redirections Les tubes Les processus Les filtres
Crer sous tmp un dossier TP (mkdir) Copier dans TP le contenu de lib (cp)

37

Les redirections
Une commande ouvre 3 descripteurs de fichiers; par dfaut:
stdin
QuickTime e t un dco mpresseu r TIFF (non compress) sont requis pour visionner cette image.

commande

stdout

stderr

Redirections= remplacer les canaux par dfaut, rediriger vers une autre commande ou un fichier
38

Les redirections
< > >> 2> &>
ls

redirige lentre standard redirige la sortie standard concatne la sortie standard redirige la sortie derreur redirige la sortie standard et la sortie derreur
> liste cre/crase le fichier liste et y dirige la sortie de ls ajoute la fin du fichier liste la sortie de date envoie comme entre la commande wc le fichier liste
39

exemples:
date >> liste wc -l < liste

Les tubes (pipes)


Tube: |

pour connecter 2 commandes


stdin stdout commande stdin stdout commande

stderr

stderr

ex: combien de fichiers dans le rep. courant ?

sans pipe: ls > temp ; wc -l < temp ; rm temp avec un pipe: ls | wc -l


40

Les processus
Processus = objet dynamique qui reprsente un programme en cours dexcution et son contexte Caractristiques:
identification (pid) identification du proc. parent (ppid) propritaire priorit ...

Pour voir les processus en cours: ps


41

Infos retournes par ps:


[lewandow:~] ps PID TT STAT 3899 p1 S 4743 p1 S+ 4180 std S

Les processus
temps CPU utilis COMMAND -zsh emacs -zsh TIME 0:00.08 0:00.14 0:00.04

numro de processus

commande excute

tat du processus: terminal associ

R T P D S IW Z

actif bloqu en attente de page en attente de disque endormi swapp tu


42

Les processus
Options de ps:
-a -u -x liste tous les processus actifs format daffichage long inclut les processus sans terminal

Tuer un processus:
kill -9 <PID>

Processus en arrire-plan: &


(le terminal nest pas bloqu) exemple: emacs monfichier.c &
43

Les filtres Filtres simples


cat
more tee
exemples:

affiche le contenu des fichiers passs en paramtres (par dfaut, stdin) options -b, -n, -v affiche page par page les fichiers passs en paramtres (par dfaut, stdin) h pour avoir le dtail des commandes recopie lentre std sur la sortie standard et dans le fichier pass en paramtre option -a

Voir le man !!

ls | tee liste.fic

cat -n toto | more

44

Les filtres
sort
trie lentre ligne par ligne options: -r (inverse lordre de tri) +n (ignore les n 1ers champs) ex:
ls | sort ls -l | sort +4

comm
slectionne les lignes entre deux fichiers syntaxe: comm [-123] fic1 fic2
3 = diffrence entre fic1 et fic2 2 = lignes de fic2 ( fic1) 1 = lignes communes
45

Les filtres
uniq
dtruit les lignes conscutives dupliques options: -u (affiche les lignes "uniques"), -d (affiche les lignes "dupliques") ex:
uniq -u fic uniq -d fic

diff
compare deux fichiers options: -b (ignorer les lignes vides) ex:
diff fic1 fic2
46

cut

Les filtres

slectionne uniquement certaines colonnes du fichier pass en paramtre options:


-f<liste> : liste des champs garder -c<liste> : liste des colonnes garder -d<char> : sparateur de champs
ex:

cut -c-10 rep.txt


1 tonton 0 2 tux 0077 3 vuja 013

rep.txt 1 tonton 0311333300 2 tux 0077885566 3 vuja 0133220011

cut -f1,2 -d" " rep.txt


1 tonton 2 tux 3 vuja
47

tr

Les filtres
recopie stdin sur stdout en substituant des caractres syntaxe: tr [-cds] [s1 [s2]] options:
-c (complment de s1) -d efface les car. de s1 -s tte squence dans s1 est substitue par un car. unique dans s2

ex:
tr A-Z a-z < essai remplace les majuscules par des minuscules tr A-Z a-z < essai | tr -sc a-z \012 remplace les majuscules par des minuscules, puis remplace tout ce qui nest pas une lettre minuscule par un retour chariot (\012)
48

Les filtres
grep
recherche, dans le fichier pass en paramtre, les lignes vrifiant une expression rgulire donne syntaxe : grep expr_reg [fichier] ex:
grep 'toto' essai cherche dans essai toutes les lignes qui contiennent le mot toto grep '^[A-Z]' essai cherche dans essai toutes les lignes qui commencent par une majuscule

49

Les filtres
dautres filtres...
sed, awk, cmp, ...
Beaucoup de filtres et commandes... Savoir quelles existent Savoir ce quon peut en attendre Pour le reste, => man !!

50

Rpertoires/fichiers
But de la commande Se dplace vers le rpertoire rep Liste le contenu dun rpertoire (-R pour un listage rcursif) Copie un fichier (-R pour un rpertoire) Dplace un fichier Cre un rpertoire Efface un fichier (-rf pour effacer un rpertoire) Cre un lien destination qui va pointer sur une source (-s pour un lien symbolique) Met jour la date de modification du fichier, ou cre un fichier vide si le fichier nexiste pas. Syntaxe Equivalence MsDos

cd rep ls rep cp source destination mv source destination mkdir rep rm fichier ln source destination touch fichier ou repertoire

cd rep dir copy move mkdir rep del / deltree fichier non disponible

non disponible
51

Lecture des fichiers


Syntaxe cat fichier more fichier But commandes Affiche le contenu du fichier sur la sortie standard Lit le contenu dun fichier page par page. (Il doit lire lintgralit du fichier avant de lafficher) Equivalent more sauf quil nest pas oblig de lire lintgralit du fichier et permet de remonter dans l'affichage Naffiche que les dernires lignes dun fichier (-n permet de spcifier le nombre de lignes afficher) Comme tail, mais affiche les N premires lignes dun fichier (N=10 par dfaut) Recherche loccurence dune chaine de caractres "chaine" dans un ou plusieurs fichiers
52

less fichier

tail fichier

head fichier grep "chaine" fichier

TP2

53

Lditeur de texte

54

Lditeur vi
vi est un diteur (en mode console) peu convivial certes, mais ultra puissant

55

L'diteur VIm
Appel de lditeur
vi fichier

Modes ddition
le mode insertion :

Les caractres taps s'insrent directement dans le texte en cours (I)


le mode commande

Les caractres taps sont considrs comme des commandes d'dition de texte (:)

56

Commandes vi
Commande :w :q :q! :wq Description

:f file2

Sauvegarde les changements Quitte le document en cours Quitte le document en cours sans sauvegarder les changements Enregistre et quitte l'editeur Enregistre sous un autre nom le document (quivalent de enregistrer sous)

v d dd y yy p esc

Permet de passer en mode visualisation pour faire une slection par exemple Equivalent de couper, aprs une slection par exemple Coupe la ligne entire Equivalent de copier, aprs une slection par exemple Copie la ligne entire Coller aprs le curseur Changement de mode

57

Mode Edition
Aprs l'utilisation de ces commandes, l'diteur passe en mode dition :

Commande Description a A i I o Ajoute aprs le curseur Ajoute aprs la ligne courante Insre avant le curseur Insre au dbut de la ligne courante avant le premier caractre non-blanc Ouvre une nouvelle ligne en-dessous de la ligne actuelle Ouvre une nouvelle ligne au-dessus de la ligne actuelle

58

Les processus

59

Gestion des processus


Un processus est une instance d'un programme excutant une tche.
Il possde un numro unique sur le systme pid Chaque processus appartient un utilisateur et un groupe et les droits qui leur sont associs

Sous le Shell, un processus est cr pour excuter chacune des commandes


Le Shell est le processus pre de toutes les commandes.

60

Statut dun processus


Runing: le processus sexcute Waiting: Attend quelque chose pour sexcuter Ready: le processus a tout pour sexcuter sauf le processeur Suspendu: Arrt Zombie: tat particulier

61

Voir les processus


La commande ps : PID (process identificator) : c'est le numro du processus. TT : indique le terminal dans lequel a t lanc le processus. Un "?" signifie que le processus n'est attach aucun terminal (par exemple les dmons). STAT : indique l'tat du processus :
R : actif ( running) S : non activ depuis moins de 20 secondes (sleeping) I : non activ depuis plus de 20 secondes (idle) T : arrt (suspendu) Z : zombie

TIME : indique le temps machine utilis par le programme.

62

Commande ps: options


a (all) : donne la liste de tous les processus, y compris ceux dont vous n'tes pas propritaire. u (user, utilisateur) : donne davantage d'informations (nom du propritaire, heure de lancement, pourcentage de mmoire occupe par le processus, etc.). x : affiche aussi les processus qui ne sont pas associs un terminal.

63

Commande top
La commande top affiche les mmes informations, mais de faon dynamique Elle indique en fait par ordre dcroissant le temps machine des processus, les plus gourmands en premier.

64

Tuer les procesus


^c ^d ^z Kill pid: tuer un processus Kill -9 pid: imposer larrt immdiat du processus

65

Autres commandes pour la gestions des processus


ps : liste des processus et de leurs caractristiques htop : liste dynamique des processus et de ce qu'ils consomment pgrep : rcupration d'une liste de processus par expression rgulire pidof : rcupration du pid d'un processus recherch fuser : informations sur les file descriptor d'un processus lsof : idem pmap : afficher le mapping mmoire d'un processus strace : liste les appels systme du processus ltrace : liste les appels de fonction de bibliothques dynamiques du processus pstack : affiche la pile d'appel du processus gdb : pour tout savoir et mme modifier l'action d'un processus. kill : envoyer un signal un processus connaissant son pid killall : envoie un signal tous les processus portant un certain nom pkill : envoie un signal aux processus matchant une expression rgulire ctrl-z : envoie le signal STOP au processus en avant plan du shell en cours fg, bg : envoie le signal CONT un processus stopp du shell en cours

66

Cration dun Processus par programme

67

Cration
#include <stdio.h> #include <sys/times.h> int main( ) { fork() est une fonction qui permet de int pid ; dupliquer (crer) un processus. char *p = "le pere" ; La valeur de retour de la fonction est : pid = fork( ) ; "0", dans le processus fils; if (pid == 0) "pid du fils" dans le processus pre. "-1", si la primitive choue { p = "le fils"; printf(" je suis %s \n", p ); } else { printf(" je suis %s \n", p ); wait(NULL); } return 0; } 68

69

70

71

72

73

Cration
#include <sys/times.h> #include <stdio.h> main() { int pid; switch(pid=fork( ) ) { case -1: perror("Creation de processus"); exit(2); case 0 : /* on est dans le processus fils*/ printf("valeur de fork = %d \n", pid ) ; printf("je suis le processus %d de pere %d\n", getpid( ) , getppid( ) ) ; printf("fin de processus fils\n \n") ; exit(0); default : /*on est dans le processus pre*/ printf("valeur de fork = %d\n", pid) ; printf("je suis le processus %d de pere %d\n", getpid( ), getppid( ) ) ; printf("fin de processus pere\n \n") ; } } 74

Hritage

75

Hritage
Le fils hrite:
les propritaires rels et effectifs,(getuid, geteuid,getgid), le rpertoire de travail,(pwd) la valeur de nice, nice()

Le fils nhrite pas:


les verrous sur les fichiers dtenus par le pre, flock() les signaux reus et mis par le papa Temps

Sleep(n):
endort le processus jusqu' ce que n secondes soient coules, ou jusqu' ce qu'un signal non-ignor soit reu.
76

Exercice

Introduire une variable: int n=10;


Afficher la valeur de n avant le fork() Dans le fils : ajouter 10 n puis afficher Dans le pre: afficher la valeur de n

77

Fonction nice()
Excuter un programme avec une priorit d'ordonnancement modifie. Plus nice() est leve, plus le processus est gentil vis vis des autres, leur laissant un accs plus frquent l'ordonnanceur. (par dfaut=10) Le Super-User peut indiquer un ajustement ngatif. La priorit peut tre ajuste avec nice dans l'intervalle -20 (le plus prioritaire) 19 (le moins prioritaire).

78

Struct tms
struct tms { clock_t tms_utime; /* user time */ clock_t tms_stime; /* system time */ clock_t tms_cutime; /* user time of children */ clock_t tms_cstime; /* system time of children */ }; tms_utime: temps CPU coul en excutant les instructions du processus appelant. tms_stime: le temps CPU pass dans les fonctions systme excutes pour le compte du processus appelant tms_cutime: somme des valeurs de tms_utime et tms_cutime pour tous les processus fils termins ayant t attendus. tms_cstime: somme des valeurs de tms_stime et tms_cstime pour tous les processus fils termins ayant t attendus.

79

#include <stdio.h> #include <sys/types.h> #include <sys/times.h> char buf[1024]; /* pour rcuprer le rpertoire de travail */ struct tms temps; /* pour rcuprer les nombres de clics */ main(){ int i; nice(10); \*augmentation de 10 de la valeur du nice avant le fork*/ for (i=0;i<10000000;i++); /* une boucle consommatrice de CPU */ if (fork()==0) {printf("caractristiques du fils \n "); printf("uid=%d euid= %d egid=%d\n ", getuid(),geteuid(),getegid()); printf(" rpertoire de travail : %s\n ",getcwd(buf,1024)); printf("nice : %d \n",nice(0)+20); times(&temps); printf("clics en mode utilisateur : %d \n", temps.tms_utime); printf("clics en mode systme : %d \n\n ", temps.tms_stime); } else{ sleep(5); /* pour partir aprs la terminaison du fils */ printf("caractristiques du pre \n "); printf("uid=%d euid= %d egid=%d\n ",getuid(),geteuid(),getegid()); printf(" rpertoire de travail : %s\n ",getcwd(buf,1024)); printf("nice : %d \n",nice(0)+20); times(temps); printf("clics en mode utilisateur : %d \n", temps.tms_utime); printf("clics en mode systme : %d \n\n ", temps.tms_stime); } }

Hritage

80

Copie des donnes

81

Copie des donnes

La copie des donnes lors de la cration d'un processus ne se fait pas aprs sa cration, mais lors d'un accs la donne en criture

82

#include <sys/times.h> int n=1000; int main() {int m=1000, pid; printf("Adresse de n dans le pere: %p\n ", n); printf("Adresse de m dans le pere: %p\n ", m); printf("1 valeur de m et n dans le pere : %d \t %d\n\n\n ", m, n); pid=fork(); switch(pid){ case -1: perror("fork") ; return 2; case 0: /* on est dans le processus fils*/ printf("Adresse de n dans le fils: %p\n ", n); printf("Adresse de m dans le fils: %p\n ", m); printf("2 valeur de m et n dans le fils : %d \t %d\n\n\n ", m, n); m*=2;n*=2; printf("3 valeur de m et n dans le fils : %d \t%d\n ", m, n); sleep(3); printf("6 valeur de m et n dans le fils : %d %d\n ", m, n) ; return 0; default: /*on est dans le processus pre*/ sleep(2); printf("4 valeur de m et n dans le pere : %d \t %d\n\n ", m, n); m*=3;n*=3; printf("5 valeur de m et n dans le pere : %d \t %d\n\n ", m, n); sleep(2); return 0; } }

Copie des donnes

83

Copie des donnes


Le fils a modifi les valeurs de ses variables n et m, mais pas celles du pre. Les variables du pre et celles du fils sont totalement distinctes ; mme si elles portent le mme nom, il ne s'agit pas des mmes variables. En revanche, au moment du fork, le fils avait hrit des valeurs de toutes les variables de son pre.

84

tests

Changer les variables Changer la valeur de sleep ps -ef

85

Les processus Zombies

86

Zombie
Cest un terme dsignant un processus qui s'est achev, mais qui dispose toujours d'un identifiant de processus (PID) et reste donc encore visible dans la table des processus. On parle aussi de processus dfunt.

87

Zombie
La terminaison d'un processus: le systme libre les ressources que possde le processus mais ne dtruit pas son bloc de contrle. Le systme passe ensuite l'tat du processus la valeur ZOMBIE (un Z dans la colonne statut ). Un signal est envoy au pre afin de l'informer de ce changement. Ds que le processus pre a obtenu le code de fin du processus achev au moyen des appels systmes (wait ou waitpid), le fils est dfinitivement supprim de la table des processus.

88

Zombie
#include <stdio.h> #include <sys/times.h> int main() { if (fork()==0) { sleep(3); printf("fin du processus fils de numro %d \n ", getpid()); return 0; } sleep(30); return 0; }

ps l: aprs le sleep ps l: avant le printf

89

Cas normal: pre attend le fils


#include <sys/times.h> #include <stdio.h> int main(){ int PID, status; if (fork()==0) {printf("processus fils %d\n", getpid()); return 10;}

PID=wait(status);
printf("processus pere %d\n", getpid()); printf("sortie du wait \n "); sleep(15); /* fils est bien termin pre toujours en place signal et infos reus */ printf("PID = %d status = %d\n", PID, status); return 0; }

ps

90

Cas d'un Zombie: le pre n'attend pas son fils et est toujours en vie aprs la mort de son fils #include <sys/times.h> #include <stdio.h> int main(){int PID, status; if (fork()==0) { printf("processus fils %d\n", getpid()); return 10; } printf("processus pere %d\n", getpid()); for (;;); /* le processus pre boucle */ return 0; }

ps

91

Cas o le pre reoit le signal de terminaison de son fils et n'excute le wait qu'aprs
#include <sys/times.h> #include <stdio.h> int main(){int PID, status; if (fork()==0) {printf("processus fils %d\n", getpid()); return 10;} printf("processus pre %d\n", getpid()); sleep(15); /*lepreendormin'attendpas*/ printf("sortie du 1 er sleep \n "); PID=wait(status); printf("sortie du wait \n"); /* il n'y a plus de Zombie */ sleep(15); /* tout a t pris en compte et trait */ printf("PID = %d status = %d\n", PID, status); return 0; } top
92

Les pipes

93

Pipes
Les pipes permettent de faire communiquer des processus d'une mme machine : ce qu'un (ou plusieurs) processus crit peut tre lu par un autre.

On utilise un pipe (tuyau) pour faire communiquer un processus et un de ses descendants ou des descendants

94

Pipes
La nature d'un pipe est de type FIFO. Un pipe est unidirectionnel: un processus peut soit lire soit crire dans un pipe L'information disparat aprs lecture La taille du pipe est limite de 4k 20k dpendant du matriel. Le pipe est un objet du type fichier associ 2 descripteurs de fichier et 2 entres dans la table des fichiers ouverts Le pipe n'a pas de noms dans l'arborescence de Unix et donc son ouverture ne peut se faire l'aide de open mais plutt de pipe La communication n'a lieu qu'entre processus de la mme famille par hritage des descripteurs.
95

Pipes

Les pipes crs par le processus P2 ne permettent la communication qu'entre les processus P2, P4, P5 et leurs descendances. Les processus P1 et P3 ne peuvent accder ces pipes.
P1 P2 P4 P5 P3

96

Pipes
Cration: int p[2]; pipe(p);
p[0] Processus fils p[0] p[1]

p[1] Processus pre

L'appel systme pipe() retourne 2 descripteurs de fichier, p[0] ouvert pour la lecture et p[1] ouvert pour l'criture.
97

Pipes
Lecture
Effectue par un read() standard read(p[0],buf,5); lecture de 5 caractres du pipe dans un buffer.

Ecriture
Effectue par un write() standard

98

Code
#include <stdio.h> #include <sys/signal.h> main(){int fils1, fils2, n, m, p[2]; char buf[5]; pipe(p); /* cration de pipe */ if (fils1=fork()==0) /* cration du premier fils */ { printf("je suis le fils producteur \n"); printf("j'cris 5 caractres dans le pipe \n"); write(p[1],"ABCDE",5); printf("fin d'criture dans le pipe \n"); exit(3);} else /* le pre cre le fils consommateur */ { if (fils2=fork()==0) /* cration du deuxime fils */ { printf("je suis le fils consommateur \n"); read(p[0],buf,5); /* lecture du pipe */ printf("voici les caractres lus \n"); write(1,buf,5);/*affichage des caractres sur output standard*/ printf("\n"); exit(3);} else{ printf("processus pre c'est fini . \n"); wait(&n); wait(&m);} } } 99

Tests
Remplir le pipe jusqu dpasser sa taille. Fermer le pipe avant de quitter le programme et essayer de le rouvrir. Lire dun pipe vide. Lire deux fois les mme donnes du pipe.

100