Vous êtes sur la page 1sur 68

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

INTRODUCTION au systme Unix

Eric Gressier CNAM-CEDRIC


28 Novembre 1994 1

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

PLAN

1. Introduction 2. Processus 3. Gestion Mmoire 4. Fichiers et Tubes 5. IPC System V

28 Novembre 1994

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

REFERENCES BIBLIOGRAPHIQUES

Unix Network Programming. W. Richard Stevens. Prentice Hall Software Series.1990. Advanced Programming in the Unix Environment. W. Richard Stevens. Addison Weslay.1992. The Design and Implementation of the 4.3 BSD Unix Operating System. S.J. Leffler. M. K. Mc Kusick. M.J. Karels. J.S. Quaterman. Prentice Hall.1989. The Magic Garden Explained. The Internals of UNIX SYSTEM V RELEASE 4. An open systems design. B. Goodheart. J. Cox. Prentice Hall.1994.

28 Novembre 1994

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

1. INTRODUCTION

28 Novembre 1994

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Les Unix Il existe plusieurs UNIX, mais les plus rpandus sont : - Unix System V Release 4 - Unix 4.4 BSD Et une standardisation de l'interface des appels systmes : POSIX. Pour la partie communication, les travaux majeurs ont t dvelopps partir de la famille BSD. Mais, aujourdhui, on peut quasiment dire que tout est dans tout et rciproquement. Unix System V release 4 semble marquer l'avantage sur l'Unix BSD arrt la version 4.4. Dans la prsentation le noyau 4.3 BSD a t choisi, Ultrix (DEC) a t construit partir de cette souche.

28 Novembre 1994

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

2. Processus

28 Novembre 1994

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Processus Processus = instance excutable en mmoire Programme source : main (argc, argv) int argc; int *argv[];
/* nombre d'arguments, nom du programme inclu */ /*tableau de pointeurs sur la liste des arguments : argv[0] -> "nom du programme\0" argv[1] -> "1er argument\0" ... */

d'un

programme

{ corps du programme }

28 Novembre 1994

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Gnration d'un excutable utilisation d'un excutable


source compilation objet dition de lien excutable a.out programme sur disque excution : translation expansion chargement excution en mmoire centrale

et

exit()

espace de pagination

28 Novembre 1994

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Image d'un processus sur disque structure dcrite par a.out.h :


Magic number entte

Code (text)

donnes intialises readonly donnes initialises read-write table des symboles

zone donnes initialises liens utilisables pour une autre dition de liens

Magic Number : si #! dans a_magic, le fichier est excutable par un interprteur :


#! est suivi par le chemin d'accs l'interprteur : #!/bin/sh pour le Bourne Shell #!/bin/csh pour le C-Shell

sinon le fichier est directement excutable, c'est le rsultat d'une compilation et d'une dition de lien, ce champ indique si la pagination est autorise (stickybit), si le code est partageable par plusieurs processus.
28 Novembre 1994 9

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Image d'un processus en mmoire


zone pile Pile d'excution
Adresse haute

Heap (tas)
zone malloc()

donnes dynamique
zone remplie zro (bss-block started by symbol)

donnes utilisateur

donnes non-initialises donnes initialises code utilisateur

donnes statiques

Adresse basse

Organisation de l'image d'un processus en mmoire virtuelle .


1

Le chargement de l'image du processus en mmoire se fait la demande, au fur et mesure des dfauts de pages.

Plusieurs Processus peuvent utiliser le mme code, le code est alors partag entre plusieurs processus, un seul exemplaire de la partie "text" rside en mmoire
1

28 Novembre 1994

10

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Gnration de Processus

1 utilisateur = plusieurs processus cration de processus : appels systme fork() cre un nouveau processus exec() charge un nouvel excutable Processus : Unit dexcution dun programme Espace dadressage & dallocation de ressources
(dsignation locale une machine des objets systmes, non unicit des noms sur le rseau)
28 Novembre 1994 11

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Processus du point de vue du Systme


descripteur (table des processus) pile noyau contexte utilisateur
.user area (.u -> user.h) . argv . environnement (envp : process envt. vector)

proc strucuture (proc.h)

pile utilisateur vu auparavant

donnes utilisateur

code utilisateur

La pile noyau est utilise quand le processus s'excute en mode systme, un appel systme
provoque le passage du processus du mode d'excution utilisateur au mode systme, le processus excute alors du code systme pour son propre compte.

"user area" : ensemble d'informations sur le processus, informations ncessaires mais non vitales quand
le processus n'est plus en mmoire (sur disque de pagination)
28 Novembre 1994 12

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Image de la mmoire vue par le systme


partie toujours rsidente en mmoire centrale pile d'interruptions systme (dpendant du matriel)
table des processus

donnes systme (/vmunix) code systme

