Академический Документы
Профессиональный Документы
Культура Документы
paumier@univ-mlv.fr
Objectifs du cours
paumier@univ-mlv.fr
Ressources
http://igm.univ-mlv.fr/~dr
http://igm.univ-mlv.fr/~paumier/systeme/
paumier@univ-mlv.fr
Qu'est-ce qu'un OS ?
paumier@univ-mlv.fr
Missions
paumier@univ-mlv.fr
Missions
tre robuste
viter de planter !
paumier@univ-mlv.fr
mono vs multi-utilisateurs
mono vs multi-tches
mono vs multi-processeurs
temps rel: garantit un dlai maximal
d'excution quelles que soient les
conditions
paumier@univ-mlv.fr
Le multi-utilisateurs
protge le systme:
paumier@univ-mlv.fr
Le multi-tches
paumier@univ-mlv.fr
Le noyau
paumier@univ-mlv.fr
10
Types de noyau
Linux, FreeBSD
Minix, Mac OS X
paumier@univ-mlv.fr
11
paumier@univ-mlv.fr
12
Un peu d'histoire
paumier@univ-mlv.fr
13
Architecture
paumier@univ-mlv.fr
14
Un modle en couches
paumier@univ-mlv.fr
15
Un modle en couches
paumier@univ-mlv.fr
16
Un modle en couches
paumier@univ-mlv.fr
17
commutation de contexte
4 niveaux de privilges
paumier@univ-mlv.fr
boot/boot.s
18
Protection de la mmoire
paumier@univ-mlv.fr
19
Commutation de contexte
changement de contexte:
paumier@univ-mlv.fr
20
Bascule noyau/utilisateur
paumier@univ-mlv.fr
21
Bascule noyau/utilisateur
$>mangcc|time./io_buf>err
0.01user0.00system0:00.57elapsed2%CPU(0avgtext+0avgdata0maxresident)k
0inputs+1280outputs(0major+234minor)pagefaults0swaps
paumier@univ-mlv.fr
22
Bascule noyau/utilisateur
$>mangcc|time./io_buf>err
0.01user0.00system0:00.57elapsed2%CPU(0avgtext+0avgdata0maxresident)k
0inputs+1280outputs(0major+234minor)pagefaults0swaps
$>mangcc|time./io_unbuf>err
0.34user1.62system0:02.09elapsed93%CPU(0avgtext+0avgdata0maxresident)k
0inputs+1280outputs(0major+228minor)pagefaults0swaps
paumier@univ-mlv.fr
23
Mode noyau/utilisateur
paumier@univ-mlv.fr
24
Problme de maintenance
paumier@univ-mlv.fr
25
Problme de maintenance
paumier@univ-mlv.fr
26
ssize_tread(intfd,void*buf,size_tn);
ssize_twrite(intfd,constvoid*buf,size_tn);
paumier@univ-mlv.fr
27
paumier@univ-mlv.fr
28
Bug
paumier@univ-mlv.fr
29
NOTES
Depuis la glibc version 2.3.4, la fonction enveloppe de la glibc pour
getpid() faisait un cache des PID, de faon viter des appels systme
supplmentaires quand un processus appelle getpid() de faon rpte.
Normalement, ce cache n'est pas visible, mais son fonctionnement cor
rect repose sur la gestion du cache dans les fonctions enveloppes pour
fork(2), vfork(2) et clone(2) : si une application se passe des
enveloppes de la glibc pour ces appels systme en appelant syscall(2),
alors un appel getpid() dans le fils renverra la mauvaise valeur
(pour tre prcis : il renverra le PID du processus pre). Consultez
galement clone(2) pour une discussion sur un cas ou getpid() peut ren
voyer une mauvaise valeur quand clone(2) est appel via la fonction
enveloppe de la glibc.
paumier@univ-mlv.fr
30