Cours_OS.pptx

100
Système d’exploitation: 1

Transcript of Cours_OS.pptx

Page 1: Cours_OS.pptx

Système d’exploitation:

1

Page 2: Cours_OS.pptx

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

Page 3: Cours_OS.pptx

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

Page 4: Cours_OS.pptx

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

Page 5: Cours_OS.pptx

Composition

5

Page 6: Cours_OS.pptx

Composition

6

Page 7: Cours_OS.pptx

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

Page 8: Cours_OS.pptx

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

Page 9: Cours_OS.pptx

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

Page 10: Cours_OS.pptx

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

Page 11: Cours_OS.pptx

Interface homme-machine

• Via ligne de commande – shell, MSDos

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

11

Page 12: Cours_OS.pptx

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

Page 13: Cours_OS.pptx

Programmes applicatifs de base

• Des applications et services souvent installés ensembles avec le SE

• Exp. calculatrice, éditeur de texte, navigateur web, etc.

13

Page 14: Cours_OS.pptx

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

Page 15: Cours_OS.pptx

É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

Page 16: Cours_OS.pptx

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

Page 17: Cours_OS.pptx

Unix / Linux

SE

17

Page 18: Cours_OS.pptx

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

Page 19: Cours_OS.pptx

Fonctionnenent de base d'UNIX (2)

19

Page 20: Cours_OS.pptx

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

Page 21: Cours_OS.pptx

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

Page 22: Cours_OS.pptx

Initiation au shell

• Format des commandes:

cde [-option(s)] [argument(s)]

- commandes -

22

Page 23: Cours_OS.pptx

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

Page 24: Cours_OS.pptx

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

Page 25: Cours_OS.pptx

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

Page 26: Cours_OS.pptx

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

Page 27: Cours_OS.pptx

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

Page 28: Cours_OS.pptx

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

Page 29: Cours_OS.pptx

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

Page 30: Cours_OS.pptx

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

Page 31: Cours_OS.pptx

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

Page 32: Cours_OS.pptx

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

Page 33: Cours_OS.pptx

• 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

Page 34: Cours_OS.pptx

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

Page 35: Cours_OS.pptx

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

Page 36: Cours_OS.pptx

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

Page 37: Cours_OS.pptx

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

Page 38: Cours_OS.pptx

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

Page 39: Cours_OS.pptx

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

Page 40: Cours_OS.pptx

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

Page 41: Cours_OS.pptx

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

Page 42: Cours_OS.pptx

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

Page 43: Cours_OS.pptx

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

Page 44: Cours_OS.pptx

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

Page 45: Cours_OS.pptx

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

Page 46: Cours_OS.pptx

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

Page 47: Cours_OS.pptx

– 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

Page 48: Cours_OS.pptx

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

Page 49: Cours_OS.pptx

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

Page 50: Cours_OS.pptx

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

Page 51: Cours_OS.pptx

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

Page 52: Cours_OS.pptx

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

Page 53: Cours_OS.pptx

TP2

53

Page 54: Cours_OS.pptx

L’éditeur de texte

54

Page 55: Cours_OS.pptx

L’éditeur vi

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

55

Page 56: Cours_OS.pptx

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

Page 57: Cours_OS.pptx

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

Page 58: Cours_OS.pptx

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

Page 59: Cours_OS.pptx

Les processus

59

Page 60: Cours_OS.pptx

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

Page 61: Cours_OS.pptx

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

Page 62: Cours_OS.pptx

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

Page 63: Cours_OS.pptx

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

Page 64: Cours_OS.pptx

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

Page 65: Cours_OS.pptx

Tuer les procesus • ^c• ^d• ^z• Kill pid: tuer un processus• Kill -9 pid: imposer l’arrêt immédiat du

processus

65

Page 66: Cours_OS.pptx

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

Page 67: Cours_OS.pptx

Création d’un Processus par programme

67

Page 68: Cours_OS.pptx

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

Page 69: Cours_OS.pptx

69

Page 70: Cours_OS.pptx

70

Page 71: Cours_OS.pptx

71

Page 72: Cours_OS.pptx

72

Page 73: Cours_OS.pptx

73

Page 74: Cours_OS.pptx

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

Page 75: Cours_OS.pptx

Héritage

75

Page 76: Cours_OS.pptx

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

Page 77: Cours_OS.pptx

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

Page 78: Cours_OS.pptx

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

Page 79: Cours_OS.pptx

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

Page 80: Cours_OS.pptx

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

Page 81: Cours_OS.pptx

Copie des données

81

Page 82: Cours_OS.pptx

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

Page 83: Cours_OS.pptx

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

Page 84: Cours_OS.pptx

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

Page 85: Cours_OS.pptx

tests

• Changer les variables• Changer la valeur de sleep• ps -ef

85

Page 86: Cours_OS.pptx

Les processus Zombies

86

Page 87: Cours_OS.pptx

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

Page 88: Cours_OS.pptx

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

Page 89: Cours_OS.pptx

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

Page 90: Cours_OS.pptx

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

Page 91: Cours_OS.pptx

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

Page 92: Cours_OS.pptx

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

Page 93: Cours_OS.pptx

Les pipes

93

Page 94: Cours_OS.pptx

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

Page 95: Cours_OS.pptx

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

Page 96: Cours_OS.pptx

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

Page 97: Cours_OS.pptx

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

Page 98: Cours_OS.pptx

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

Page 99: Cours_OS.pptx

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

Page 100: Cours_OS.pptx

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