mode d'excution systme, mode privilgi, espace systme mode d'excution utilisateur, espace mmoire utilisateur

...

processus

partie sujette la pagination et au "swap" pagination -> li la gestion de la mmoire virtuelle "swap" -> recopie de processus entier sur disque, concerne la gestion de ressource mmoire et processeur, et le taux d'utilisation de la machine
28 Novembre 1994 13

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Modes d'excution
interruptions : disques, horloge,E/S rseau ... .pas d'ordonnancement .pas de blocage possible .espace d'adressage systme .exc. sur pile d'interruption

partie basse du noyau

partie haute du noyau

sleep() .s'excute jusqu'au blocage ou fin wakeup() d'appel attente .blocage possible pour manque de ressource .excution sur pile noyau dans l'espace d'adressage utilisateur

appel systme

espace utilisateur - processus -

programme

. premption possible . excution sur pile utilisateur

28 Novembre 1994

14

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Adressage en mmoire virtuelle exemple Vax :

Rserv 0xC0000000
Espace Noyau pile mode noyau user struct pile

System

0x80000000

0x40000000
tas donnes excutable

Dcoupage de l'Espace d'adresse Rgion P1 Virtuelle Vax


Rgion P0

0x00000000

28 Novembre 1994

15

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Lecture "systme" de la mmoire


/dev/kmem /dev/mem mmoire virtuelle vue comme un priphrique mmoire physique vue comme un priphrique - les donnes noyaux ont une adresse (Vax) : 0x80 000 000 + dplacement - les donnes utilisateur ont une adresse (Vax): 0x00 000 000 + dplacement

/dev/drum mmoire de pagination/swap vue comme un priphrique Les priphriques sont vus comme des fichiers, on peut y accder de la mme faon en respectant les rgles d'accs. exemple : accs en lecture la mmoire virtuelle fd_kmem = open ("/dev/kmem",0)

28 Novembre 1994

16

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Pour savoir si une variable est dans l'espace noyau : son adresse est sur 32 bits (long int), si loc est l'adresse de la variable examine :

loc "ET" 0x 8000 0000

vrai : variable dans l'espace noyau

faux : variable dans l'espace utilisateur

28 Novembre 1994

17

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Processus en mmoire vive

processus en mmoire : un ensemble de structures de donnes

desc. d'image executable Pile en mode noyau x_caddr

....

p_textp p_addr red zone table des pages desc. utilisateur user struct (u.) Contexte matriel Process Control Bloc -Vax

table des pro

desc. processus proc struct

cessus

Rsident en mmoire centrale

....

p_p0br

u_procp

Paginable "Swappable"

28 Novembre 1994

....
18

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

descripteur de structure proc.h -

processus

proc

. infos d ordonnancement -> p_pri => priorit courante du processus (petit nombre = prioritaire) -> p_usrpri => priorit du processus en mode utilisateur, calcul partir de p_nice et p_cpu -> p_nice => priorit propose par l'utilisateur pour le processus -> p_cpu => priorit qui tient compte de l'utilisation relle du processeur par le processus -> p_slptime => temps pass par le processus dans l'tat endormi . identificateurs -> p_pid => identificateur du processus (unique sur la machine), obtenu par getpid() -> p_ppid => identificateur du pre crateur du processus, obtenu par getppid() -> p_uid => identificateur de lutilisateur (user identifier) du processus, obtenu par getuid() -> p_pgrid => identificateur du groupe dans lequel est le processus, obtenu par getgid() 2 -> p_euid => identificateur effectif du processus, identique p_uid souvent sauf quand le programme dispose du bit suid (set user id) qui lui permet de prendre l'uid d'un autre utilisateur, root par exemple, peut tre obtebu avec geteuid() -> p_egid => idem juste avant pour le groupe, obtenu avec getegid() . gestion mmoire -> p_textp => pointeur vers un descripteur de fichier excutable -> p_p0pbr => adresse de la table des pages du processus -> p_szpt => taille de la table des pages -> p_addr => localisation de la zone u. (user area) qd le processus est en mmoire -> p_swaddr => localisation de la zone u. qd le processus est swapp . gestion dvnements et signaux -> p_wchan => signaux attendus par le processus : fin dE/S, fin de dfaut de page, ... -> p_sig -> p_sigignore -> p_sigcatch

champ dpendant du systme (Unix BSD, Ultrix ...)


19

