Cours OS
Cours OS
Cours OS
Cest est un ensemble de programmes responsables de linterfaage entre les ressources matrielles et les applications logicielles.
Il fournit aux programmes applicatifs des points d'entre gnriques pour les priphriques
Rles du SE
Le matre dorchestre: essentiel pour utiliser les ressources de la machine
gestion de la mmoire centrale gestion des processeurs: temps de calcul entre plusieurs programmes qui sexcutent simultanment gestion des priphriques: E/S gestion des fichiers: sur les mmoires de masses gestion des ressources: attribution des ressources ncessaires excution du programme sans empitement gestion des utilisateurs: pas dinterfrence entre eux
3
Composition
Un systme d'exploitation est typiquement compos de : un noyau bibliothques dynamiques (libraries) un ensemble d'outils systme (utilitaires shell) programmes applicatifs de base
applications (jeux, outils bureautiques, ) Interprteur de commandes, compilateur, noyau Langage machine Dispositifs physiques
4
Composition
Composition
Noyau (kernel)
Le noyau assure les fonctionnalits suivantes :
gestion des priphriques (au moyen de pilotes) gestion des files d'excution (aussi nomme processus) :
attribution de la mmoire chaque processus ordonnancement des processus (rpartition du temps d'excution sur le ou les processeurs) synchronisation et communication entre processus
gestion des fichiers (au moyen de systmes de fichiers) gestion des protocoles rseau (TCP/IP, IPX, etc.)
Noyau
Au lancement:
Boot: le programme qui initialise lordinateur Permet aux premiers services daccder aux applications systme : gestion de la mmoire, accs aux disques durs et accs aux priphriques
Le systme de fichiers
Un systme de fichiers est une structure de donnes permettant de stocker les informations et de les organiser dans des fichiers sur des mmoires secondaires (disque dur, disquette, CD-ROM, cl USB, etc.)
Une telle gestion des fichiers permet de traiter, de conserver des quantits importantes de donnes ainsi que de les partager entre plusieurs programmes informatiques
Il offre l'utilisateur une vue abstraite sur ses donnes et permet de les localiser partir d'un chemin d'accs
10
Interface homme-machine
Via ligne de commande
shell, MSDos
Interface graphique
Xterm, Linux, Windows, Macintosh GUI (Graphical User Interface)
11
Shell
Shell (coquille par opposition au noyau) = L'interprteur de commandes permettant la communication avec le SE par l'intermdiaire d'un langage de commandes Permet l'utilisateur de piloter les priphriques en ignorant tout des caractristiques du matriel qu'il utilise, de la gestion des adresses physiques, etc. Exemple sur Unix/Linux: csh, tcsh,
ls : lister les rpertoires et les fichiers du rpertoire courant mv x y : changer le nom du fichier/rpertoire x en y
12
Des applications et services souvent installs ensembles avec le SE Exp. calculatrice, diteur de texte, navigateur web, etc.
13
Multi-utilisateurs et multi-tches
Multi-utilisateurs
plusieurs utilisateurs utilisent le mme ordinateur en mme temps
Multi-tches
un utilisateur lance plusieurs applications
14
volution des SE
1980s
1990s et 2000s
Comparaison des SE
Systme DOS Windows 3.1 Windows 95 Codage 16 16/32 32 Mono-/multiutilisateur mono mono mono Mono-/multitche mono non premptif coopratif
32 32/64
32/64 32
multi multi
multi multi
premptif premptif
premptif premptif
16
Unix / Linux
SE
17
Utilisateurs Shell
Noyau
le shell envoie des appels au noyau en fonction des requtes de lutilisateur
le noyau UNIX est charg en mmoire lors du dmarrage de l'ordinateur; il alloue les ressources mmoire et processeur, gre le stockage des fichiers
systme UNIX
Matriel
18
19
Le SE Linux
Proprits
multi-tches multi-utilisateurs multi-postes Ouvert (et gratuit) !!
Logout:
NE PAS ETEINDRE une machine sauvagement commande logout dans la console
20
Initiation au shell
Une fois connect, le systme nous connat, ouvre une session notre nom et attend nos instructions via un programme spcial: Le Shell = interprteur de commandes
interface utilisateur de base (interlocuteur avec le syst.) interprtation ligne ligne plusieurs shells: sh, csh, tcsh, bash, ksh, zsh, ... langage de programmation
21
- commandes -
Initiation au shell
Format des commandes:
cde [-option(s)] [argument(s)]
22
- commandes Exemples:
date whoami
affiche le nom de lutilisateur connect
Initiation au shell
echo
affiche un message (echo "bonjour !")
ls
liste le contenu dun rpertoire
man <cde>
manuel en ligne
23
- mta caractres -
Initiation au shell
Caractres spciaux:
!
[]
&
<
>
>>
L'astrisque ou toile: *
interprt comme toute suite de caractres alphanumriques utiliser avec prcaution (commande rm par ex...)
Le point dinterrogation: ?
Initiation au shell
Sparateur de commandes
Lanti-slash: \
Inhibe la signification du mta-caractre qui suit
- mta caractres -
Initiation au shell
Exemples:
echo *
Tous les fichiers sauf ceux dont le nom commence par un point
echo *c
Tous 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
26
Le systme de fichiers
Stocke les donnes:
de faon hirarchique structure arborescente TOUT est fichier
3 types de fichiers:
fichiers ordinaires rpertoires fichiers spciaux (priph., )
27
- fichiers -
Le systme de fichiers
Accs aux fichiers rglement (sauf: tous les droits pour root) 3 types dutilisateurs: propritaire (user) personnes du mm groupe (group) les autres (others) 3 types de permissions lecture (r) criture (w) excution (x) afficher le contenu afficher le contenu modifier excuter
crer/supp fichiers
traverser
fichier
rpertoire
28
- fichiers -
Le systme de fichiers
Affichage des caractristiques: ls -l
groupe
tp1.tex
nom
type
group
-rw-r--r-user
others
29
- fichiers Changer les permissions: chmod chmod <classe op perm, >|nnn <fic>
classe:
u : user g : group o : others a : all
Le systme de fichiers
chaque perm = 1 valeur:
r w x rien 4 2 1 0
op:
= : affectation - : suppr. + : ajout
perm:
r : lecture w : criture x : excution
- fichiers -
Le systme de fichiers
Manipulation des fichiers
copier : dplacer/renommer : effacer : afficher le contenu : trier le contenu : cp fic1 fic2 mv fic1 fic2 rm fic cat fic sort fic
31
- larborescence -
Le systme de fichiers
rpertoire racine
le rpertoire de login: ~ le rpertoire courant: . le rpertoire suprieur: .. connatre le rp. courant: pwd lister le contenu: ls bin /
tmp
home
Administrator
- larborescence -
Le systme de fichiers
pwd retourne: /home/Administrator/cours se dplacer: cd [/home/Administrator/cours]$ cd .. [/home/Administrator]$ [/home/Administrator]$ cd /tmp [/tmp]$ /
tmp
home
chemin relatif chemin absolu crer un rpertoire: mkdir [/tmp]$ mkdir buzz supprimer un rpertoire: rmdir [/tmp]$ rmdir buzz
buzz
Administrator
.cshrc
cours
docs
- partitions -
Le systme de fichiers
le disque est dcoup en partitions
commandes & applications comptes utilisateurs swap fichiers temp priphriques (disques, ...) ...
accs transparent
34
- partitions -
Le systme 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 Dmontage: umount /mnt/floppy
- liens -
Le systme de fichiers
Liens physiques
ln <nom_fic> <nouveau_nom_fic> permet de donner plusieurs noms un fichier pas pour les rpertoires ne traverse pas les partitions un fic est dtruit quand TOUS ses liens physiques sont supprims ( raccourcis)
Liens symboliques
ln -s <nom_fic> <nouveau_nom_fic> cre un raccourci traverse les partitions fonctionne aussi pour les rpertoires
TP1
Les redirections Les tubes Les processus Les filtres
Crer sous tmp un dossier TP (mkdir) Copier dans TP le contenu de lib (cp)
37
Les redirections
Une commande ouvre 3 descripteurs de fichiers; par dfaut:
stdin
QuickTime e t un dco mpresseu r TIFF (non compress) sont requis pour visionner cette image.
commande
stdout
stderr
Redirections= remplacer les canaux par dfaut, rediriger vers une autre commande ou un fichier
38
Les redirections
< > >> 2> &>
ls
redirige lentre standard redirige la sortie standard concatne la sortie standard redirige la sortie derreur redirige la sortie standard et la sortie derreur
> liste cre/crase le fichier liste et y dirige la sortie de ls ajoute la fin du fichier liste la sortie de date envoie comme entre la commande wc le fichier liste
39
exemples:
date >> liste wc -l < liste
stderr
stderr
Les processus
Processus = objet dynamique qui reprsente un programme en cours dexcution et son contexte Caractristiques:
identification (pid) identification du proc. parent (ppid) propritaire priorit ...
Les processus
temps CPU utilis COMMAND -zsh emacs -zsh TIME 0:00.08 0:00.14 0:00.04
numro de processus
commande excute
R T P D S IW Z
Les processus
Options de ps:
-a -u -x liste tous les processus actifs format daffichage long inclut les processus sans terminal
Tuer un processus:
kill -9 <PID>
affiche le contenu des fichiers passs en paramtres (par dfaut, stdin) options -b, -n, -v affiche page par page les fichiers passs en paramtres (par dfaut, stdin) h pour avoir le dtail des commandes recopie lentre std sur la sortie standard et dans le fichier pass en paramtre option -a
Voir le man !!
ls | tee liste.fic
44
Les filtres
sort
trie lentre ligne par ligne options: -r (inverse lordre de tri) +n (ignore les n 1ers champs) ex:
ls | sort ls -l | sort +4
comm
slectionne les lignes entre deux fichiers syntaxe: comm [-123] fic1 fic2
3 = diffrence entre fic1 et fic2 2 = lignes de fic2 ( fic1) 1 = lignes communes
45
Les filtres
uniq
dtruit les lignes conscutives dupliques options: -u (affiche les lignes "uniques"), -d (affiche les lignes "dupliques") ex:
uniq -u fic uniq -d fic
diff
compare deux fichiers options: -b (ignorer les lignes vides) ex:
diff fic1 fic2
46
cut
Les filtres
tr
Les filtres
recopie stdin sur stdout en substituant des caractres syntaxe: tr [-cds] [s1 [s2]] options:
-c (complment de s1) -d efface les car. de s1 -s tte squence dans s1 est substitue par un car. unique dans s2
ex:
tr A-Z a-z < essai remplace 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 nest pas une lettre minuscule par un retour chariot (\012)
48
Les filtres
grep
recherche, dans le fichier pass en paramtre, les lignes vrifiant une expression rgulire donne syntaxe : grep expr_reg [fichier] ex:
grep 'toto' essai cherche dans essai toutes les lignes qui contiennent le mot toto grep '^[A-Z]' essai cherche dans essai toutes les lignes qui commencent par une majuscule
49
Les filtres
dautres filtres...
sed, awk, cmp, ...
Beaucoup de filtres et commandes... Savoir quelles existent Savoir ce quon peut en attendre Pour le reste, => man !!
50
Rpertoires/fichiers
But de la commande Se dplace vers le rpertoire rep Liste le contenu dun rpertoire (-R pour un listage rcursif) Copie un fichier (-R pour un rpertoire) Dplace un fichier Cre un rpertoire Efface un fichier (-rf pour effacer un rpertoire) Cre un lien destination qui va pointer sur une source (-s pour un lien symbolique) Met jour la date de modification du fichier, ou cre un fichier vide si le fichier nexiste pas. Syntaxe Equivalence MsDos
cd rep ls rep cp source destination mv source destination mkdir rep rm fichier ln source destination touch fichier ou repertoire
cd rep dir copy move mkdir rep del / deltree fichier non disponible
non disponible
51
less fichier
tail fichier
TP2
53
Lditeur de texte
54
Lditeur vi
vi est un diteur (en mode console) peu convivial certes, mais ultra puissant
55
L'diteur VIm
Appel de lditeur
vi fichier
Modes ddition
le mode insertion :
Les caractres taps sont considrs comme des commandes d'dition de texte (:)
56
Commandes vi
Commande :w :q :q! :wq Description
:f file2
Sauvegarde les changements Quitte le document en cours Quitte le document en cours sans sauvegarder les changements Enregistre et quitte l'editeur Enregistre sous un autre nom le document (quivalent de enregistrer sous)
v d dd y yy p esc
Permet de passer en mode visualisation pour faire une slection par exemple Equivalent de couper, aprs une slection par exemple Coupe la ligne entire Equivalent de copier, aprs une slection par exemple Copie la ligne entire Coller aprs le curseur Changement de mode
57
Mode Edition
Aprs l'utilisation de ces commandes, l'diteur passe en mode dition :
Commande Description a A i I o Ajoute aprs le curseur Ajoute aprs la ligne courante Insre avant le curseur Insre au dbut de la ligne courante avant le premier caractre non-blanc Ouvre une nouvelle ligne en-dessous de la ligne actuelle Ouvre une nouvelle ligne au-dessus de la ligne actuelle
58
Les processus
59
60
61
62
63
Commande top
La commande top affiche les mmes informations, mais de faon dynamique Elle indique en fait par ordre dcroissant le temps machine des processus, les plus gourmands en premier.
64
65
66
67
Cration
#include <stdio.h> #include <sys/times.h> int main( ) { fork() est une fonction qui permet de int pid ; dupliquer (crer) un processus. char *p = "le pere" ; La valeur de retour de la fonction est : pid = fork( ) ; "0", dans le processus fils; if (pid == 0) "pid du fils" dans le processus pre. "-1", si la primitive choue { p = "le fils"; printf(" je suis %s \n", p ); } else { printf(" je suis %s \n", p ); wait(NULL); } return 0; } 68
69
70
71
72
73
Cration
#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 pre*/ 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
Hritage
75
Hritage
Le fils hrite:
les propritaires rels et effectifs,(getuid, geteuid,getgid), le rpertoire de travail,(pwd) la valeur de nice, nice()
Sleep(n):
endort le processus jusqu' ce que n secondes soient coules, ou jusqu' ce qu'un signal non-ignor soit reu.
76
Exercice
77
Fonction nice()
Excuter un programme avec une priorit d'ordonnancement modifie. Plus nice() est leve, plus le processus est gentil vis vis des autres, leur laissant un accs plus frquent l'ordonnanceur. (par dfaut=10) Le Super-User peut indiquer un ajustement ngatif. La priorit peut tre ajuste avec nice dans l'intervalle -20 (le plus prioritaire) 19 (le moins prioritaire).
78
Struct tms
struct tms { clock_t tms_utime; /* user time */ clock_t tms_stime; /* system time */ clock_t tms_cutime; /* user time of children */ clock_t tms_cstime; /* system time of children */ }; tms_utime: temps CPU coul en excutant les instructions du processus appelant. tms_stime: le temps CPU pass dans les fonctions systme excutes pour le compte du processus appelant tms_cutime: somme des valeurs de tms_utime et tms_cutime pour tous les processus fils termins ayant t attendus. tms_cstime: somme des valeurs de tms_stime et tms_cstime pour tous les processus fils termins ayant t attendus.
79
#include <stdio.h> #include <sys/types.h> #include <sys/times.h> char buf[1024]; /* pour rcuprer le rpertoire de travail */ struct tms temps; /* pour rcuprer 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("caractristiques du fils \n "); printf("uid=%d euid= %d egid=%d\n ", getuid(),geteuid(),getegid()); printf(" rpertoire 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 systme : %d \n\n ", temps.tms_stime); } else{ sleep(5); /* pour partir aprs la terminaison du fils */ printf("caractristiques du pre \n "); printf("uid=%d euid= %d egid=%d\n ",getuid(),geteuid(),getegid()); printf(" rpertoire 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 systme : %d \n\n ", temps.tms_stime); } }
Hritage
80
81
La copie des donnes lors de la cration d'un processus ne se fait pas aprs sa cration, mais lors d'un accs la donne en criture
82
#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 pre*/ 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
84
tests
85
86
Zombie
Cest un terme dsignant 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 dfunt.
87
Zombie
La terminaison d'un processus: le systme libre les ressources que possde le processus mais ne dtruit pas son bloc de contrle. Le systme passe ensuite l'tat du processus la valeur ZOMBIE (un Z dans la colonne statut ). Un signal est envoy au pre afin de l'informer de ce changement. Ds que le processus pre a obtenu le code de fin du processus achev au moyen des appels systmes (wait ou waitpid), le fils est dfinitivement supprim de la table des processus.
88
Zombie
#include <stdio.h> #include <sys/times.h> int main() { if (fork()==0) { sleep(3); printf("fin du processus fils de numro %d \n ", getpid()); return 0; } sleep(30); return 0; }
89
PID=wait(status);
printf("processus pere %d\n", getpid()); printf("sortie du wait \n "); sleep(15); /* fils est bien termin pre toujours en place signal et infos reus */ printf("PID = %d status = %d\n", PID, status); return 0; }
ps
90
Cas d'un Zombie: le pre n'attend pas son fils et est toujours en vie aprs 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 pre boucle */ return 0; }
ps
91
Cas o le pre reoit le signal de terminaison de son fils et n'excute le wait qu'aprs
#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 pre %d\n", getpid()); sleep(15); /*lepreendormin'attendpas*/ printf("sortie du 1 er sleep \n "); PID=wait(status); printf("sortie du wait \n"); /* il n'y a plus de Zombie */ sleep(15); /* tout a t pris en compte et trait */ printf("PID = %d status = %d\n", PID, status); return 0; } top
92
Les pipes
93
Pipes
Les pipes permettent de faire communiquer des processus d'une mme machine : ce qu'un (ou plusieurs) processus crit peut tre lu par un autre.
On utilise un pipe (tuyau) pour faire communiquer un processus et un de ses descendants ou des descendants
94
Pipes
La nature d'un pipe est de type FIFO. Un pipe est unidirectionnel: un processus peut soit lire soit crire dans un pipe L'information disparat aprs lecture La taille du pipe est limite de 4k 20k dpendant du matriel. Le pipe est un objet du type fichier associ 2 descripteurs de fichier et 2 entres 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 plutt de pipe La communication n'a lieu qu'entre processus de la mme famille par hritage des descripteurs.
95
Pipes
Les pipes crs 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 accder ces pipes.
P1 P2 P4 P5 P3
96
Pipes
Cration: int p[2]; pipe(p);
p[0] Processus fils p[0] p[1]
L'appel systme pipe() retourne 2 descripteurs de fichier, p[0] ouvert pour la lecture et p[1] ouvert pour l'criture.
97
Pipes
Lecture
Effectue par un read() standard read(p[0],buf,5); lecture de 5 caractres du pipe dans un buffer.
Ecriture
Effectue par un write() standard
98
Code
#include <stdio.h> #include <sys/signal.h> main(){int fils1, fils2, n, m, p[2]; char buf[5]; pipe(p); /* cration de pipe */ if (fils1=fork()==0) /* cration du premier fils */ { printf("je suis le fils producteur \n"); printf("j'cris 5 caractres dans le pipe \n"); write(p[1],"ABCDE",5); printf("fin d'criture dans le pipe \n"); exit(3);} else /* le pre cre le fils consommateur */ { if (fils2=fork()==0) /* cration du deuxime fils */ { printf("je suis le fils consommateur \n"); read(p[0],buf,5); /* lecture du pipe */ printf("voici les caractres lus \n"); write(1,buf,5);/*affichage des caractres sur output standard*/ printf("\n"); exit(3);} else{ printf("processus pre c'est fini . \n"); wait(&n); wait(&m);} } } 99
Tests
Remplir le pipe jusqu dpasser sa taille. Fermer le pipe avant de quitter le programme et essayer de le rouvrir. Lire dun pipe vide. Lire deux fois les mme donnes du pipe.
100