Système d’exploitation:
1
Système d’exploitation (SE)Operating System ou OS
• C’est est un ensemble de programmes responsables de l’interfaçage entre les ressources matérielles et les applications logicielles.
• Il fournit aux programmes applicatifs des points d'entrée génériques pour les périphériques
2
Rôles du SE
Le maître d’orchestre: essentiel pour utiliser les ressources de la machine– gestion de la mémoire centrale– gestion des processeurs: temps de calcul entre plusieurs
programmes qui s’exécutent simultanément– gestion des périphériques: E/S– gestion des fichiers: sur les mémoires de masses– gestion des ressources: attribution des ressources
nécessaires– exécution du programme sans empiétement– gestion des utilisateurs: pas d’interférence entre eux
3
Composition
Un système d'exploitation est typiquement composé de :– un noyau– bibliothèques dynamiques (libraries)– un ensemble d'outils système (utilitaires – shell)– programmes applicatifs de base
Dispositifs physiques
Langage machine
noyau
Interpréteur de commandes, compilateur, …
applications(jeux, outils bureautiques, …)
MATERIEL
SYSTEMED’EXPLOITATION
APPLICATIONS
4
Composition
5
Composition
6
Noyau (kernel)
Le noyau assure les fonctionnalités suivantes :– gestion des périphériques (au moyen de pilotes)– gestion des files d'exécution (aussi nommée
processus) : • attribution de la mémoire à chaque processus• ordonnancement des processus (répartition du temps
d'exécution sur le ou les processeurs)• synchronisation et communication entre processus
– gestion des fichiers (au moyen de systèmes de fichiers)
– gestion des protocoles réseau (TCP/IP, IPX, etc.)
7
Noyau• Au lancement:
– Boot: le programme qui initialise l’ordinateur– Permet aux premiers services d’accéder aux
applications système : gestion de la mémoire, accès aux disques durs et accès aux périphériques
• Mémoire centrale (vive): répartition– Réservée pour le système– Réservée pour les applications
• Assure une indépendance entre les applications et les matériels
8
Les bibliothèques dynamiques
• = Libraries• Regroupent les opérations souvent utilisées,
selon les fonctionnalités (E/S, fichier, …)• Ces opérations sont disponibles pour être
appelées et exécutées par d’autres programmes
9
Le système de fichiers • Un système de fichiers est une structure de données
permettant de stocker les informations et de les organiser dans des fichiers sur des mémoires secondaires (disque dur, disquette, CD-ROM, clé USB, etc.)
• Une telle gestion des fichiers permet de traiter, de conserver des quantités importantes de données ainsi que de les partager entre plusieurs programmes informatiques
• Il offre à l'utilisateur une vue abstraite sur ses données et permet de les localiser à partir d'un chemin d'accès
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'interpréteur de commandes permettant la communication avec le SE par l'intermédiaire d'un langage de commandes
• Permet à l'utilisateur de piloter les périphériques en ignorant tout des caractéristiques du matériel qu'il utilise, de la gestion des adresses physiques, etc.
• Exemple sur Unix/Linux: csh, tcsh, …– ls : lister les répertoires et les fichiers du répertoire courant– mv x y : changer le nom du fichier/répertoire « x » en « y »
12
Programmes applicatifs de base
• Des applications et services souvent installés ensembles avec le SE
• Exp. calculatrice, éditeur de texte, navigateur web, etc.
13
Multi-utilisateurs et multi-tâches• Multi-utilisateurs
– plusieurs utilisateurs utilisent le même ordinateur en même temps• Multi-tâches
– un utilisateur lance plusieurs applications• Gestion de temps et de ressources
– Processus: exécuter, suspendre, détruire
14
Évolution des SE
• 1980s– Unix (sur des machines plus grosses)– CP/M– MSDOS– Mac OS
• 1990s et 2000s– Interface graphique– Windows– Mac OS X– Linux avec GUI– Compatibilité
15
Comparaison des SE
Système Codage Mono-/multi-utilisateur
Mono-/multi-tâche
DOS 16 mono mono
Windows 3.1 16/32 mono non préemptif
Windows 95 32 mono coopératif
Win. NT/2000 32 multi préemptif
Windows XP 32/64 multi préemptif
Unix/Linux 32/64 multi préemptif
Mac OS X 32 multi préemptif16
Unix / Linux
SE
17
Fonctionnenent de base d'UNIX
Matériel
Noyau
Shell
Utilisateurs
= Processeur, mémoire, disque dur, lecteur de CDROM, écran, clavier…
le noyau UNIX est chargé en mémoire lors du démarrage de l'ordinateur; il alloue les ressources mémoire et processeur, gère le stockage des fichiers…
Unix est un système d'exploitation qui fonctionne par couches
syst
èm
e
UN
IX
le shell envoie des appels au noyau en fonction des requêtes de l’utilisateur
18
Fonctionnenent de base d'UNIX (2)
19
Le SE Linux
• Propriétés– multi-tâches– multi-utilisateurs– multi-postes– Ouvert (et gratuit) !!
• Ouverture/Fermeture d’une session– Travailler sous Linux implique une connexion au système– Login:
• Identification de l’utilisateur: login + mot-de-passe• droits accordés 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 système nous connaît, ouvre une session à notre nom et attend nos instructions via un programme spécial:
• Le Shell = interpréteur de commandes– interface utilisateur “de base” (interlocuteur avec le syst.)– interprétation ligne à ligne– plusieurs shells: sh, csh, tcsh, bash, ksh, zsh, ...– langage de programmation
• shell par défaut : bash
21
Initiation au shell
• Format des commandes:
cde [-option(s)] [argument(s)]
- commandes -
22
Initiation au shell• Exemples:– date– whoami
affiche le nom de l’utilisateur connecté
– echo affiche un message (echo "bonjour !")
– lsliste le contenu
d’un répertoire
– man <cde>manuel en ligne
- commandes -
23
Initiation au shell• Caractères spéciaux:
! ^ * ? [] \ ; & < > | >>
• L'astérisque ou étoile: *– interprété comme toute suite de caractères
alphanumériques– utiliser avec précaution (commande rm par ex...)
• Le point d’interrogation: ?– remplace 1 seul caractère alphanumérique
- méta caractères -
24
Initiation au shell• Le point-virgule: ;
– Séparateur de commandes• Les crochets: []
– Remplace un caractère choisi parmi ceux énumérés entre les crochets
• L’anti-slash: \– Inhibe la signification du méta-caractère qui suit
• Interprétation des chaînes de caractères– Texte entre '' (simples quotes): le texte n’est pas
interprété mais considéré comme un mot– Texte entre "" (doubles quotes): seuls sont interprétés les
métacaractères $, \ et `– Texte entre `` (anti quotes): considéré comme une
commande à interpréter, et c’est le résultat qui sera utilisé.
- méta caractères -
25
Initiation au shell• Exemples:
– echo *Tous les fichiers sauf ceux dont le nom commence par un point
– echo *cTous 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
- méta caractères -
26
Le système de fichiers
• Stocke les données:– de façon hiérarchique– structure arborescente– TOUT est fichier
• 3 types de fichiers:– fichiers ordinaires– répertoires– fichiers spéciaux (périph., …)
27
Le système de fichiers
• Accès aux fichiers réglementé (sauf: tous les droits pour root)
• 3 types d’utilisateurs:– propriétaire (user)– personnes du mm groupe (group)– les autres (others)
• 3 types de permissions
– lecture (r)– écriture (w)– exécution (x)
- fichiers -
afficher le contenu
modifier
exécuter
fichier
afficher le contenu
créer/supp fichiers
traverser
répertoire28
Le système de fichiers• Affichage des caractéristiques: ls -l
- fichiers -
-rw-r--r-- 1 Administrator Users 58K 16 Jul 09:19 tp1.tex
-rw-r--r--
type
user
group
others
nb liens propriétaire
groupe
taille date nom
29
Le système de fichiers• Changer les permissions: chmodchmod <classe op perm, …>|nnn <fic>
– classe:u : userg : groupo : othersa : all
– op:= : affectation- : suppr.+ : ajout
– perm:r : lecturew : écriturex : exécution
- fichiers -
exemples:
chmod u=rwx,g=rx,o=r tp1.texchmod a+x script.shchmod 755 script.sh
exemples:
chmod u=rwx,g=rx,o=r tp1.texchmod a+x script.shchmod 755 script.sh
– chaque perm = 1 valeur:
– déf. des permissions (par addition) pour chaque classe
r 4
w 2
x 1
rien 0
30
Le système de fichiers
• Manipulation des fichiers– copier : cp fic1 fic2– déplacer/renommer : mv fic1 fic2– effacer : rm fic– afficher le contenu : cat fic– trier le contenu : sort fic
- fichiers -
31
Le système de fichiersrépertoire racine /
hometmpbin
Administrator
.cshrc cours docs
tp1.tex
• le répertoire de login: ~• le répertoire courant: .• le répertoire supérieur: ..• connaître le rép. courant: pwd• lister le contenu: ls
(voir “man ls”)
• chemin d’accès au fichier tp1.tex:– /home/ Administrator /cours/tp1.tex– ou bien: ~/cours/tp1.ex
- l’arborescence -
32
• chemin relatif• chemin absolu
• chemin relatif• chemin absolu
Le système de fichiers
/
hometmp
Administrator
.cshrc cours docs
tp1.tex
• pwd retourne:/home/Administrator/cours
répertoire courant
buzz
• se déplacer: cd[/home/Administrator/cours]$ cd ..[/home/Administrator]$
[/home/Administrator]$ cd /tmp[/tmp]$
• créer un répertoire: mkdir [/tmp]$ mkdir buzz
• supprimer un répertoire: rmdir [/tmp]$ rmdir buzz
- l’arborescence -
33
Le système de fichiers
• le disque est “découpé” en partitions– commandes & applications– comptes utilisateurs– swap– fichiers temp– périphériques (disques, ...)– ...
• accès transparent
- partitions -
34
Le système 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– Démontage:
umount /mnt/floppy• idem pour clés usb
- partitions -
35
Le système de fichiers• Liens physiques
ln <nom_fic> <nouveau_nom_fic> – permet de donner plusieurs noms à un fichier– pas pour les répertoires– ne traverse pas les partitions– un fic est détruit quand TOUS ses liens physiques sont
supprimés (≠ raccourcis)
• Liens symboliquesln -s <nom_fic> <nouveau_nom_fic>– crée un raccourci– traverse les partitions– fonctionne aussi pour les répertoires
• Lister les liens d’un fichier: ls -l <nom_fic>
- liens -
36
TP1
• Les redirections• Les tubes• Les processus• Les filtres
• Créer 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 défaut:
commandestdout
stderr
QuickTime™ et undécompresseur TIFF (non compressé)
sont requis pour visionner cette image.
stdin
• Redirections= remplacer les canaux par défaut, rediriger vers une autre commande ou un fichier
Clavier
38
Les redirections
exemples:ls > liste crée/écrase le fichier liste
et y dirige la sortie de ‘ls‘date >> liste ajoute à la fin du fichier liste
la sortie de ‘date‘wc -l < liste envoie comme entrée
à la commande ‘wc‘ le fichier liste
exemples:ls > liste crée/écrase le fichier liste
et y dirige la sortie de ‘ls‘date >> liste ajoute à la fin du fichier liste
la sortie de ‘date‘wc -l < liste envoie comme entrée
à la commande ‘wc‘ le fichier liste
< redirige l’entrée standard
> redirige la sortie standard
>> concatène la sortie standard
2> redirige la sortie d’erreur
&> redirige la sortie standard et la sortie d’erreur
39
Les tubes (pipes)
• Tube: |• pour “connecter 2 commandes”
commandestdin stdout
stderr
commandestdin stdout
stderr
ex: combien de fichiers dans le rep. courant ?
sans pipe:ls > temp ; wc -l < temp ; rm tempavec un pipe:ls | wc -l
ex: combien de fichiers dans le rep. courant ?
sans pipe:ls > temp ; wc -l < temp ; rm tempavec un pipe:ls | wc -l
40
Les processus
• Processus = objet dynamique qui représente un programme en cours d’exécution et son contexte
• Caractéristiques:– identification (pid)– identification du proc. parent (ppid)– propriétaire– priorité– ...
• Pour voir les processus en cours: ps
41
Les processus• Infos retournées par ps:
[lewandow:~] ps PID TT STAT TIME COMMAND 3899 p1 S 0:00.08 -zsh 4743 p1 S+ 0:00.14 emacs 4180 std S 0:00.04 -zsh
R actifT bloquéP en attente de pageD en attente de disqueS endormiIW swappéZ tué
numéro de processus
temps CPU utilisé
commandeexécutée
état du processus:
terminalassocié
42
Les processus
• Options de ps:-a liste tous les processus actifs-u format d’affichage long-x inclut les processus sans terminal
• Tuer un processus: kill -9 <PID>
• Processus en arrière-plan: &(le terminal n’est pas bloqué)exemple: emacs monfichier.c &
43
Les filtres• Filtres simples
cat– affiche le contenu des fichiers passés en paramètres (par défaut, stdin)– options -b, -n, -v
more – affiche page par page les fichiers passés en paramètres (par défaut, stdin)
h pour avoir le détail des commandes
tee– recopie l’entrée std sur la sortie standard et dans le fichier passé en paramètre– option -a
exemples:
ls | tee liste.fic cat -n toto | more
Voir le man !!Voir le man !!
44
Les filtressort
– trie l’entrée ligne par ligne– options: -r (inverse l’ordre de tri)
+n (ignore les n 1ers champs)
– ex: ls | sortls -l | sort +4
comm– sélectionne les lignes entre deux fichiers– syntaxe: comm [-123] fic1 fic2
• 3 = différence entre fic1 et fic2• 2 = lignes de fic2 ( fic1)• 1 = lignes communes
45
Les filtres
uniq– détruit les lignes consécutives dupliquées – options: -u (affiche les lignes "uniques"),
-d (affiche les lignes "dupliquées")
– ex:uniq -u ficuniq -d fic
diff– compare deux fichiers – options: -b (ignorer les lignes vides)
– ex:diff fic1 fic2
46
– ex:• cut -c-10 rep.txt
1 tonton 02 tux 00773 vuja 013
• cut -f1,2 -d" " rep.txt1 tonton2 tux 3 vuja
Les filtrescut– sélectionne uniquement certaines
colonnes du fichier passé en paramètre– options:
-f<liste> : liste des champs à garder
-c<liste> : liste des colonnes à garder
-d<char> : séparateur de champs
rep.txt1 tonton 03113333002 tux 00778855663 vuja 0133220011
47
Les filtrestr– recopie stdin sur stdout en
substituant des caractères – syntaxe: tr [-cds] [s1 [s2]]– options:
-c (complément de s1)-d efface les car. de s1-s tte séquence dans s1 est substituée par un car. unique
dans s2– ex:
• tr A-Z a-z < essairemplace 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 n’est pas une lettre minuscule par un retour chariot (‘\012’)
48
Les filtres
grep– recherche, dans le fichier passé en paramètre, les
lignes vérifiant une expression régulière donnée– 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
• d’autres filtres...sed, awk, cmp, ...
• Beaucoup de filtres et commandes...• Savoir qu’elles existent• Savoir ce qu’on peut en attendre• Pour le reste, => man !!
• Beaucoup de filtres et commandes...• Savoir qu’elles existent• Savoir ce qu’on peut en attendre• Pour le reste, => man !!
50
Répertoires/fichiers
But de la commande Syntaxe Equivalence MsDos
Se déplace vers le répertoire rep cd rep cd rep
Liste le contenu d’un répertoire (-R pour un listage récursif) ls rep dir
Copie un fichier (-R pour un répertoire) cp source destination copy
Déplace un fichier mv source destination move
Crée un répertoire mkdir rep mkdir repEfface un fichier (-rf pour effacer un répertoire) rm fichier del / deltree fichier
Crée un lien destination qui va pointer sur une source (-s pour un lien symbolique)
ln source destination non disponible
Met à jour la date de modification du fichier, ou crée un fichier vide si le fichier n’existe pas.
touch fichier ou repertoire
non disponible
51
Lecture des fichiers
Syntaxe But commandes
cat fichier Affiche le contenu du fichier sur la sortie standard
more fichierLit le contenu d’un fichier page par page. (Il doit lire l’intégralité du fichier avant de l’afficher)
less fichierEquivalent à more sauf qu’il n’est pas obligé de lire l’intégralité du fichier et permet de remonter dans l'affichage
tail fichierN’affiche que les dernières lignes d’un fichier (-n permet de spécifier le nombre de lignes à afficher)
head fichierComme tail, mais affiche les N premières lignes d’un fichier (N=10 par défaut)
grep "chaine" fichierRecherche l’occurence d’une chaine de caractères "chaine" dans un ou plusieurs fichiers
52
TP2
53
L’éditeur de texte
54
L’éditeur vi
• vi est un éditeur (en mode console) peu convivial certes, mais ultra puissant
55
L'éditeur VIm
Appel de l’éditeur◦ vi fichier
Modes d’édition◦ le mode insertion :
Les caractères tapés s'insèrent directement dans le texte en cours (I)◦ le mode commande
Les caractères tapés sont considérés comme des commandes d'édition de texte (:)
56
Commandes viCommande Description
:w Sauvegarde les changements
:q Quitte le document en cours
:q!Quitte le document en cours sans sauvegarder les changements
:wq Enregistre et quitte l'editeur
:f file2Enregistre sous un autre nom le document (équivalent de enregistrer sous)
vPermet de passer en mode visualisation pour faire une sélection par exemple
d Equivalent de couper, aprés une sélection par exemple
dd Coupe la ligne entière
y Equivalent de copier, après une sélection par exemple
yy Copie la ligne entière
p Coller après le curseur
esc Changement de mode57
Mode Edition
Commande Description
a Ajoute après le curseur
A Ajoute après la ligne courante
i Insère avant le curseur
IInsère au début de la ligne courante avant le premier caractère non-blanc
oOuvre une nouvelle ligne en-dessous de la ligne actuelle
OOuvre une nouvelle ligne au-dessus de la ligne actuelle
Après l'utilisation de ces commandes, l'éditeur passe en mode édition :
58
Les processus
59
Gestion des processus• Un processus est une instance d'un programme
exécutant une tâche.– Il possède un numéro unique sur le système pid– Chaque processus appartient à un utilisateur et un
groupe et à les droits qui leur sont associés
• Sous le Shell, un processus est créé pour exécuter chacune des commandes– Le Shell est le processus père de toutes les
commandes.
60
Statut d’un processus• Runing: le processus s’exécute• Waiting: Attend quelque chose pour s’exécuter• Ready: le processus a tout pour s’exécuter sauf le
processeur• Suspendu: Arrêté• Zombie: état particulier
61
Voir les processusLa commande ps :• PID (process identificator) : c'est le numéro 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 démons).
• 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 : arrêté (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 propriétaire.
• u (user, utilisateur) : donne davantage d'informations (nom du propriétaire, heure de lancement, pourcentage de mémoire occupée par le processus, etc.).
• x : affiche aussi les processus qui ne sont pas associés à un terminal.
63
Commande top
• La commande top affiche les mêmes informations, mais de façon dynamique
• Elle indique en fait par ordre décroissant 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 l’arrêt immédiat du
processus
65
Autres commandes pour la gestions des processus
• ps : liste des processus et de leurs caractéristiques • htop : liste dynamique des processus et de ce qu'ils consomment • pgrep : récupération d'une liste de processus par expression régulière • pidof : récupération du pid d'un processus recherché • fuser : informations sur les file descriptor d'un processus • lsof : idem • pmap : afficher le mapping mémoire d'un processus • strace : liste les appels système du processus • ltrace : liste les appels de fonction de bibliothèques dynamiques du processus • pstack : affiche la pile d'appel du processus • gdb : pour tout savoir et même 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 régulière • 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
Création d’un Processus par programme
67
Création #include <stdio.h>#include <sys/times.h>int main( ){
int pid ;char *p = "le pere" ;pid = fork( ) ;if (pid == 0)
{p = "le fils"; printf(" je suis %s \n", p );}
else{
printf(" je suis %s \n", p );wait(NULL);}
return 0;}
68
fork() est une fonction qui permet de dupliquer (créer) un processus.La valeur de retour de la fonction est :
"0", dans le processus fils;"pid du fils" dans le processus père."-1", si la primitive échoue
69
70
71
72
73
Création
#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 père*/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
Héritage
75
Héritage
• Le fils hérite:– les propriétaires réels et effectifs,(getuid, geteuid,getgid),
– le répertoire de travail,(pwd)
– la valeur de nice, nice()
• Le fils n’hérite pas:– les verrous sur les fichiers détenus par le père, flock() – les signaux reçus et émis par le papa– Temps
• Sleep(n): – endort le processus jusqu'à ce que n secondes soient
écoulées, ou jusqu'à ce qu'un signal non-ignoré soit reçu.
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 père: afficher la valeur de n
77
Fonction nice()
• Exécuter un programme avec une priorité d'ordonnancement modifiée.
• Plus nice() est élevée, plus le processus est gentil vis à vis des autres, leur laissant un accès plus fréquent à l'ordonnanceur. (par défaut=10)
• Le Super-User peut indiquer un ajustement négatif.
• La priorité peut être ajustée 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 exécutant les instructions du processus appelant.
tms_stime: le temps CPU passé dans les fonctions système exécutées pour le compte du processus appelant
tms_cutime: somme des valeurs de tms_utime et tms_cutime pour tous les processus fils terminés ayant été attendus.
tms_cstime: somme des valeurs de tms_stime et tms_cstime pour tous les processus fils terminés ayant été attendus.
79
Héritage#include <stdio.h>#include <sys/types.h>#include <sys/times.h>char buf[1024]; /* pour récupérer le répertoire de travail */struct tms temps; /* pour récupérer 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("caractéristiques du fils \n ");
printf("uid=%d euid= %d egid=%d\n ", getuid(),geteuid(),getegid());printf(" répertoire 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 système : %d \n\n ", temps.tms_stime); }
else{ sleep(5); /* pour partir après la terminaison du fils */printf("caractéristiques du père \n ");printf("uid=%d euid= %d egid=%d\n ",getuid(),geteuid(),getegid());printf(" répertoire 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 système : %d \n\n ", temps.tms_stime); } }80
Copie des données
81
Copie des données
La copie des données lors de la création d'un processus ne se fait pas après sa création, mais lors d'un accès à la donnée en écriture
82
Copie des données#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 père*/
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;
}}
83
Copie des données
• Le fils a modifié les valeurs de ses variables n et m, mais pas celles du père.
• Les variables du père et celles du fils sont totalement distinctes ; même si elles portent le même nom, il ne s'agit pas des mêmes variables.
• En revanche, au moment du fork, le fils avait hérité des valeurs de toutes les variables de son père.
84
tests
• Changer les variables• Changer la valeur de sleep• ps -ef
85
Les processus Zombies
86
Zombie
• C’est un terme désignant 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 défunt.
87
Zombie
La terminaison d'un processus:• le système libère les ressources que possède le processus
mais ne détruit pas son bloc de contrôle. • Le système passe ensuite l'état du processus à la valeur
ZOMBIE (un Z dans la colonne « statut »). • Un signal est envoyé au père afin de l'informer de ce
changement. • Dès que le processus père a obtenu le code de fin du
processus achevé au moyen des appels systèmes (wait ou waitpid), le fils est définitivement 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 numéro %d \n ", getpid());
return 0;
}
sleep(30);
return 0;
}
89
• ps –l: après le sleep• ps –l: avant le printf
Cas normal: père 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é père toujours en place signal et infos reçus */printf("PID = %d status = %d\n", PID, status);return 0;
}90
• ps
Cas d'un Zombie: le père n'attend pas son fils et est toujours en vie après 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 père boucle */return 0;
}
91• ps
Cas où le père reçoit le signal de terminaison de son fils et n'exécute le wait qu'après
#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 père %d\n", getpid());sleep(15); /* le père endormi n'attend pas … */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 même 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 disparaît après lecture
• La taille du pipe est limitée de 4k à 20k dépendant du matériel.
• Le pipe est un objet du type fichier associé à 2 descripteurs de fichier et à 2 entrées 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 plutôt de pipe
• La communication n'a lieu qu'entre processus de la même famille par héritage des descripteurs.
95
Pipes
Les pipes créés 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 accéder à ces pipes.
P1
P5
P2
P4
P3
96
Pipes
• Création:int p[2];pipe(p);
• L'appel système pipe() retourne 2 descripteurs de fichier, p[0] ouvert pour la lecture et p[1] ouvert pour l'écriture.
Processus père
p[1] p[0]
p[0] p[1]
Processus fils
97
Pipes
• LectureEffectuée par un read() standard
read(p[0],buf,5); lecture de 5 caractères du pipe dans un buffer.
• EcritureEffectuée 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); /* création de pipe */if (fils1=fork()==0) /* création du premier fils */
{ printf("je suis le fils producteur \n");printf("j'écris 5 caractères dans le pipe \n");
write(p[1],"ABCDE",5); printf("fin d'écriture dans le pipe \n");exit(3);}
else /* le père crée le fils consommateur */{ if (fils2=fork()==0) /* création du deuxième fils */ { printf("je suis le fils consommateur \n");
read(p[0],buf,5); /* lecture du pipe */printf("voici les caractères lus \n");
write(1,buf,5);/*affichage des caractères sur output standard*/
printf("\n");exit(3);}
else{ printf("processus père c'est fini …. \n");wait(&n);wait(&m);}
}} 99
Tests
• Remplir le pipe jusqu’à dépasser sa taille.
• Fermer le pipe avant de quitter le programme et essayer de le rouvrir.
• Lire d’un pipe vide.
• Lire deux fois les même données du pipe.
100
Top Related