28 Novembre 1994

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Accs la table des processus l'intrieur du noyau BSD 1. Explorer l'image disque du systme pour obtenir l'adresse en mmoire virtuelle (MV) des variables cibles. Pour la table des processus, on cherche : _proc: la table elle-mme _nproc : le nombre maximum d'entres dans la table Utiliser la fonction nlist()
struct { char *name;/* nom de la unsigned charn_type; char n_other; short n_desc; unsigned longn_value;/*dplact dans };
variable */

la MV*/

utilisation :
struct nlist nlst[] = { {"_nproc"}, {"_proc"}, {0}, /* obligatoire */ }

nlist("/vmunix",nlst);
28 Novembre 1994 20

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

2. Accder la mmoire virtuelle pour retirer le contenu de ces variables


kmem = open("/dev/kmem",0);/*au dbut*/ lseek(kmem,offset_var,0); read(kmem,ptr_buff_stockage,taille);

pour _proc : au pralable :


struct proc long int *bproc nproc

lseek(kmem,nlst[1].nvalue,0); read(kmem,&nproc,sizeof(longint3));

Accs pour obtenir le premier mot machine contenu dans la table des processus :
lseek(kmem,nlst[2].nvalue,0); read(kmem,&bproc,sizeof(longint));
bproc contient ce premier mot !!!

Un mot sur un vax fait 32 bits et est dcrit par un long int
21

28 Novembre 1994

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Processus prts
File des Processus Prts -> Tableau de files, sauf le processus lu whichqs 0 4 Priorit Mode Noyau 50 Priorit Mode "User" 124 qs[32]
p_link processus p_rlink processus

processus p_usrpri

...

La priorit va de 0 127 : 0 la plus forte, 127, la plus faible. Le tableau des files s'appelle qs[]. Un vecteur de bits whichqs (32 bits, soit un part entre de qs !!!) est associ qs et indique si la file correspondante est vide ou non. qs est gr suivant une mthode de hachage, pour obtenir la bonne file on fait p_pri/4.

28 Novembre 1994

22

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Etats d'un processus

lu

exit

zombie

fini

sleep ligible assez de mmoire fork cr swapout swapin prt wakeup Processus en bloqu Mmoire endormi : "wait channel" "wait event" swapout Processus bloqu "Swapp" sur S disque

pas assez de mmoire prt S

wakeup

voir la commande pstat(8) qui permet d'imprimer une photographie des informations contenues dans les tables du systme, pstat -p liste le contenu de la table des processus ... le rsultat est assez cryptique !!!

28 Novembre 1994

23

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Ordonnancement - aspects gnraux top horloge noyau : 1 tick (10 ms souvent) L'ordonnancement s'effectue par priorit : la file de plus forte priorit est examine en premier, et pour une mme file en tourniquet, 1 quantum de temps correspond 10 ticks. Quand un processus se bloque pour une ressource manquante, il ne rejoint pas la file des processus prts. Quand un processus puise son quantum, il est mis en fin de la file dont il vient. Les processus sont bougs de file en file en fonction de la valeur de leur priorit courante. Un processus en excution ne peut tre prempt par un processus plus prioritaire qui vient de s'veiller que s'il effectue un appel systme. Sinon, le processus plus prioritaire doit attendre l'puisement de son quantum.

28 Novembre 1994

24

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Calcul de priorit (1) Calcul de la priorit fond sur : p_nice priorit demande par l'utilisateur p_cpuindicateur d'utilisation du processeur par le processus
4

value tous les 4 ticks en cours d'excution (processus lu) par :


p_usrpri = PUSER 5 + Entier(p_cpu/4) + 2 *p_nice (1)

L'utilisation du processeur par le processus lu est calcule chaque tick :


p_cpu = p_cpu +1

Chaque seconde p_cpu est ajust par le calcul:


p_cpu = (2*n)/(2*n + 1) + p_nice o n est la longueur moyenne de la file des processus prts chantillonne sur 1 minute.

La priorit d'un processus dcroit avec le temps pass en excution.

(-20, processus "booster" par l'administrateur, 0 normal, +20 ralenti par l'utilisateur) 5 PUSER vaut 50 en gnral
4

28 Novembre 1994

25

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Calcul de priorit (2)

Quand le processus est rest endormi plus d'1 s, sa priorit est recalcule son rveil par :
p_cpu =[Entier((2*n)/(2*n+1))]p_slptime p_cpu

p_slptime est la dure d'endormissement, mis zro au moment de la mise en sommeil, puis incrmet de un chaque seconde coule.

Puis il applique la formule (1) pour calculer la priorit d'ordonnancement.

28 Novembre 1994

26

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Calcul de priorit (3) Priorits en mode noyau : Non-interruptibles :0 PZERO


6

- swapper (priorit 0) - attente E/S disque - attente infos sur fichier (infos de contrle) Interruptibles : PZERO+1 PUSER -1
7

- attente de ressources - attente sur verrou de ressources - attente d'vnement Priorits en mode utilisateur : PUSER 127 p_usrpri est toujours ramen une valeur 127

25 habituellement 7 50 habituellement
6

28 Novembre 1994

27

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Ce qu'il faut retenir !!!

Plus on s'excute, plus on consomme de temps CPU, et plus la priorit du processus baisse.

qqch faire ... lancez un processus qui dure peu de temps

28 Novembre 1994

28

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Commande ps
USER gressier gressier root root root root root root root root root root root root root root root root amaral root root root root donzeau PID %CPU %MEM SZ RSS TT STAT 5015 7.5 0.8 649 530 p3 R 5000 0.6 0.1 247 86 p3 S 4748 0.3 0.1 102 44 p5 S 3592 0.2 0.1 84 37 q8 S 298 0.1 0.1 145 83 ? I 303 0.1 0.1 244 29 ? S 1 0.0 0.3 254 212 ? S 4355 0.0 0.1 102 43 qb I 348 0.0 0.1 134 47 ? S 208 0.0 0.1 163 50 ? I 291 0.0 0.1 48 33 ? S 2 0.0 0.1 4096 0 ? D 14693 0.0 0.0 0 0 ? Z 18500 0.0 0.0 147 0 ? IW 22368 0.0 0.0 0 0 ? Z 7600 0.0 0.0 13 0 ? IW 12550 0.0 0.0 340 12 ? IW 28562 0.0 0.0 340 12 ? IW 2686 0.0 0.8 864 555 03 T 4655 0.0 0.0 126 17 ? IW 1215 0.0 0.2 368 148 ? I 2284 0.0 0.0 320 7 ? IW 8223 0.0 0.0 376 12 ? IW 29702 0.0 1.1 3763 724 01 T TIME 0:00 0:00 0:00 0:05 23:50 29:05 3:03 0:00 0:37 1:29 0:19 4:46 0:00 0:00 0:00 0:00 0:00 0:00 0:11 0:00 0:00 0:00 0:00 0:00 COMMAND ps -aux -csh (csh) telnetd rlogind /etc/inetd /etc/rwhod init telnetd - std.9600 tty32 (getty) /usr/local/cap/atis /etc/cron pagedaemon <exiting> telnet <exiting> - std.9600 tty23 (lattelnet) -ml0.iijnet.or.jp: anonymous/ -crl.dec.com: anonymous/put_y emacs - std.9600 tty04 (getty) rshd rshd -indy207.cs.york.ac.uk: anony latex exam_juin94.tex

tat d'un processus sur une squence de 5 lettres RWNAV:


- La premire lettre done des indications sur le processus en cours d'excution : "R" pour "running", "T" pour "stopped", "P" pour en attente de page, "D" pour attente d'E/S disque, "S" pour "sleeping" (moins de 20 secondes), (endormi plus de 20 secondes). - La seconde lettre indique si le processus est mis sur disque (swapped out) : "W" pour swapp, "Z" pour tu(zombie, pas encore dtruit), "<espace>" le processus en mmoire, ">" le processus est rsident en mmoire et a dpass son quota mmoire centrale. - La troisime lettre indique si le processus s'excute avec une priorit modifie la commande nice : "N" sa priorit a t rduite, "<" sa priorit a t augmente, "<espace>" cas normal. "I" pour "idle"

- La quatrime lettre indique si le processus est sujet un traitement spcial mmoire virtuelle, le plus courrant :"<espace>" reprsente le cas normal VA_NORM. - La cinquime dpend des capacits matrielle du processeur et de la faon dont processus les utilise.

28 Novembre 1994

29

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Primitive fork int fork() cre un nouveau processus qui est un clone du pre au moment de la cration, le fils hrite de l'environnement du pre : mme vue du
code, mme vue des donnes, mmes fichiers ouverts, mme environnement (variables PATH, TERM, ...) p_pid : 1255 pile p_pid : 1256

donnes

fork()

code Image du processus crateur (pre) Image du processus cr (fils)

En ralit le code n'est pas dupliqu et les donnes le sont le plus tard possible, technique du copy-on-write ... parfois on fait un fork pour changer
son image excutable immdiatement aprs, dans ce cas, on utilise un vfork().
28 Novembre 1994 30

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

main () { id = fork(); if ( id == 0) { printf("fils : %d\n", getpid()); /*processus fils*/ exit(0); } else { printf("pre : %d\n", getpid()); /*processus pre*/ printf("fils : %d\n", id); exit(0); } }

28 Novembre 1994

31

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Primitives exec L'utilisation d'une primitive de type exec permet de changer l'image d'un processus en mmoire. On peut ainsi lancer un nouveau programme. Aprs un exec, le contrle de l'excution est donn au programme lanc.
execl(chemin,arg,...,0)

execlp(fich,arg,...,0)

execle(chemin,arg,...,0,envp)

former argv

former argv

former argv

execvp(fich,argv)

execve(chemin,argv,envp) ajouter un pointeur sur l'environnemnt

convertir fich en chemin d'accs

execv(chemin,argv)

Le programme hrite d'un certain nombre de paramtres du processus qui l'hberge : n de


processus, n de processus pre, l'uid utilisateur rel... le numro de processus effectif peut changer si le programme lanc a un bit suid.

28 Novembre 1994

32

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Primitive exit Quand il se termine exit(status). un processus fait

Cet appel systme a pour effet de passer une information d'tat, "status",au systme. Cet tat de sortie est rcuprable par le processus pre l'aide de l'appel wait. exit() provoque un vidage des E/S en cours non effectues (action flush) avant de terminer le processus, c'est un appel standard de la librairie C. _exit() effectue la terminaison directement, c'est un appel systme.

28 Novembre 1994

33

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Primitive wait int wait (int *status); Un processus peut rcuprer des informations sur un fils qui vient de se terminer grace wait. Il rcupre la variable "status" de terminaison, et/ou d'autres donnes sur le mode de terminaison du processus. autres variantes de wait : . wait3 qui n'existe que pour Unix 4.3 BSD, ne bloque pas le processus qui effectue wait3 alors que wait bloque "ternellement" le processus demandeur. . waitpid qui n'existe que pour Unix 4.3 BSD, permet d'attendre la fin d'un processus fils particulier

28 Novembre 1994

34

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Terminaison d'un processus

allproc

processus actif

exit processus zombie

zombproc

processus zombie

notification au pre wait processus vide

freeproc

processus vide

processus vide

descripteur de processus libr

Si le pre est termin avant le fils, l'id du processus pre n'a plus de sens ... Unix trouve tous les processus orphelins, leur pre devient "init" qui ne se termine jamais. Un processus ne sait jamais quand son pre a pu se terminer ... seulement sa propre terminaison.

28 Novembre 1994

35

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Lancement d'un shell utilisateur

init fork init exec getty getty 3. exec login 4. exec /bin/csh init 2. exec

pid #1 fork init exec getty

1. fork

28 Novembre 1994

36

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Lancement d'une commande Rsultat du point de vue processus de la commande ls :


1. fork /bin/csh 3. exit ls

/bin/csh 2. exec

28 Novembre 1994

37

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Groupe de processus

login exec /bin/csh fork /bin/csh fork /bin/csh exec ls groupe de processus

exec xterm

leader du groupe de processus

Le leader du groupe de processus a son pid gal son pgid. Un processus fils cre un nouveau groupe en se retirant du groupe auquel il appartient par la primitive setpgrp().

28 Novembre 1994

38

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

En Bourne shell, quand vous lancez une commande, un fils est cr, il appartient au mme groupe de processus que son pre. Ds que vous quittez votre session on a propos du processus qui se termine :
id de processus = id de groupe de processus = id de terminal attach au groupe8

Le signal SIGHUP est envoy tous les processus qui ont le mme id de groupe de processus. Tous les processus fils, petits fils, ... dans le groupe sont tus automatiquement. En Cshell, chaque commande lance en tache de fond (avec & au bout) cre son propre groupe, et devient donc son propre "group leader". Par consquent, la fin de la session utilisateur ne peut tuer les commandes lances en tches de fond.

Pour certains shells, l'identificateur de terminal attach un groupe de processus est intialis avec l'identificateur de groupe de processus du processus shell activ ds la fin de la phase de login. En gnral, cette situation n'est vraie que pour les processus actifs en session (foreground), pas pour les autres, ceux lancs en arrire plan (background).
8

28 Novembre 1994

39

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

3. Gestion Mmoire

28 Novembre 1994

40

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

relation mmoire centrale et disque de pagination

Mmoire Virtuelle

Table des Pages


bit v

Disque de Pagination

...
0
1

Memoire Physique CPU RAM

-> mcanisme de va et vient, superposition de lespace swap avec lespace de pagination

...

Remplacement par Algo. de l'horloge deux passes

28 Novembre 1994

41

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

commande vmstat
Statistiques sur la mmoire virtuelle, les processus, les disques, l'activit du processeur... option -f pour avoir le nombre de fork et de vfork, option -v pour avoir des infos plus dtailles sur la mmoire, -S pour avoir des infos sur les pages soumises au va et vient (swap) Sans options, la commande vmstat donne un rsum :
procs r b w 0 0 0 faults in sy cs 98 571 75 cpu us sy id 16 12 72 memory avm fre 21k 41k re at 2 4 page pi po fr 4 1 1 de 0 disk sr s0 s1 0 0 0

procs: information sur les processus dans diffrents tats. r (run queue) processus prts b bloqus en attente de ressources (E/S, demandes de pages) w prts ou endormis (< 20 seconds)mais swapps faults: taux d'interruptions/d'appels systme (trap) par seconde, la moyenne est calcule sur les 5 dernires secondes. in interruption due un contrleur (sauf horloge) par seconde sy appels systemes par seconde cs taux de changement de contexte processuer ( nb chgt par seconde) cpu: rpartition de l'utilisation du processeur en pourcentage us temps utilisateur pour les processus de priorit normale et basse sy proportion utilise par le systme id cpu inutilis - libre La somme des 3 fait 100% !?!

28 Novembre 1994

42

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

memory: informations sur l'utilisation de la mmoire virtuelle et de la mmoire relle, les pages virtuelles sont considres actives si elles appartiennent des processus qui sont excutables ou qui se sont excuts depuis moins de 20 secondes. Les pages sont indiques en unit de 1 Ko, le suffixe k prcise qu'il faut multipli le chiffre affich par 1000, et le suffixe m par 106. avm pages virtuelles actives fre taille de la liste des pages libres page: information les dfauts de page et l'activit de pagination. La moyenne est calcule toutes les 5 secondes. L'unit est toujours 1Ko et est indpendante de la taille reel des pages de la machine. re page "reclaims", pages rfrences at pages "attached" ??? pi pages "paged in" po pages "paged out" fr pages "freed", libres par seconde de anticipation du manque de mmoire sr pages examines par l'algorithme horloge deux phases disk: s0, s1 ...sn: activit de pagination ou de va et vient en secteurs transfrs par seconde, ce champ dpend de la configuration du systme. Habituellement l'espace swap est rparti sur plusieurs disques, on trouve la liste des priphriques qui supportent cette fonction et qui est configure dans le systme.

28 Novembre 1994

43

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

4. Fichiers et Tubes

28 Novembre 1994

44

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

gestion des terminal

E/S

disque,

rseau,

table des fichiers ouverts d'un processus


stdin stdout stderr

table des fichiers


infos fichier

table des v-nodes (en mmoire)

n de descripteur

v-node/i-node infos fichier

v-node/i-node

notion dobjet dcrit par un descripteur et un ensemble doprations plutt que par extension de lespace dadressage (Multics)

28 Novembre 1994

45

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Structure d'un i-node


Vue utilisateur : Fichier non structur

Vue Systme :
Descripteur de fichiers (i-node)
bloc de donnes bloc index 1 niveau d'indirection

droits, propritaire, ...

bloc index 2 niveaux d'indirection bloc index 3 niveaux d'indirection

...

10 blocs de donnes en accs direct index index index

... ... ... ... ... ... ... ... ...

...

... ... ... ... ...

28 Novembre 1994

46

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Partage de fichier
processus 1
0 1 2 ...

table des fichiers

position courante

descripteur de fichier v-node intermdiaire (rseau-NFS et tous types)

processus 2
0 1 2 ...

position courante

i-node (fichier local)

28 Novembre 1994

47

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Communication par fichier Les programmes peuvent communiquer par fichier :


fichier 1 2

4 prog1 (client)

3 prog2 (serveur) fichier

Il peut tre ncessaire de procder un verrouillage de la ressource fichier : flock(), lockf(), fcntl() ATTENTION, ces mcanismes ne fonctionnent pas ncessairement travers NFS !!!

28 Novembre 1994

48

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Verrouillage de fichier (1)


verrouillage de tout le fichier (Unix souche BSD) : flock() Le type de verrouillage doit tre prcis : LOCK_SH verrouillage en mode partag (opration bloquante) LOCK_EX verrouillage en mode exclusif (opration bloquante) LOCK_UN dverrouillage LOCK_NB demande d'opration non bloquante Une opration est dite bloquante si le demandeur est bloqu jusqu' ce que l'appel systme correspondant soit termin ... ce qui peut arriv ... l'appellant restant dans ce cas indfiniment en attente... d'o l'utilisation par exemple de la combinaison LOCK_SH|LOCK_NB. Un fichier peut tre verrouill "LOCK_SH" par plusieurs processus en mme temps, mais ne peut tre verrouil "LOCK_EX" que par un seul la fois.

28 Novembre 1994

49

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Verrouillage de fichier(2)
verrouiller une partie du fichier (Unix souche system V) : lockf() dans ce cas, il faut utiliser lseek() pour se positionner au dbut de la zone du fichier cible, puis spcifier dans l'appel de lockf() la longueur de la zone verrouiller. Le verrouillage peut s'effectuer de diffrentes faons, qu'il faut spcifier : F_TEST F_LOCK F_TLOCK F_ULOCK test si une zone est dj verrouille vrrouiller une zone (opration bloquante) test si la zone est verrouille, verrouille sinon dverrouille une zone dj verrouille

28 Novembre 1994

50

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Primitive mmap() (1) mmap() Permet un processus de projeter le contenu d'un fichier dj ouvert dans son espace d'adressage. La zone mappe s'appelle une rgion. Au lieu de faire des lectures et des critures sur le fichier, le processus y accde comme si les variables qu'il contient taient en mmoire. Plusieurs processus peuvent "mapper" le contenu d'un mme fichier et ainsi le partager de faon efficace. Un fichier peut tre soit un fichier sur disque, soit un priphrique. mmap() s'utilise pour un fichier dj cr, il est impossible d'tendre un fichier "mapp" suivant les implantations, il semble qu'un munmap() soit ncessaire pour "dmapper" une rgion avant de fermer le fichier par close(). pas de client/serveur !:-)
28 Novembre 1994 51

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Primitive mmap() (2)


