Académique Documents
Professionnel Documents
Culture Documents
Au Système Unix: Cnam-Cedric
Au Système Unix: Cnam-Cedric
Eric Gressier
CNAM - CEDRIC
INTRODUCTION
au
systme
Unix
Eric Gressier
CNAM-CEDRIC
28 Novembre 1994
TP Informatique Programmation B
Eric Gressier
PLAN
1. Introduction
2. Processus
3. Gestion Mmoire
4. Fichiers et Tubes
5. IPC System V
28 Novembre 1994
CNAM - CEDRIC
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
REFERENCES BIBLIOGRAPHIQUES
28 Novembre 1994
TP Informatique Programmation B
Eric Gressier
1. INTRODUCTION
28 Novembre 1994
CNAM - CEDRIC
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
2. Processus
28 Novembre 1994
CNAM - CEDRIC
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
Processus
Processus = instance
excutable en mmoire
d'un
programme
Programme source :
main (argc, argv)
int argc;
int *argv[];
{
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
exit()
programme sur
disque
excution :
translation
expansion
chargement
excution en
mmoire centrale
espace de
pagination
28 Novembre 1994
et
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
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
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
Pile
d'excution
Heap (tas)
Adresse haute
donnes
dynamique
zone malloc()
donnes
utilisateur
donnes
non-initialises
donnes
initialises
donnes
statiques
code utilisateur
Adresse basse
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
11
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
proc strucuture
(proc.h)
pile noyau
contexte utilisateur
pile utilisateur
vu
auparavant
donnes utilisateur
code utilisateur
12
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
code systme
mode d'excution systme, mode privilgi, espace systme
mode d'excution utilisateur, espace mmoire utilisateur
processus
...
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
appel
systme
espace utilisateur
programme
. premption possible
. excution sur pile
utilisateur
- processus -
28 Novembre 1994
14
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
Rserv
0xC0000000
0x80000000
Espace
Noyau
pile mode noyau
user struct
pile
0x40000000
0x00000000
28 Novembre 1994
tas
donnes
excutable
Dcoupage
de
l'Espace
d'adresse
Rgion P1
Virtuelle
Vax
System
Rgion P0
15
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
/dev/mem
28 Novembre 1994
16
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
28 Novembre 1994
17
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
desc. d'image
executable
Pile en
mode
noyau
p_textp
Rsident
en
mmoire
centrale
28 Novembre 1994
cessus
proc struct
p_p0br
u_procp
red zone
table
des pages
....
p_addr
desc.
processus
....
....
x_caddr
desc.
utilisateur
user struct (u.)
Contexte
matriel
Process Control
Bloc
-Vax
Paginable
"Swappable"
18
TP Informatique Programmation B
descripteur de
structure proc.h -
Eric Gressier
processus
CNAM - CEDRIC
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
28 Novembre 1994
19
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
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
pour _proc :
au pralable :
struct proc
long int
*bproc
nproc
lseek(kmem,nlst[1].nvalue,0);
read(kmem,&nproc,sizeof(longint3));
Un mot sur un vax fait 32 bits et est dcrit par un long int
28 Novembre 1994
21
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
processus
p_usrpri
p_link
processus
processus
p_rlink
...
Priorit
Mode
"User"
124
qs[32]
28 Novembre 1994
22
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
exit
lu
zombie
fini
sleep
ligible
prt
assez de
mmoire
Processus
en
bloqu Mmoire
endormi :
"wait channel"
"wait event"
wakeup
fork
cr
swapout
pas assez de
mmoire
prt
S
swapout
swapin
Processus
bloqu "Swapp"
sur
S
disque
wakeup
28 Novembre 1994
23
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
28 Novembre 1994
24
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
28 Novembre 1994
25
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
28 Novembre 1994
26
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
- 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
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
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
"I"
pour
"idle"
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
p_pid : 1256
pile
donnes
fork()
code
Image du processus crateur
(pre)
Image du processus cr
(fils)
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)
former argv
execle(chemin,arg,...,0,envp)
former argv
execvp(fich,argv)
convertir fich
en chemin d'accs
former argv
execve(chemin,argv,envp)
ajouter
un pointeur sur
l'environnemnt
execv(chemin,argv)
28 Novembre 1994
32
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
Primitive exit
Quand il se termine
exit(status).
un
processus
fait
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
allproc
zombproc
freeproc
processus
actif
exit
processus
zombie
processus
zombie
processus
vide
processus
vide
notification au pre
wait
processus
vide
28 Novembre 1994
35
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
init
fork
pid #1
fork
1. fork
init
init
exec
getty
init
exec
2. exec
getty
getty
3. exec
login
4. exec
/bin/csh
28 Novembre 1994
36
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
/bin/csh
/bin/csh
2. exec
3. exit
ls
28 Novembre 1994
37
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
Groupe de processus
login
exec
/bin/csh
fork
exec
/bin/csh
fork
/bin/csh
leader du
groupe de processus
xterm
exec
ls
groupe de processus
28 Novembre 1994
38
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
28 Novembre 1994
39
TP Informatique Programmation B
Eric Gressier
3. Gestion Mmoire
28 Novembre 1994
40
CNAM - CEDRIC
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
Mmoire
Virtuelle
Disque de Pagination
...
0
1
...
Remplacement par
Algo. de l'horloge
deux passes
Memoire
Physique
CPU
RAM
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
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
4. Fichiers et Tubes
28 Novembre 1994
44
CNAM - CEDRIC
TP Informatique Programmation B
gestion des
terminal
n de
descripteur
stdin
stdout
stderr
Eric Gressier
E/S
disque,
table des
fichiers
infos
fichier
CNAM - CEDRIC
rseau,
table des
v-nodes
(en mmoire)
v-node/i-node
infos
fichier
v-node/i-node
28 Novembre 1994
45
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
Vue Systme :
Descripteur de fichiers
(i-node)
bloc de donnes
bloc index 1 niveau d'indirection
droits,
propritaire,
...
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
position
courante
descripteur de fichier
v-node
intermdiaire
(rseau-NFS
et tous types)
processus 2
0
1
...2
28 Novembre 1994
position
courante
i-node
(fichier local)
47
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
4
prog1
(client)
prog2
(serveur)
fichier
28 Novembre 1994
48
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
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
28 Novembre 1994
50
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
51
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
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
54
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
28 Novembre 1994
55
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
tube
flot d'octets
2. fork() du pre :
pre
fork()
fils
espace
systme
tube
flot d'octets
fils
espace
systme
tube
flot d'octets
56
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
fils
write 2
read 1
read 2
write 1
tube1
espace
systme
tube2
28 Novembre 1994
57
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
ou par
/etc/mknod chemindaccs p
28 Novembre 1994
58
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
rponses
indications
tube de rponse
client2:
/tmp/client1.fifo
confirmations
requtes
Client1
Client2
28 Novembre 1994
59
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
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
5. IPC System V
28 Novembre 1994
61
CNAM - CEDRIC
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
62
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
ftok()
id unique
clef
msgget() objet
semget()
shmget() entier
Mode de cration :
cration de l'objet demand et
association de celui-ci
l'identificateur fourni
IPC_PRIVATE
IPC_CREAT
IPC_CREAT|IPC_EXCL
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.
28 Novembre 1994
64
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
id
file de
messages
type
longueur
NULL
type
longueur
donnes
donnes
premier
dernier
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]
sem_nsems
(2 ici)
[0]
[0]
semval [1]
[1]
desc.
objet
semaphores
[1]
[1]
66
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
attachement l'espace
processus : shmat()
d'adressage
d'un
28 Novembre 1994
67
TP Informatique Programmation B
Eric Gressier
CNAM - CEDRIC
processus client
espace
d'adressage
du
processus
segment
attach dans
l'espace
d'adressage du
processus
28 Novembre 1994
68