Cours_OS.pptx

Post on 26-Nov-2015

26 views 1 download

Transcript of Cours_OS.pptx

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