#include <sys/types.h> #include <sys/mman.h> caddr_t mmap(addr,len,prot,flags,fd,off) caddr_t addr; size_t len; int prot, flags, fd; off_t off;
C'est une mise en correspondance partir de l'adresse "pa" de l'espace d'adressage d'un processus, d'une zone de "len" octets prise l'intrieur d'un objet de descripteur "fd" partir de "off". La valeur de "pa" dpend du paramtre "addr", de la machine, et de la valeur de "flags". Si l'appel systme russit, mmap() retourne la valeur pa en rsultat. Il y a correspondance entre les rgions [pa, pa+len] de l'espace d'adressage du processus et [off, off+len] de l'objet. Une mise en correspondance remplace toute mise en correspondance prcdente sur la zone [pa, pa+len] . prot dtermine le mode d'accs de la rgion : "read", "write", "execute", "none" (aucun accs) ou une combinaison de ces modes flags donne des informations sur la gestion des pages mappes : MAP_SHARED page partage, les modifications seront visibles par les autres processus quand ils accderont au fichier MAP_PRIVATE les modifications ne seront pas visibles MAP_FIXED l'adresse addr donne par l'utilisateur est prise exactement, habituellement le systme effectue un arrondi sur une frontire de page

28 Novembre 1994

52

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Exemple mmap()
int fd, *p, lg; fd = open("fichier",2); p = mmap((caddr_t) 0,lg, PROT_READ|PROT_WRITE, MAP_SHARED,fd,0); *p = *p +1; close(fd);

28 Novembre 1994

53

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Tube ou "pipe" - "|" du niveau shell -(1) pipe() Un tube est un canal unidirectionnel qui fonctionne en mode flot d'octets. Mcanisme d'change bien adapt l'envoi de caractres. La suite d'octets poste dans un tube n'est pas obligatoirement retire en une seule fois par l'entit l'autre bout du tube. Lors de la lecture, il peut n'y avoir qu'une partie des octets retirs, le reste est laiss pour une lecture ultrieure. Ceci amne les utilisateurs dlimiter les messages envoys en les entrecoupant de "\n". Sous certaines conditions, une criture ou une lecture peut provoquer la terminaison du processus qui effectue l'appel systme. Les critures dans un tube sont atomiques normalement. Deux processus qui crivent en mme temps ne peuvent mlanger leurs donnes. Mais si on crit plus d'un certain volume max (4096 octets souvent), l'criture dans le tube n'est pas atomique, dans ce cas les donnes crites par deux processus concurrents peuvent s'entrelacer.
28 Novembre 1994 54

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Tube ou "pipe" - "|" du niveau shell -(2)

L'utilisation d'un tube se fait entre processus de mme "famille"/"descendance". On peut dire que le tube est priv. L'usage courant est :
int pipefd[2]; pipe(pipefd); write (pipefd[1], ...); read (pipefd[0], ...); ... se souvenir de stdin (0), on lit ce qui vient du clavier, et, stdout(1), on crit sur l'cran.

Un tube existe tant qu'un processus le rfrence. Quand le dernier processus rfrenant un tube est termin, le tube est dtruit.

28 Novembre 1994

55

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Etapes d'un change client/serveur avec tube 1. cration du tube :


read fd[0] write fd[1] tube
flot d'octets espace systme

2. fork() du pre :
pre fork() fils

tube
flot d'octets

espace systme

3. fermeture des extrmits non utilises


pre fils

tube
flot d'octets

espace systme

situation quivalente celle de "ls -l|more"


28 Novembre 1994 56

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Schma Client/Serveur avec tubes Etapes : 1. cration de tube1 et de tube2 2. fork() 3. le pre ferme l'entre 0 (in) de tube1 et l'entre 1 (out) de tube2 4. le fils ferme l'entre 1 (out) de tube1 et l'entre 0 (in) de tube2
pre read 2 write 1 tube1
espace systme

fils write 2 read 1

tube2

28 Novembre 1994

57

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Tubes Nomms ou FIFOs Les tubes sont privs et connus de leur seule descendance par le mcanisme d'hritage. Les tubes nomms sont publics au contraire. Le tube nomm est cr par :
mknod("chemindaccs", mode d'accs)

ou par
/etc/mknod chemindaccs p

C'est presque l'quivalent d'un fichier pour le systme. Le tube est connu par son chemin d'accs et accessible comme un fichier par open(), read(), write(), close(). Les tubes nomms fonctionnent comme les tubes.

28 Novembre 1994

58

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Client/Serveur avec des tubes nomms


Serveur
rponses tube de rponse client1: /tmp/client1.fifo confirmations indications rponses tube de rponse client2: /tmp/client1.fifo confirmations

requtes

Client1

Client2

tube connu de requtes : /usr/tubes/serveur.fifo

Ne pas oublier de dtruire les tubes nomms aprs utilisation !!!

28 Novembre 1994

59

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Mcanismes de communication interprocessus


IPC distants : - sockets (Unix BSD) ou streams (Unix System V)

IPC locaux : - fichiers avec mcanisme de verrouillage (lock) - tubes (pipe), tubes nomms, - interruptions logicielles (signaux) - sockets, - smaphores, - files de messages, - mmoire partage,

28 Novembre 1994

60

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

5. IPC System V

28 Novembre 1994

61

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Identification des objets IPC system V Les objets IPC system V : Files de messages Smaphores, Segments de mmoire partage Ils sont dsigns par des identificateurs uniques. La premire tape consiste donc a crer un identificateur. 1. On peut fabriquer un identificateur grace la fonction suivante :
#include <sys/types.h> #include <sys/ipc.h> key_t ftok(char *chemindaccs, char proj)

L'identificateur rendu en rsultat est garanti unique. "chemindaccs" correspond un fichier, attention ce qu'il ne soit pas dtruit de faon inopportune... sinon, la fonction ftok() ne pourrait retourner l'identificateur qui sert tous les processus pour reprer l'objet IPC. 2. On se le fixe soi mme
28 Novembre 1994 62

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Cration d'objets IPC System V Il est attach un objet IPC un certain nombre d'informations : l'id utilisateur du propritaire, l'id du
groupe du propritaire, l'id utilisateur du crateur, l'id du groupe du crateur, le mode d'accs, son identificateur.

ftok()

id unique
clef

msgget() objet semget() shmget() entier

Mode de cration :
IPC_PRIVATE cration de l'objet demand et association de celui-ci l'identificateur fourni cration si l'objet n'existe pas dj, sinon aucune erreur cration si l'objet n'existe pas dj, sinon erreur erreur si l'objet n'existe pas

IPC_CREAT

IPC_CREAT|IPC_EXCL

aucun mode prcis

Pas comparable un fichier dans son mode de gestion et d'hritage. L'identificateur d'objet se passe
28 Novembre 1994 63

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Files de messages L'objet "Message Queue" fonctionne suivant le modle d'une file donc en FIFO, la politique FIFO peut tre applique l'ensemble des messages dans la file ou par seulement en fonction du type de message. cration : msgget()
Lors de la cration, on spcifie les droits d'accs : read/write pour propritaire/groupe/autres en combinant avec IPC_XXX.

envoie de message : msgsnd() rception de message : msgrcv()


Les messages peuvent tre retirs en fonction de leur type.

oprations de contrle : msgctl()


Permet en particulier de dtruire une file de messages, sinon il faut utiliser la commande ipcrm. La commande ipcrm est applicable tout objet IPC system V.

28 Novembre 1994

64

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Objet File de Messages

id file de messages
premier dernier

type longueur donnes

NULL type longueur donnes

desc. file de msg

28 Novembre 1994

65

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Smaphores Les objets smaphores permettent de grer un groupe de smaphores par objet. cration : semget() manipulation du smaphore : semop() gestion du smaphore : semctl() Objet smaphore :
id smaphore semval [0](compteur) [0] [0] [0] semval [1] [1] [1] [1]

sem_nsems desc. objet semaphores

(2 ici)

Quand plusieurs processus attendent le relachement d'une ressource, on a aucun moyen de dterminer l'avance celui qui l'obtiendra. En particulier, pas d'ordre FIFO d'attente.
28 Novembre 1994 66

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Segments de Mmoire partage Communication par variable partage travers l'espace d'adressage des processus. cration : shmget()
Le segment de mmoire partage est cr mais non accessible. L encore, il faut spcifier le mode d'accs.

attachement l'espace processus : shmat()

d'adressage

d'un

Le segment est inclu dans l'espace d'adressage du processus demandeur l'adresse indique suivant le cas par *shsmaddr.

dtachement du segment de mmoire partage de l'espace d'adressage d'un processus : shmdt() oprations de gestion du segment de mmoire partage : shmctl()

28 Novembre 1994

67

TP Informatique Programmation B

Eric Gressier

CNAM - CEDRIC

Utilisation de segments de mmoire partage En gnral on fait du client/serveur travers un segment de mmoire partage avec une signalisation par smaphore.
processus client espace d'adressage du processus processus serveur

segment de mmoire partage

segment attach dans l'espace d'adressage du processus

28 Novembre 1994

68

Vous aimerez peut-être aussi