Systèmes d'exploitation
-
Upload
sami-ait-ali -
Category
Documents
-
view
137 -
download
6
description
Transcript of Systèmes d'exploitation
Systèmes d’exploitation
1ère année du cycle d’ingénieurs
Ecole Nationale des Sciences Appliquées de Kenitra
A. EL Bourichi 1
Contenu du premier élément
• Chapitre 1: Introduction
• Chapitre 2: Le système d’exploitation Linux
• Chapitre 3: Gestion des processus
• Chapitre 4: Gestion de la mémoire
• Chapitre 5: Gestion de fichiers
• Chapitre 6: Gestion des entrées/sorties
• Chapitre 7: Interblocages
A. EL Bourichi 2
Chapitre 1
Introduction
A. EL Bourichi 3
Qu’est ce qu’un système d’exploitation?
Un ordinateur moderne est composé de:
• Un ou plusieurs processeurs
• Une mémoire principale
• Disques durs
• Imprimantes
• Périphériques divers d’entrée/sortie
Un système d’exploitation est un logiciel qui
permet de gérer tous ces composants
A. EL Bourichi 4
Système d’exploitation
• Le système d'exploitation (SE, en anglais Operating System ou OS) est un ensemble de programmes servant d’interface entre les ressources matérielles d'un ordinateur et les applications de l'utilisateur (traitement de texte, compilateurs, navigateurs web …)
5 A. EL Bourichi
Qu’est ce qu’un système d’exploitation?
Figure 1-1. Place du système d’exploitation
A. EL Bourichi 6
Le concept d’abstraction
Figure 1-2. Un système d’exploitation donne une belle image à
une réalité complexe et hideuse A. EL Bourichi 7
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: diviser le 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
– gestion des utilisateurs: pas d’interférence entre eux
8 A. EL Bourichi
Noyau (kernel)
Le noyau assure ces fonctionnalités : – 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 (services de synchronisation, d'échange de messages, mise en commun de segments de mémoire, etc.)
– gestion des fichiers (au moyen de systèmes de fichiers)
– gestion des protocoles réseau (TCP/IP, .. etc.)
9 A. EL Bourichi
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
– Partie réservée pour le système
– Partie réservée pour les applications
• Assure une indépendance entre les applications et le matériel
10 A. EL Bourichi
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
11 A. EL Bourichi
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, CD-ROM …) – E.g. une structure hiérarchique – C:\ensa\ginfo\bourichi\SE\polycopie.pdf
• 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 ces données et permet de les localiser à partir d'un chemin d'accès
12 A. EL Bourichi
Interface utilisateur
• Via ligne de commande
– shell, MSDos
• Interface graphique
– Xterm, Linux, Windows, Macintosh
– GUI (Graphical User Interface)
13 A. EL Bourichi
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.
• E.g. sur Unix/Linux: bash, 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 »
14 A. EL Bourichi
Chapitre 2 L’interface utilisateur du système
Linux
15 A. EL Bourichi
Historique
• 1969: Ken Thompson (Bell labs / MIT).
• 1973: écriture en C -> système portable
• 1974-1977: Distribution aux universités
• Apparitions des UNIX propriétaires
AIX (IBM), HP-UX
• 1991 : Linus Torvalds (étudiant finlandais de 21 ans) écrit LINUX (noyau d’UNIX pour PC) basé sur Minix (développé par Andrew Tanenbaum)
A. EL Bourichi
Linux
• Propriétés – multi-tâches
– multi-utilisateurs
– Libre 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: • commande “logout” dans la console
A. EL Bourichi
Répertoire de connexion
• A chaque utilisateur connu du système est associé un répertoire de connexion (home directory).
• Le répertoire de connexion contient aussi certains fichiers de configuration permettant à l'utilisateur de personnaliser son environnement de travail. Ces fichiers sont normalement invisibles (car leur nom commence par un point, voir la commande ls).
• A tout moment, on peut revenir au répertoire de connexion grâce à la commande cd.
A. EL Bourichi
Initiation au shell
• 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
A. EL Bourichi
Initiation au shell - commandes -
• Format des commandes:
commande [-option(s)] [argument(s)]
Respecter la casse
et les espaces!!
A. EL Bourichi
Exécution d’une commande
• Lorsqu’il a la main, un utilisateur peut lancer l’exécution
d’une commande en tapant son nom après le prompt. La commande est alors exécutée.
• Il existe une variable d’environnement: PATH qui contient l’ensemble des chemins des répertoires contenant les commandes les plus utilisées.
• # echo $PATH /bin:/usr/ucb:/usr/bin:/usr/bin/X11:/net/bin:/net/X/bin:/net/pack/frame/ bin
• Cette variable contient tous les chemins où le système peut
trouver les commandes les plus utilisées par le demandeur.
A. EL Bourichi
Initiation au shell - méta caractères -
• 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
A. EL Bourichi
Les commandes : file et cat
• file nom_de_fichier : il est possible sous Unix de connaître aussi le
type de fichier sur lequel on travaille.
• Utilisation: – file exo.c affiche toto.c: c program text
• cat [-v] [fichier...] : affichage du contenu d’un fichier
• L’option -v permet d’afficher les caractères non visibles.
• La commande cat permet aussi de concaténer des fichiers:
• cat fichier1 fichier2 > fichier3 cette opération permet de créer un fichier (fichier3) en concaténant les fichiers fichier1 et fichier2. Le seul inconvénient de cet outil est qu’il affiche le contenu du fichier dans sa totalité (sans possibilité simple de contrôler le défilement par pages).
A. EL Bourichi
Commandes d’observation du système
• who [am i]: affiche le nom de l’utilisateur, le nom du terminal, la date et l’heure de
connexion et l’écran de «contrôle» de chaque utilisateur actuellement sur le système.
• id : affiche les numéros et les noms de l’utilisateur et des groupes de travail auxquels il appartient.
• groups [utilisateur] : affiche la liste des groupes de travail auxquels appartient un utilisateur X. Si aucun utilisateur n’est spécifié ceux sont les groupes auxquels appartient l’utilisateur qui a tapé la commande qui s’affichent.
• finger [utilisateur][@machine]: permet d’avoir des informations informelles sur les utilisateurs d’une machine précisée. Si aucun utilisateur n’est spécifié, les informations concernent tous les utilisateurs connectés. Si aucun nom de machine n’est renseigné, les données portent sur la machine sur laquelle l’utilisateur qui tape la commande est connecté.
• last [-n] [utilisateur] [terminal]: permet d’afficher les dernières connexions au système. On peut limiter le nombre de lignes renvoyées grâce à l’option -n (où n désigne le nombre de lignes affichées). On peut se limiter aussi aux connexions d’un utilisateur ou aux connexions depuis un terminal.
A. EL Bourichi
La commande ps
• On peut visualiser les processus qui tournent sur une machine avec la commande : ps (options), les options les plus intéressantes sont -e (affichage de tous les processus) et -f (affichage détaillée).
• La signification des différentes colonnes est la suivante: – UID nom de l'utilisateur qui a lancé le process
– PID correspond au numéro du process
– PPID correspond au numéro du process parent
– C au facteur de priorité : plus la valeur est grande, plus le processus est prioritaire
– STIME correspond à l'heure de lancement du processus
– TTY correspond au nom du terminal
– TIME correspond à la durée de traitement du processus
– COMMAND correspond au nom du processus.
A. EL Bourichi
Les entrées et les sorties
• Il y a trois sortes d'entrées sorties ou flux de données :
– le premier est l'entrée standard, c'est à dire ce que vous saisissez au
clavier,
– le deuxième est la sortie standard, c'est à dire l'écran, plus précisément le shell,
– et le troisième est la sortie standard des messages d'erreurs consécutifs à une commande, qui est généralement l'écran.
• Chacun de ces flux de données est identifié par un numéro descripteur, 0 pour l'entrée standard, 1 pour la sortie standard et 2 pour la sortie standard des messages d'erreur.
A. EL Bourichi
Redirections d ’E/S (1/5)
• Redirection de la sortie standard:
– Syntaxe: $ Commande > fichier.
– Exemple :
• $ who > connect
• On retrouve dans le fichier connect la liste des
personnes connectés.
A. EL Bourichi
Redirections d ’E/S (2/5)
• Redirection de la sortie standard:
– Remarque:
• Pour éviter d’écraser le contenu d’un fichier suite à une
redirection de la sortie, on peut utiliser la redirection
avec ajout. Dans ce cas le résultat de la commande sera
inséré à la fin du fichier.
– Syntaxe: $ Commande >> fichier.
– Exemple: $ date >> connect
A. EL Bourichi
Redirections d ’E/S (3/5)
• Redirection de l’Entrée standard:
– Un fichier peut servir comme entrée standard à une
commande :
– Le fichier source contient les arguments de la commande.
– Syntaxe : $ Commande < fichier_source
– Exemple :
• $ wc -l < connect
• Permet de compter le nombre de lignes dans le fichier connect.
A. EL Bourichi
Redirections d ’E/S (4/5)
• Redirection de la sortie erreur standard :
– Chaque programme est doté d’un canal de sortie d’erreur
séparé dont le descripteur de fichier égal à 2.
– Exemple: $ cc programme.c 2>erreurs.
– Les erreurs de compilation du fichier programme.c seront
redirigées vers le fichier erreurs.
– On peut utiliser également le fichier /dev/null pour la
redirection de la sortie erreur.
A. EL Bourichi
Redirections d ’E/S (5/5)
• Redirections :
- < : redirige l’entrée à partir d’un fichier
Ex. cat < toto
- > : redirige la sortie vers un fichier
Ex. ls > dir.txt
- >> concatène la sortie avec un fichier
Ex. ls >> dir.txt
- 2> (ou >&*) redirige les erreurs vers un fichier
Ex. rm * 2> erreur.log
- 2>> (ou >>&*) concatène les erreurs avec un fichier
Ex. rm * 2>> erreur.log
A. EL Bourichi
Les tubes de communication 1/5
• Définition:
– Lier les entrées et les sorties de plusieurs commandes dans une même ligne de commande.
• Syntaxe: $ Commande1 | Commande2
• Le résultat de la commande1 sera considéré comme argument pour la commande2.
• |: indique un tube.
A. EL Bourichi
Les tubes de communication 2/5
• Exemple:
$ ls | grep ensak | tee fichier1 | wc -l.
1 2 3 4 – 1: Liste des fichiers dans le répertoire courant
– 2: Recherche des noms de fichiers qui contiennent la chaîne de
caractères poème.
– 3: Met le résultat de la commande précédente dans fichier1
– 4: compte le nombre de lignes ramenés par grep.
A. EL Bourichi
Les tubes de communication 3/5
• Exemple: $ who | wc - l (**)
$who : liste de personnes connectés au système.
$wc -l nom_fichier :Compte le nombre de lignes de
nom_fichier.
La commande (**) permet de compter le nombre de
personnes connectés, elle est équivalente à la ligne de
commande suivante:
$ who>tmp ; wc -l tmp ; rm tmp
A. EL Bourichi
Les tubes de communication 4/5
• La commande tee :
– En utilisant des filtres le résultat de la commande
commande1 n’est pas visualisé à l’écran, pour pouvoir le
visualiser on utilisera des tuyaux : commande tee.
– Syntaxe:
• $ commande1 | tee fichier1 | commande2
– Redirige le résultat intermédiaire de commande1 vers
fichier1. Ce même résultat sera traité par la commande
commande2.
A. EL Bourichi
Les tubes de communication 5/5
• La commande tee:
– Exemple:
$ ls | grep poème | tee fichier1 | wc -l.
1 2 3 4
• 1: Liste des fichiers dans le répertoire courant
• 2: Recherche des noms de fichiers qui contiennent la chaîne de
caractères poème.
• 3: Met le résultat de la commande précédente dans fichier1
• 4: compte le nombre de lignes ramenés par grep.
A. EL Bourichi
Le système de fichiers Linux
• Stocke les données:
– Structure arborescente
– TOUT est fichier
• 3 types de fichiers:
– fichiers ordinaires
– répertoires
– fichiers spéciaux (périph., …)
A. EL Bourichi
L’arborescence
A. EL Bourichi
L’arborescence
répertoire racine
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”)
/
bin tmp home
ensak
docs cours .cshrc
tp1.txt
chemin d’accès au fichier tp1.tex:
/home/ensak/cours/tp1.txt
ou bien: ~/cours/tp1.txt
A. EL Bourichi
chemin relatif
chemin absolu
L’arborescence
/
home tmp
ensak
.cshrc cours docs
tp1.txt
pwd retourne: /home/ensak/cours
répertoire courant
Test
se déplacer: cd
[/home/ ensak/cours]$ cd ..
[/home/ ensak]$
[/home/ ensak]$ cd /tmp
[/tmp]$
créer un répertoire: mkdir [/tmp]$ mkdir Test
supprimer un répertoire: rmdir [/tmp]$ rmdir Test
A. EL Bourichi
Les droits d’accès 1/3
• 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)
afficher le contenu
modifier
exécuter
fichier
afficher le contenu
créer/supp fichiers
traverser
répertoire A. EL Bourichi
Les droits d’accès 2/3
• Affichage des caractéristiques: ls -l
-rw-r--r-- 1 adil ginfo 58K 16 Feb 09:19 tp1.txt
groupe
nb liens propriétaire taille date nom
-rw-r--r--
type
user others
group
A. EL Bourichi
Les droits d’accès 3/3
• Changer les permissions: chmod chmod <classe op perm, …>|nnn <fic>
– classe: u : user g : group o : others a : all
– op: = : affectation - : suppr. + : ajout
– perm: r : lecture w : écriture x : exécution
chaque perm = 1 valeur:
déf. des permissions (par addition) pour chaque classe
r 4
w 2
x 1
rien 0
Exemples:
chmod u=rwx,g=rx,o=r tp1.txt
chmod a+x script.sh
chmod 755 script.sh
A. EL Bourichi
Droits d’accès par défaut
• Chaque fichier ou répertoire nouvellement créé est équipé de
droits d’accès par défaut :
- Pour un répertoire 777 rwxrwxrwx
- Pour un fichier 666 rw-rw-rw-
• La commande umask
-Syntaxe : $ umask [code]
A. EL Bourichi
Changement de propriétaire
• Commande chown
-Syntaxe: $ Chown utilisateur fichier 1 [fichier2]
• Commande chogrp
- Syntaxe: $ Chogrp group fichier 1 [fichier2]
A. EL Bourichi
Manipulation des 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
Voir les pages du “man” !!
A. EL Bourichi
La commande find
• Permet de chercher dans un répertoire et ses sous-répertoires des fichiers présentant certaines caractéristiques.
• Syntaxe: find chemin expression
• Principales options: – -name fich: recherche le fichier fich.
– -print: écrit le nom du fichier.
– -type: d: répertoire, f: fichier symbolique.
– -exec: permet l’exécution d’une commande sur le fichier représenté par {}.
A. EL Bourichi
Exemple
• Rechercher tous les fichiers nommés hello.txt à partir du répertoire racine.
find / -name hello.txt -print.
• Afficher tous les fichiers .h à partir du répertoire courant.
find . -name ’*.h’ -print
• Affiche à l’écran le contenu de tous les fichiers .c.
find . -name ’*.c’ -exec cat ’{}’ \;
A. EL Bourichi
La commande grep
• Permet de rechercher un certain motif dans un fichier.
• Le motif est décrit par une expression régulière.
• grep [option] motif fichier Affiche les lignes de fichier qui contiennent le motif motif.
• -l: n’affiche que le nom des fichiers.
• Exemple: – grep ’define’ stdio.h: recherche le mot "define" dans le fichier stdio.h.
– grep ’hello’ *: recherche le mot "hello" dans tous les fichiers du répertoire.
A. EL Bourichi
La programmation shell
50 A. EL Bourichi
Introduction
• Plus qu'une invite de commande
• Langage de programmation
• Interprété – Non compilé
– Traduit au fur et a mesure de son exécution
• Permet: – L'encapsulation de suites de commandes dans un même programme
– Simplification de certaines tâches quotidiennes ou répétitives
A. EL Bourichi
Le shell - Généralités (1) • shell : interpréteurs de langage de commande
– programme exécutable
– interface «directe» entre le système et l’utilisateur
Machine UNIX
Application
Application
Application
shell
52 A. EL Bourichi
Le shell - Variables (1)
• Utilisation d’une variable $ VARIABLE=200 affectation SANS ESPACE $ echo $VARIABLE
200
$ VARIABLE=VARIABLE+10
$ echo $VARIABLE
VARIABLE+10
$ VARIABLE=200
$ VARIABLE=$VARIABLE+10
$ echo $VARIABLE
200+10
$ let VARIABLE=$VARIABLE
$ echo $VARIABLE
210
$ let VARIABLE=$VARIABLE+10
$ echo $VARIABLE
220
53 A. EL Bourichi
Le shell - Variables (2)
• Variables locales au shell La commande set Liste les variables locales au shell
• Variables d’environnement (ou exportées)
– connues dans les processus lancés par le shell La commande env Liste les variables d’environnement
54 A. EL Bourichi
Le shell - Délimiteurs de chaînes Le caractère ’ (simple quote) Tous les caractères entre simple quotes perdent leur aspect spécial. $ echo ’$PWD’
$PWD
Le caractère " (double quote) Les caractères $, \, ’ et ‘ gardent leur rôle de méta-caractères. $ echo "Mon repertoire courant : \"$PWD\""
Mon repertoire courant : "/home/omip/info/wattez"
Le caractère ` (anti quote) Une chaîne entre anti quotes est interprétée comme une commande. $ echo "Mon repertoire courant : \"`pwd`\""
Mon repertoire courant : "/home/omip/info/wattez"
55 A. EL Bourichi
Écriture du script
• Un script est un fichier texte dont la première ligne contient le
chemin du Shell par lequel il doit être exécuté
• Fichier script.bash :
• Le nom du fichier n'a pas d'importance, par contre, il doit être
exécutable :
A. EL Bourichi
Écriture du script - Premier Script -
• L'exécution se fait en tapant le nom du fichier comme l'appel
d'une commande. Par contre :
– Si l'on est pas dans le répertoire dans lequel est le fichier, Il faut donner le
chemin absolue
– Même si l'on est dans le même répertoire, suivant la configuration de
l'environnement, il faut parfois précéder le nom du fichier de ./
A. EL Bourichi
Lecture de l'Entrée Standard
A. EL Bourichi
Le shell - Paramètres • Variables concernant les paramètres * liste des paramètres de la commande # nombre de paramètres de la commande 0 nom de la commande 1, ... n valeur des paramètres 1, ... n script shell testParam echo "nombre de parametres $#"
echo "nom de la commande $0"
echo "valeur des parametres 1 et 2 $1 $2"
echo "fin du test"
$ testParam aa bbb cccc
nombre de parametres 3
nom de la commande ./testParam
valeur des parametres 1 et 2 aa bbb
fin du test
$
59 A. EL Bourichi
La commande test
• Sert à vérifier des conditions.
• Ces conditions portent sur des fichiers (le plus
souvent), ou des chaînes ou une expression
numérique
• Syntaxe:
– test expression
– [ expression ] attention aux espaces autour de expression
A. EL Bourichi
Structures de Contrôle - IF -
• Tests sur les fichiers
– Existence : -e
– Répertoire : -d
– Fichier : -f
– Non vide : -s
– Lisible : -r
– Modifiable : -w
– Exécutable :-x
A. EL Bourichi
Structures de Contrôle - IF -
• Comparaison d'entiers
–Egalité : -eq
x = y : [ x -eq y ]
– Inégalité : -ne
x # y : [ x -ne y ]
– Supériorité : -gt
x > y : [ x -gt y ]
– Infériorité : -lt
x < y : [ x -lt y ]
A. EL Bourichi
Structures de Contrôle - IF -
• Tester une chaîne
A. EL Bourichi
Structures de Contrôle - IF -
• Tester un nombre
A. EL Bourichi
Structures de Contrôle - IF -
• Opérations dans une commande test
A. EL Bourichi
Structures de Contrôle - IF -
A. EL Bourichi
Structures de contrôle - CASE -
Le choix case chaine in
motif1) commande1;;
motif2) commande2;;
...
*) commanden;;
esac
script shell testCase case $1 in
[aeiouy]*) echo "Commence par une voyelle";;
[A-Z]*) echo "Commence par une majuscule";;
???) echo "longueur 3"
ls;;
*) echo "Autres cas !!!";;
esac
$ testCase yes
Commence par une voyelle (l’ordre est important !!!) 67 A. EL Bourichi
Structures de Contrôle - FOR -
L’itérative bornée (première forme) for variable in mot1 mot2 ... motn
do
commande
done
script shell testFor for VAR in les sanglots longs
do
echo "Valeur de VAR : $VAR"
done
$testFor
Valeur de VAR : les
Valeur de VAR : sanglots
Valeur de VAR : longs
$ 68 A. EL Bourichi
Structures de Contrôle - FOR -
L’itérative bornée (seconde forme) for variable
do
commande
done
Dans ce cas, variable prend pour valeurs successives chacun des paramètres du script
script shell testFor2 for VAR
do
echo "Valeur de VAR : $VAR"
done
$testFor2 je fais souvent
Valeur de VAR : je
Valeur de VAR : fais
Valeur de VAR : souvent
$ 69 A. EL Bourichi
Structures de Contrôle - WHILE -
L’itérative non bornée while commande1
do commande2
done
until commande1
do commande2
done
commande2 peut ne pas être effectuée, aussi bien dans la forme while que dans la forme until.
70 A. EL Bourichi
Arithmétique et Booléens -Opérateurs-
• Opérateurs arithmétiques
– Addition : +
– Soustraction : –
– Multiplication : *
– Division : /
– Modulo : %
• Opérateurs booléens
– Et : &&
– Ou : ||
– Non : !
A. EL Bourichi
Passage d'Arguments
– Les paramètres sont passés sur la ligne d'appel du script,
comme fait pour les commandes
– Les paramètres sont accessibles sous forme de variables
portant le numéro du paramètre, $1, $2 et $3 dénotent
respectivement les paramètres 1, 2 et 3 passés au script
– La variable $# contient le nombre de paramètres passés au
script
– La variable $* contient l'ensemble des paramètres sous
forme de liste
– La variable $0 contient le nom du script
A. EL Bourichi
Chapitre 3 Gestion des Processus
73 A. EL Bourichi
Gestion de Processus
• Un processus est un programme en exécution – Un processus a besoin de certaines ressources;
CPU, mémoire, fichiers, les périphériques d’E/S, … pour accomplir sa tâche
• L’OS est responsable des activités suivantes en relation avec la gestion des processus – Création et suppression de processus – Suspension et relance du processus – Mécanismes pour:
• Synchronisation entre processus • Communication entre processus • Traitement des interblocages
74 A. EL Bourichi
Notion de processus
• Définition – Un processus est un programme en cours d’exécution auquel est associé
un environnement processeur (CO, PSW, RSP, registres généraux) et un environnement mémoire appelés contexte du processus.
– Un processus est l’instance dynamique d’un programme et incarne le fil d’exécution de celui-ci dans un espace d'adressage protégé(objets propres : ensemble des instructions et données accessibles)
– Un programme réentrant est un programme pour lequel il peut exister plusieurs processus en même temps.
A. EL Bourichi
76
Processus • Systèmes monoprocesseurs: pseudo-parallélisme
• Multiprogrammation: basculement entre processus
• Un processus possède:
- son propre espace d’adressage: programme, données…
- Une entrée dans la Table des Processus: sert pour la reprise après suspension
• Un processus est créé par un autre processus, le processus parent.
– UNIX: fork –création d’un clone et execve –modifier l’image du processus
– Windows: CreateProcess
• Processus
– Démons (daemon) ou en arrière-plan, exemples: courriers électroniques, pages web…
– Premier-plan
• Voir la liste des processus:
– Ctrl+alt+del sur Windows
– ps sur UNIX
A. EL Bourichi
77
Les Appels Systèmes
• L’interface entre le SE et les programmes utilisateurs est définie par l’ensemble des appels systèmes.
• L’appel système est analogue a un appel procédural classique, mais il est effectué en mode noyau.
• Code en assembleur
A. EL Bourichi
78
… Appels Systèmes POSIX
• Gestion des Processus
– fork, execve, exit…
• Gestion des Fichiers
– open, close, read, write, stat…
• Gestion des Répertoires
– mkdir,rmdir,link …
A. EL Bourichi
79
… Processus • Fin de Processus
– Volontaire: arrêt normal (Unix: exit, Windows: ExitProcess) ou arrêt pour erreur (le fichier à compiler n’existe pas)
– Involontaire: arrêt pour erreur fatale (division par 0) ou arrêté par un autre processus (Unix: kill, Windows: TerminateProcess)
• Hiérarchie de Processus – Existe sous UNIX, arborescence de parent-enfants, un processus peut
créer un autre processus par l’appel système fork
– N’existe pas sous Windows, CreateProcess retourne un HANDLE utilisé pour contrôler le processus
• Implémentation de Processus – Un processus possède son propre espace d’adressage: programme,
données, pile.
– Le changement de contexte (changement de processus) Table de processus, avec une entrée/ processus contenant registres, identificateur, ptr vers le segment texte, ptr vers segment de données, ptr vers le segment de pile, état …
A. EL Bourichi
80
Etats de Processus
Elu (En cours d’exécution)
Bloqué Prêt
1- Le processus est bloqué, en attente d’une donnée, événement
2- L’ordonnanceur choisit un autre processus
3- L’ordonnanceur choisit ce processus
4- La donnée devient disponible
(1) (2)
(3)
(4)
A. EL Bourichi
81
Terminaison de processus
• Un processus exécute sa dernière instruction
– pourrait passer des données à son parent
– ses ressources lui sont enlevées
• Le processus parent termine l’exécution d’un fils pour différentes raisons
– le fils a excédé ses ressources
– le fils n’est plus requis
• Le parent pourrait être le SE
A. EL Bourichi
82
Création et synchronisation de processus
En UNIX, le fork créé un processus identique au père, excepté son pid
exec peut être utilisé pour exécuter un nouveau programme
A. EL Bourichi
83
Sauvegarde d’informations de processus
• Un processus s’exécute sur l’UCT de façon intermittente
• Chaque fois qu’un processus reprend l ’UCT (transition prêt exécution) il doit la reprendre dans la même situation où il l’a laissée (même contenu de registres UCT, etc.)
• Donc au moment où un processus sort de l’état exécution il est nécessaire de sauvegarder ses informations essentielles, qu’il faudra récupérer quand il retourne à cet état
A. EL Bourichi
84
PCB = Process Control Block: Représente la situation actuelle d’un processus, pour le
reprendre plus tard
Registres UCT
A. EL Bourichi
85
Process Control Block (PCB)
– pointeur: les PCBs sont rangés dans des listes chaînées
– état de processus: prêt, exec, attente…
– compteur programme: le processus doit reprendre à l’instruction suivante
– autres registres UCT
– bornes de mémoire
– fichiers qu’il a ouvert
– etc.
A. EL Bourichi
86
Commutation de processeur Aussi appélé commutation de contexte ou context switching
• Quand l’UCT passe de l’exécution d’un processus 0 à l’exécution d`un proc 1, il faut
– mettre à jour et sauvegarder le PCB de 0
– reprendre le PCB de 1, qui avait été sauvegardé avant
– remettre les registres d’UCT tels que le compteur d’instructions etc. dans la même situation qui est décrite dans le PCB de 1
A. EL Bourichi
A. EL Bourichi 87
Commutation de processeur (context switching)
Il se peut que beaucoup de temps passe avant le retour au
processus 0, et que beaucoup d’autres processus soient exécutés
entre temps
88
La pile d’un processus
• Quand un processus fait appel à une procédure, il est nécessaire de mettre dans une pile l’adresse à laquelle le processus doit retourner après avoir terminé cette procédure.
• Aussi on met dans cette pile les variables locales de la procédure qu’on quitte, les paramètres, etc., pour les retrouver au retour
• Chaque élément de cette pile est appelé stack frame ou cadre de pile
• Donc il y a normalement une pile d’adresses de retour après interruption et une pile d’adresses de retour après appel de procédure
– Ces deux piles fonctionnent de façon semblable, mais sont indépendantes
• Les informations relatives à ces piles (base, pointeur…) doivent aussi être sauvegardées au moment de la commutation de contexte
A. EL Bourichi
89
La Pile d’un processus
A
B
Appel A Appel B
PILE
Données P
Données B
Données A
P
A. EL Bourichi
90
Configuration typique de mémoire pour un processus
programme
Données fixes
Tas pour structures
dynamiques (listes)
Pile de contrôle
A. EL Bourichi
Notion d’interruptions
• Une interruption est un mécanisme permettant de stopper l’exécution du programme en cours afin d’aller exécuter une tâche.
• Elle est caractérisée par un numéro et un traitement associé (la routine ou traitant d’interruption)
• On distingue principalement deux types d’événements :
– Les interruptions externes ou matérielles. – Les interruptions internes ou logicielles (traps).
A. EL Bourichi
92
Rôle du matériel et du logiciel dans le traitement d’interruptions
MATÉRIEL LOGICIEL
Signal d’interruption généré
UCT termine l’instruction courante
et détecte interruption
Registres d’UCT sont
sauvegardés dans la pile des interr.
UCT saute à l’adresse trouvée dans
le vecteur d’interruption
Infos
sauvegardées dans PCB
Le code de traitement de
l’interruption est exécuté
L’ordonnanceur choisit un
processus qui est prêt
Les registres d’UCT sont rechargés
avec ces infos
Les infos relatives à ce processus
sont rétablies à partir de son PCB
dispatcher
L’UCT reprend l’exec de ce proc
A. EL Bourichi
93
Files d’attente
• Les ressources d’ordinateur sont souvent limitées par rapport aux processus qui en demandent
• Chaque ressource a sa propre file de processus en attente
• À un moment donné, un proc ne peut se trouver que dans une seule des différentes files du SE
• En changeant d’état, les processus se déplacent d ’une file à l`autre
– File prêt: les processus en état prêt=ready
– Files associés à chaque unité E/S
– etc.
A. EL Bourichi
94
Ce sont les PCBs qui sont dans les files d’attente (d’ou le besoin d ’un pointeur dans le PCB)
file prêt
Nous ferons l’hypothèse que le premier processus dans une file est celui qui utilise la ressource: ici,
proc7 exécute, proc3 utilise disque 0, etc. A. EL Bourichi
Trois structures de donnée essentielles pour la gestion des processus
Les structures de données suivantes sont reliées mais distinctes dans leur utilisation et contenu
• Pile propre à chaque processus pour gérer les appels-retours aux procédures, méthodes, fonctions etc.
• Pile du SE pour gérer les interruptions et retours des interruptions
• Liste des PCBs actifs dans le système à un moment donné, est partitionnée en plusieurs listes d’attente, une pour chaque ressource qui peut être affectée à un processus
Chacune de ces piles ou listes doit sauvegarder des informations pour pouvoir retourner
• à la bonne place
• du bon processus
• avec les bonnes données
95 A. EL Bourichi
Ces listes sont différentes!
• Pile propre à chaque processus pour gérer les appels-retours aux procédures, méthodes, fonctions etc.
– Cette pile doit exister dans tout système qui admet ces appels, même si le système n’admet ni les interruptions, ni la multiprogrammation
– Elle est gérée par le système d’exécution du programme compilé
• Pile du SE pour gérer les interruptions et retours des interruptions
– Cette pile doit exister dans tout système qui admet des interruptions, même s’il n’admet pas de multiprogrammation
– Elle est gérée directement par le matériel
• Liste des PCBs actifs dans le système
– Cette liste a besoin d’exister seulement dans les systèmes multiprogrammés
– Elle est gérée par le SE
96 A. EL Bourichi
Ordonnanceur (Scheduler)
A. EL Bourichi
Ordonnanceur (Scheduler)
• Election: allocation du processeur
• Préemption: réquisition du processeur
– ordonnancement non préemptif : un processus élu le demeure sauf s’il se bloque de lui-même
– ordonnancement préemptif : un processus élu peut perdre le processeur
• s’il se bloque de lui-même (état bloqué)
• si le processeur est réquisitionnépour un autre processus (état prêt)
A. EL Bourichi
Système multiprocessus Ordonnanceur et
répartiteur
A. EL Bourichi
100
Ordonnancement
Ordonnanceur (scheduler): partie du SE qui sélectionne les processus.
Algorithme d’ordonnancement (scheduling algorithm)
- non-préemptif: sélectionne un processus, puis le laisse s’exécuter jusqu’à ce qu’il se bloque (E/S, wait) ou se termine.
- préemptif: sélectionne un processus et le laisse s’exécuter pendant un quantum, préemption par l’interruption horloge
Comportement de Processus:
- Processus de traitement - Processus d’E/S
A. EL Bourichi
101
… Algo d’ordonnancement 1er arrivé, 1er servi (first come first served)
Le job le plus court en premier (shortest job first)
Délais d’exécution connus
Shortest remaining time next
Tourniquet (round robin)
Quantum court: trop de changement de contexte
Quantum long: dégradation temps de réponse aux requêtes interactives
Par Priorités
Prévenir contre les situations de « famine » en diminuant la priorité du processus à chaque interruption ou priorité égale à l’inverse de la fraction d’utilisation du dernier quantum...
Par Tirage au Sort
A. EL Bourichi
Politiques d'ordonnancement • Premier arrivé, premier servi
– FIFO, sans réquisition
• Par priorités constantes
• Par tourniquet (round robin)
• Par files de priorités de priorités constantes
multiniveaux avec ou sans extinction de priorité
A. EL Bourichi
Chapitre 4 Gestion de la mémoire
103 A. EL Bourichi
Besoins en mémoire
• Premier ordinateurs disposaient de moins d'1Ko de RAM
• Aujourd'hui 4Go
• Tout va bien, pas besoin de gérer la mémoire?
• Non!
• Besoins toujours croissants (multimédia)
104 A. EL Bourichi
Hiérarchisation de la mémoire
105 A. EL Bourichi
Monoprogrammation simple
• Figure 4.1 pg 203 Tanen
106 A. EL Bourichi
Multiprogrammation avec partitions fixes
• Figure 4,2 Tannen
107 A. EL Bourichi
Problèmes de la multiprogrammation
• Réallocation
• Protection mémoire
108 A. EL Bourichi
Réallocation (relocation)
• On ne sais pas où commence le programme
• 2 solutions:
• 1) Relocation software
• 2) Relocation hardware
• Adresse réelle = Reg. de base + Reg. Déplacement (80x86)
109 A. EL Bourichi
Structure exécutable
Le compilateur génère un fichier exécutable.
Qu'est-ce qu'il y a dans un fichier exécutable? (un .exe par exemple)
110 A. EL Bourichi
Structure exécutable
Le code machine
On doit savoir où on commence!
–=> adresse main() (point d'entrée)
Exécutable
–Code machine
–Table symboles
Adresses points d'entrés (fonction main en C ou les
méthodes public static en Java )
111 A. EL Bourichi
Structure exécutable
Module1.exe Code main = 0FFH
112 A. EL Bourichi
Loader
Il faut maintenant charger (to load) le programme en mémoire.
Loader = programme de l'OS qui va charger l'exécutable en mémoire et transférer le contrôle au point d'entrée principal.
113 A. EL Bourichi
Chargement programme
Mém Libre
Module1.exe main = 0FFH
OS
Module1
OS
Mem Libre
20000H 20000H
114 A. EL Bourichi
Chargement programme
1) Copier code de Module1.exe à partir de l'adresse 2000H
2) Faire un jmp à l'adresse du main() de Module1.
Oui mais elle vaut combien cette adresse?
115 A. EL Bourichi
Chargement programme
1) Copier code de Module1.exe à partir de l'adresse 2000H
2) Faire un jmp à l'adresse du main() de Module1.
Oui mais elle vaut combien cette adresse?
Elle vaut 2000H + 00FFH = 20FFH
116 A. EL Bourichi
Relocation
La relocation est le fait de corriger l'adresse d'un symbole pour avoir son adresse réelle en mémoire.
117 A. EL Bourichi
Protection mémoire
• Solution 1: Block ID (IBM 360)
• Mémoire divisée en blocs de 2Ko
• Chaque bloc à un ID de 4 bit (pas forcément unique)
• Chaque processus à un ID mémoire de 4 bits
• Seul l’OS peut changer les blocs et process ID’s
• Si processus ID = bloc ID alors on peut lire et écrire
• Si ID's non compatibles => erreur (interruption)
118 A. EL Bourichi
Protection mémoire
• Solution 2: Base + limite
• On a deux registres protégés (seuls l'OS peut les changer)
• On peut accéder les adresses [Base, Base+limite]
• Si on sort: erreur (segmentation fault) => interrupt
119 A. EL Bourichi
Limitations partitions fixes?
120 A. EL Bourichi
Limitations partitions fixes
• Nombre de processus exécutés fixe, ...
• Taille des partitions fixe
• Si programme plus grand que partition => KO
• 2 solutions:
• Va-et-vient
• Mémoire virtuelle
121 A. EL Bourichi
Va-et-vient
• On va permettre de retirer (swap-out) des processus de la mémoire pour les y remettre plus tard (swap-in).
• La mémoire devient une ressource « préemptible » (cad qu'on peut confisquer)
122 A. EL Bourichi
Va-et-vient
• A rentre
• Swap-in
123 A. EL Bourichi
Va-et-vient
• B rentre
• Swap-in
124 A. EL Bourichi
Va-et-vient
• C rentre
• Swap-in C
• Veut rentrer D
125 A. EL Bourichi
Va-et-vient
• Swap-out A
126 A. EL Bourichi
Va-et-vient
• Swap-in D
• Veut faire revenir
• A
127 A. EL Bourichi
Va-et-vient
• Swap-out B
128 A. EL Bourichi
Va-et-vient
• Swap-in A
129 A. EL Bourichi
Va-et-vient
130 A. EL Bourichi
Fragmentation
• A force, on risque de voire apparaître des trous trop petits pour pouvoir y mettre un processus
• Il faut compacter ou tasser les zones mémoire pour faire de la place.
• Lent!
• Ex: 256Mo RAM copier 4 octets prend 40ns
• => 2,7 sec pour copier toute la mémoire!
131 A. EL Bourichi
Gestion place libre par tableau de bits (bitmap)
• On découpe la mémoire en unités d'allocation (blocs) de plusieurs Ko.
• Bit à 1 = place prise, 0 = libre
• Figure 4.7 (a),(b) Tanen
132 A. EL Bourichi
Gestion place libre par tableau de bits
• La recherche d'une page libre peut-être lente, ...
133 A. EL Bourichi
Gestion place libre par listes chaînées
• On indique pour chaque zone libre ou occupée son début et sa taille.
• Figure 4.7 (a), (c) Tanen
134 A. EL Bourichi
Gestion place libre par listes chaînées
• Pour éviter la fragmentation, on fusionne les trous
• Figure 4.8 Tanen
135 A. EL Bourichi
Overlays (Segments de recouvrement)
• Parfois la taille d'un programme > taille mémoire physique!
• Historiquement: segments de recouvrement (overlays)
• On découpe le programme en zone qu'on charge au besoin
• C'est le programmeur qui doit gérer le quand du chargement!
• Plus vraiment utilisé
136 A. EL Bourichi
Mémoire virtuelle
• C'est le même principe que les overlays sauf que c'est géré par l'OS
• L'OS découpe le processus en petites parties.
• On conserve les parties les plus utilisées en RAM
• Les autres sont stockées sur disque
• Au besoin on sort des parties non utilisées et charge de nouvelles parties en RAM
• => processus bloqué en E/S lors du chargement de la partie manquante
137 A. EL Bourichi
Mémoire virtuelle: pagination
• Adresse physique – dans processeur sans pagination:
– Mov reg,1000
– Charge le contenu de l'adresse physique Base+1000 dans REG
• Espace d'adressage = espace des adresses physiques existants réellement
138 A. EL Bourichi
Mémoire virtuelle: pagination • Adresse virtuelle
– dans processeur avec pagination:
– Mov reg,1000
– Base+1000 est une adresse virtuelle
– On la traduit d'abord en adresse réelle, puis on charge son contenu de dans REG
• Espace d'adressage = espace des adresses représentables
139 A. EL Bourichi
Mémoire virtuelle unique ou multiple
• Mémoire virtuelle unique: tous les processus partagent le même espace d'adressage virtuel – => Ils peuvent (potentiellement) partager des
zones mémoire pour s'échanger des données.
• Mémoire virtuelle multiple: chaque processus a son propre espace d’adressage virtuel, il est donc (virtuellement) tout seul dans la mémoire.
140 A. EL Bourichi
Mémoire virtuelle: pratiquement • La traduction se fait par l'unité de gestion de la
mémoire (memory management unit: MMU)
• Figure 4,9 Tanen
141 A. EL Bourichi
Mémoire virtuelle: pratiquement
• Les processus sont découpés en pages
• Ces pages sont chargé dans des "pages frames" (cadres de pages) de la mémoire physique
• Ex: accéder à l'adresse 0
142 A. EL Bourichi
Mémoire virtuelle: pratiquement
• Mov reg,8192
• Traduit en?
143 A. EL Bourichi
Mémoire virtuelle: pratiquement
• Mov reg,8192
• Traduit en?
• Mov REG,24576
144 A. EL Bourichi
Mémoire virtuelle: pratiquement
• Mov reg,32780
• Que se passe-t-il?
145 A. EL Bourichi
Page fault (défaut de page)
• Mov reg,32780
• Que se passe-t-il?
• Défaut de page (page fault)
• On va sélectionner un page frame peu utilisé
• On la sort de la mémoire (swap out)
• On rentre la page manquante dans le cadre libre
• On exécute quelle instruction après ça?
146 A. EL Bourichi
Page fault (défaut de page)
• Mov reg,32780
• Que se passe-t-il?
• Défaut de page (page fault)
• On va sélectionner un page frame peu utilisé
• On la sort de la mémoire (swap out)
• On rentre la page manquante dans le cadre libre
• On exécute quelle instruction après ça?
• On ré-exécute Mov reg,32780 !!! (pas directement l'instruction suivante!)
147 A. EL Bourichi
Taille des pages
• Vous n'avez rien remarqué sur la taille des pages?
• Ce sont des exposants de 2!
• Pourquoi?
148 A. EL Bourichi
Taille des pages
• Vous n'avez rien remarqué sur la taille des pages?
• Ce sont des exposants de 2
• Pourquoi?
• Page de 4Ko, il faut 12 bits pour représenter 0 à 4095
• Adresse 16 bits: 4 bits pour le numéro de page et 12 bits pour le déplacement (offset dans la page)
149 A. EL Bourichi
Table des pages
• Les 4 bits de poids fort sont utilisé comme numéro de page dans la table des pages
• En réalité, les adresses font 32 bits
• Problème?
Table des pages
• En réalité, les adresses font 32 bits
• Problème?
• 20 bits de numéros de pages = 1 millions de pages!!
• Adresse 64 bits ??!!
Segmentation
• Avec la pagination, on a un espace d'adressage par processus.
• Or on peut (veut) en avoir plusieurs.
• Ex:?
152 A. EL Bourichi
Segmentation
• Dans le pentium on a des registres de segment qui définissent des espaces d'adressage propre.
• Combinaison avec la pagination?
153 A. EL Bourichi
Segmentation
• Dans le pentium on a des registres de segment qui définissent des espaces d'adressage propre.
• Combinaison avec la pagination?
• Naïvement: Segment + offset = adresse virtuelle
• Pas si simple!!!
• On a une indirection en plus:
• Le registre de segment (appelé sélecteur) pointe vers un descripteur de segment.
154 A. EL Bourichi
Segmentation
• Reg segment = selector
155 A. EL Bourichi
Segmentation et pagination
• Ensuite on traduit l'adresse
156 A. EL Bourichi
Descripteur de segment
157 A. EL Bourichi
Sélecteur de segment
158 A. EL Bourichi
Chapitre 5 Gestion des fichiers
159 A. EL Bourichi
Systèmes de gestion des fichiers
Information logique Information physique
Disque
Cylindre
Piste
Secteur
Nom folder
Nom fichier
Indications fichier
A. EL Bourichi
Concept de fichier
• Définition : Un fichier est une unité de stockage
logique de l’information. – Abstraction des propriétés physiques des dispositifs de stockage
– la correspondance est établie par le SE
• Opérations sur les fichiers :Création, Ecriture/Lecture, Suppression
A. EL Bourichi
Attributs d’un fichier
Constituent les propriétés du fichiers et sont stockés dans un fichier spécial appelé répertoire (directory). Exemples d’attributs: Nom:
pour permet aux personnes d’accéder au fichier
Identificateur:
Un nombre permettant au SE d’identifier le fichier
Type:
Ex: binaire, ou texte; lorsque le SE supporte cela
Position:
Indique le disque et l’adresse du fichier sur disque
Taille:
En bytes ou en blocs
Protection:
Détermine qui peut écrire, lire, exécuter…
Date:
pour la dernière modification, ou dernière utilisation
Autres…
A. EL Bourichi
Type des fichiers
• Type de fichiers: exécutable, commande, texte,..
• Certains SE supportent et reconnaissent le type de fichiers
– Windows utilise les suffixes des noms de fichiers : .exe, .bat, .txt, .com...
• Unix ne supporte pas le typage des fichiers
A. EL Bourichi
Conception d’un système de fichier
• Le système de fichiers doit avoir un moyen de calculer/mémoriser – La décomposition des fichiers en blocs.
– Le positionnement du début de chaque fichier.
– Les positions de tous les blocs du même fichier.
– Tous les blocs de mémoire libre sur un disque.
A. EL Bourichi
Organisation des disques
• Organisation: blocs de mémoire de taille fixe (N octets)
disque organisé en Tête, Cylindre, Secteur
A. EL Bourichi
A. EL Bourichi
• Pour un meilleur compromis: temps d'accès et
capacité de stockage certains SGF organisent
l'espace du disque en blocs de secteurs
• Les opérations de lecture et d'écriture du SGF
se font bloc par bloc
A. EL Bourichi
Méthode d ’allocation
• Méthodes d'allocation
– Allocation contiguë (séquentielle simple)
– Allocation par blocs chaînés
– Allocation indexée
A. EL Bourichi
Allocation Contiguë
• Allocation contiguë : chaque fichier occupe un nombre de blocs contigus sur le disque
A. EL Bourichi
0 1 2 3 4
5 6 7 8 9
10 11 12 13 14
15 16 17 18 19
20 21 22 23 24
Allocation contiguë
fichier début longueur
Mail 0 2
Liste 7 5
temp 16 3
A. EL Bourichi
Problème d’extension d’un fichier
A. EL Bourichi
Probléme de fragmentation
A. EL Bourichi
Allocation Contiguë
• Avantages : – Simple à implémenter
– Accès direct aux blocs en temps constant
– Adapté aux supports « Write Once »
• Inconvénients : – Problème : Extension d’un fichier
– Problème : Fragmentation
– Blocs libre: Nécessite de connaître à l’avance de la taille du fichier
A. EL Bourichi
Allocation chaînée
• Un fichier occupe une liste chaînée de blocs sur le disque
• Chaque bloc contient une partie des données et un pointeur sur le bloc suivant
A. EL Bourichi
0 1 2 3 4
5 6 7 8 9
10 11 12 13 14
15 16 17 18 19
20 21 22 23 24
fichier début fin
Mail 9 22
16
10
2
22
18
-1
Allocation chaînée
A. EL Bourichi
Allocation chaînée
• Avantages – Possibilité d’étendre un fichier
– Allocation par bloc individuel
• Inconvénients – Solution non adaptée à l’accès direct
– L’accès à un bloc quelconque nécessite l’ accès à tous les blocs qui le précèdent
– Les pointeurs.
A. EL Bourichi
Allocation chaînée FAT
• Idée :Séparer les pointeurs et les données
• Technique: – Utilisation d ’ une table d ’ allocation de fichier (FAT : File Allocation
Table)
– A chaque bloc est associée une entrée dans la FAT qui contient le n° du bloc suivant
– Méthode Utilisée dans MS-DOS
A. EL Bourichi
FAT - Exemple
A. EL Bourichi
Allocation chaînée -FAT-
• Avantages – Extension des fichiers
– les blocs de données ne contiennent pas les pointeurs
– accès direct facile
– Protection de la FAT
• Inconvénients – Occupation de la mémoire centrale par la FAT
– Une table pour un disque de 1Go en blocs de 1Ko occuperait 4 Mo (+ 4Mo pour la FAT « ombre »)
A. EL Bourichi
Allocation indexée
• Idée: – Éclater la FAT en plusieurs petites tables appelées nœuds
d’informations ( i-node)
– A chaque fichier est associé un nœud d ’ information
– Chaque table contient les attributs et les adresses sur le disque des blocs du fichier
A. EL Bourichi
Structure d ’un i-node
A. EL Bourichi
Exemple 1
A. EL Bourichi
Exemple 2
A. EL Bourichi
Exemple 3
• Supposons que l'on cherche le fichier /usr/ast/courrier;
A. EL Bourichi
Allocation indexée
• Avantages: – Seuls les i-nodes des fichiers ouverts sont chargés en
mémoire centrale
– Allocation par bloc individuel
– Accès direct facile • nécessite au maximum 4 accès disque
– Adaptée aux disques de très grande capacité
A. EL Bourichi
Gestion de l’espace libre
• Système maintient une liste d'espace libre, qui
mémorise tous les blocs disque libres (non
alloués) – Création d'un fichier : recherche dans la liste d'espace libre de la quantité requise
d'espace et allocation au fichier : l'espace alloué est supprimé de la liste
– Destruction d'un fichier : l'espace libéré est intégré à la liste d'espace libre
• Il existe différentes représentations possibles de
l'espace libre – vecteur de bits
– liste chainée des blocs libres
A. EL Bourichi
Vecteur de bits
• La liste d'espace libre est représentée par un
vecteur binaire, dans lequel chaque bloc est
figuré par un bit. – Bloc libre : bit à 0
– Bloc alloué : bit à 1
A. EL Bourichi
Liste chainée
• La liste d'espace libre est représentée par une
liste chainée des blocs libres
A. EL Bourichi
Protection des fichiers
• Protection contre les dégâts physiques
– FIABILITE
• redondance, sauvegardes
• Protection contre les accès inappropriés
– PROTECTION
• droits d'accès, mots de passe
A. EL Bourichi
Protection contre les accès 1/2
• Association d'un mot de passe à chaque
fichier (IBM)
– viable sur un système monoutilisateur
– difficile à mettre en œuvre sinon
A. EL Bourichi
Protection contre les accès 2/2
• Définition de droits d'accès
– lecture (r), écriture (w), exécution (x), destruction ...
• A chaque fichier est associé une liste d'accès,
spécifiant pour chaque utilisateur, les types
d'accès qui lui sont autorisés
A. EL Bourichi
Protection contre les dégâts physiques
• Utilisation de la redondance interne : – l'information existe en double exemplaire : une version primaire,
une version secondaire
– le système maintient la cohérence entre les deux versions
• Redondance par sauvegarde périodique : – sauvegarde complète : la totalité des objets est dupliquée même
si ils n'ont pas été modifiés
– sauvegarde incrémentale : seuls les objets modifiés depuis la
dernière sauvegarde sont dupliqués.
A. EL Bourichi
Annexe I: Manipulation des fichiers en
langage C
A. EL Bourichi 193
Définition
Un fichier est un ensemble structuré de données stocké sur un support externe (disquette ,
disque dur, …). Un fichier structuré est composé d’une suite d’enregistrements homogènes
qui regroupent le plus souvent plusieurs composantes appelées champs.
Les fichiers sont caractérisés par deux notions :
• le mode d’organisation : est la méthode
choisie pour ranger les données dans le
fichier (séquentiel, indexé,...) ;
• Garantir la persistance des données (les données sont préservées après l’exécution)
• Volume de données variable et plus grand que pour les structures de données statiques
(tableaux).
Buts
Caractéristiques
… …
• le mode d’accès : est la méthode choisie pour rechercher un enregistrement en cas
de lecture ou pour rechercher son emplacement en cas d’écriture (séquentiel,
direct, binaire, ...).
Séquentiel Indexé
Index
194 A. EL Bourichi
On distingue généralement deux types d'accès :
Accès séquentiel :
• Pas de cellule vide.
• On accède à une cellule en se déplaçant, depuis la cellule de départ.
• On ne peut pas détruire une cellule.
• On peut ajouter une cellule à la fin.
Accès direct (RANDOM I/O)
• Cellule vide possible.
• On peut directement accéder à une cellule.
• On peut modifier n'importe quelle cellule.
Remarque : Le langage C ne distingue pas les fichiers à accès séquentiel des
fichiers à accès direct.
Il existe d’autre part deux façons de coder les informations stockées dans un fichier :
En binaire :
Fichier dit « binaire », les informations sont codées en brut sans aucune
transformation. Ils ne sont pas éditables.
en ASCII :
Fichier dit « texte », les informations sont codées en ASCII. Ces fichiers sont
éditables. Le dernier octet de ces fichiers est EOF. 195 A. EL Bourichi
Manipulation des fichiers en langage C
Les opérations possibles avec les fichiers sont : Créer, Ouvrir, Fermer, Lire, Ecrire,
Détruire, Renommer en utilisant des fonctions rangées dans STDIO.H
Déclaration
Consiste à définir un pointeur qui permet de fournir l'adresse d'une cellule donnée dans
le fichier ouvert.
FILE *pointeur ; /* majuscules obligatoires pour FILE */
Ouverture
Permet d’associer le pointeur déclaré de type FILE avec le fichier à manipuler et de
préciser les possibilités d’accès (lecture, écriture ou lecture/écriture). L’ouverture se
fait par :
La déclaration d’un tel pointeur se fait par :
PointeurFILE = fopen (nomFichier, mode) ;
Avec :
NomFichier : Nom du fichier figurant sur le disque, exemple: "C :\Etudiants.dat"
Mode : chaîne de caractères qui détermine le mode d’accès
Pointeur
196 A. EL Bourichi
Mode Description
Fichier Texte Fichier Binaire
r rb lecture seule. Le fichier doit exister. Pointeur au début
w wb écriture seule (destruction de l'ancienne version si elle
existe, création du fichier si non). Pointeur au début
a ab écriture d'un fichier existant, pas de création d'une
nouvelle version. Pointeur à la fin du fichier.
r+ rb+ lecture/écriture d'un fichier existant (mise à jour), pas de
création d'une nouvelle version. Pointeur au début
w+ wb+ lecture/écriture (destruction ancienne version si elle
existe, sinon création du fichier). Pointeur au début.
a+ ab+
lecture/écriture d'un fichier existant (mise à jour), pas de
création d'une nouvelle version. Pointeur à la fin du
fichier. Fermeture:
Permet de supprimer le flux associé au fichier ouvert après avoir achever les transferts de
données survenus. La fermeture d’un fichier ouvert se fait par :
fclose(Pointeurfichier);
FcloseAll(); /* pour fermer tous les flux ouverts*/
Remarque : fopen renvoie l’adresse du flux s’il est créé si non elle renvoie NULL
197 A. EL Bourichi
Ecriture
Fichiers texte
Ecrire un caractère
Ecrit l’entier n, le pointeur avance du nombre de cases correspondant à la taille d'un
entier. Retourne n si l’écriture s’est bien passée sinon retourne EOF.
int putc(char c, FILE *Pointeurfichier);
Ecrit la valeur du caractère c à la position courante du pointeur , le pointeur avance
d'une case mémoire Retourne le caractère écrit sinon EOF en cas d’erreur.
int putw(int n, FILE *Pointeurfichier);
Ecrire un entier
Ecrire une chaîne de caractères
int fputs(char *S, FILE *Pointeurfichier);
Ecrit la chaîne de caractères S, le pointeur avance de la longueur de la chaîne
Retourne le dernier caractère écrit sinon retourne EOF en cas d’erreur.
Ecrire de données formatées
int fprintf(FILE *Pointeurfichier, char *format, liste d'expressions); 198 A. EL Bourichi
Ecrit des données formatées (caractère %c, entier %d, réel %f, chaîne %s), le pointeur
avance du nombre d’octets écrits. Retourne le nombre d’octets écrits ou EOF en cas
d’erreur. Fichiers binaire
int fwrite(void *p,int taille_bloc,int n,FILE *Pointeurfichier);
Ecrit à partir de la position courante du pointeur Pointeurfichier n blocs de taille
taille_bloc lus à partir de l'adresse p. Le pointeur Pointeurfichier avance d'autant d’octets
écrits. Retourne le nombre de blocs écrits.
Lecture
Fichiers texte
Lire un caractère
Renvoie l’entier situé à la position pointée par Pointeurfichier ou EOF en cas
d’erreur ou fin du fichier; le pointeur avance de la taille d'un entier
int getc(FILE *fichier);
int getw(FILE *Pointeurfichier);
Lire un entier
renvoie le caractère situé à la position pointée par Pointeurfichier ou EOF si erreur
ou fin de fichier; le pointeur avance d'un octet.
199 A. EL Bourichi
Lire une chaîne de caractères
char *fgets(char *S,int n,FILE *Pointeurfichier);
Lit n-1 caractères à partir de la position du pointeur et les range dans S en ajoutant
'\0'. Retourne NULL en cas d’erreur
Ecrire de données formatées
int fscanf(FILE *Pointeurfichier, char *format, liste d'adresses);
Lit des données depuis la position du pointeur PointeurFchier dans des variables
dont les adresses sont indiquées. Les données lues sont convertie en fnction des
format indiqués par format. La fonction retourne le nombre de champs lus.
Fichiers binaire
int fread(void *p,int taille_bloc,int n,FILE *Pointeurfichier);
lit à partir de la position courante du pointeur Pointeurfichier n blocs de taille
taille_bloc et les place dans l'adresse p. Le pointeur Pointeurfichier avance d'autant
d’octets lus. Retourne le nombre de blocs lus.
200 A. EL Bourichi
Fonction fseek
int fseek(FILE *fichier,long offset,int Mode);
déplace le pointeur de offset cases à partir en fonction de la valeur de Mode.
Valeurs possibles pour Mode sont :
SEEK_SET = 0 -> à partir du début du fichier.
SEEK_CUR =1 -> à partir de la position courante du pointeur.
SEEK_END =2 -> en arrière, à partir de la fin du fichier
Fonction rewind
void rewind(FILE *fichier);
Repositionne le fichier à son début.
Positionnement dans un fichier – Accès direct
Au cours de la manipulation d’un fichier, il existe toujours une position courante du
pointeur de lecture/écriture. Cette position représente le numéro de l’octet pointé. Elle est
modifiée suite à chaque opération de lecture/écriture. Elle est incrémentée du nombre
d’octets lus ou écrits.
Fonction ftell
long ftell(FILE *fichier);
Retourne la position courante par rapport au début du fichier 201 A. EL Bourichi
TP
Écrire un programme C qui fait la même chose que la commande Linux
cat fic1>>fic2
202 A. EL Bourichi
Chapitre 6 Gestion des E/S
203 A. EL Bourichi
Périphériques d’E/S
• Les périphériques d’E/S consistent: – du périphérique lui-même
– d’un contrôleur (avec des registres)
• Le contrôleur simplifie l’interface – tu demandes une piste
– le contrôleur convertis la demande en cylindre, secteur et tête
– le SE voit cette interface
• Le logiciel qui parle au contrôleur est un pilote de périphérique (Device Driver)
204 A. EL Bourichi
Pilotes de périphérique
• Comment est-ce qu’ils communiquent avec les périphériques?
– Ils écrivent dans la mémoire mappée aux registres du périphérique (memory mapped I/O) ne requiert aucune instructions spéciales
– Écrit aux ports mappées au registres (n’utilisent pas d’espace d’adresses mais ce mode requiert des instructions spéciales)
205 A. EL Bourichi
Pilotes de périphérique – Attente active (Busy Waiting)
• Quand est-ce que le pilote communique avec son périphérique?
– Attente active
• Le programme de l’usager fait un appel de système
• Le pilote est appelé par le noyau
• Le pilote boucle continuellement en interrogeant le périphérique pour savoir quand l’E/S est finit
• Désavantage: CPU complètement pris
206 A. EL Bourichi
Pilotes de périphérique – Interruptions
• Quand est-ce que le pilote communique avec son périphérique? – Interruptions
• Pilote démarre le contrôleur et demande une interruption quand l’E/S est terminé
• Le pilote retourne le contrôle au SE; le processus qui a demandé l’E/S bloque si il a absolument besoin des données
• Quand le contrôleur complète le travail, il génère une interruption
• Désavantage: Plus complexe
207 A. EL Bourichi
Pilotes de périphérique – Interruptions
1) Pilote écrit dans les registres du contrôleur. Le contrôleur démarre le périphérique.
2) Le contrôleur finit l’E/S et signal le contrôleur d’interruption par certaines lignes sur le bus
3) Quand le contrôleur d’interruption est prêt il lève une interruption sur une des pattes du CPU
4) Quand le CPU est prêt, le contrôleur d’interruption place le numéro du périphérique sur le bus
208 A. EL Bourichi
Pilotes de périphérique – Interruptions
• Le CPU passe en mode noyau
• L’adresse du gestionnaire d’interruption est déterminée – (Interrupt Vector)
• Le flux du programme change pour le gestionnaire des interruptions
• Quand le gestionnaire a finis, le flux normal du programme reprend.
209 A. EL Bourichi
Pilotes de périphérique - DMA
• Quand est-ce que le pilote communique avec son périphérique? – Accès Direct à la Mémoire (Direct Memory Access) (DMA)
• Une puce spéciale qui contrôle le flux d’information entre le RAM et les contrôleurs
• Configuré pour chaque transfert par le CPU avec un nombre d’octets, le numéro du périphérique, les adresses mémoire pour les données et la direction
• Quand le transfert est terminé la puce DMA signal une interruption comme décrit au paravent
• Désavantage: encore plus complexe, mais enlève du travail du CPU
210 A. EL Bourichi
Chapitre 7 Interblocages
211 A. EL Bourichi
212
Ressources
• Exemples de ressources – imprimantes
– graveur de CD-ROM
– fichiers
– tables internes du système
• L'ordre dans lequel les ressources sont attribuées est important
• Supposons qu'un processus possède une ressource A et demande une ressource B – au même moment un autre processus possède B et demande
A
– les deux sont bloqués de façon permanente A. EL Bourichi
213
Ressources (1)
• Un interblocage peut se produire lorsque… – les processus se voient attribuer un accès exclusif à des
ressources.
• Ressources retirables (préemptibles) – peuvent être retirées d'un processus sans effet négatif – ex. mémoire
• Ressources non retirables (non préemptibles) – peuvent causer des problèmes si retirées du processus – ex. graveur de CD
• En général les interblocages impliquent des ressources non retirables.
A. EL Bourichi
214
Ressources (2)
• Séquence d'événements nécessaires pour utiliser une ressource:
1. Solicitation de la ressource
2. Utilisation de la ressource
3. Libération de la ressource
• Doit attendre si l'accès est refusé: – le processus peut alors être bloqué
– ou un code d'erreur est retourné
A. EL Bourichi
215
Ressources (3)
Figure 1 : Utiliser un sémaphore pour protéger les ressources. (a) Une ressource. (b) Deux ressources typedef int semaphore; typedef int semaphore; semaphore resource_1; semaphore resource_1; semaphore resource_2; void process_A(void){ void process_A(void) { down(&resource_1); down(&resource_1); use_resource_1( ); down(&resource_2); up(&resource_1); use_both_resources( ); } up(&resource_2); up(&resource_1); } (a) (b)
A. EL Bourichi
216
Ressources (4) Figure 2 : (a) Code exempt d’interblocage. (b) Code contenant un interblocage potentiel typedef int semaphore; semaphore resource_1; semaphore resource_1; semaphore resource_2; semaphore resource_2; void process_A(void) { void process_A(void) { down(&resource_1); down(&resource_1); down(&resource_2); down(&resource_2); use_both_resources( ); use_both_resources( ); up(&resource_2); up(&resource_2); up(&resource_1); up(&resource_1); } } void process_B(void) { void proces_B(void) { down(&resource_1); down(&resource_2); down(&resource_2); down(&resource_1); use_both_resources( ); use_both_resources( ); up(&resource_2); up(&resource_1); up(&resource_1); up(&resource_2); } } (a) (b)
A. EL Bourichi
217
Introduction aux interblocages
• Définition formelle: Un ensemble de processus est en interblocage si chacun d'eux attend un événement qui ne peut être provoqué que par un autre processus de l'ensemble.
• L'événement attendu est habituellement la libération d'une ressource
• Aucun de ces processus ne peut … – s'exécuter
– libérer de ressources
– être réveillé
A. EL Bourichi
218
Les 4 conditions d'un interblocage 1. Condition d'exclusion mutuelle
• chaque ressource est soit attribuée à un seul processus, soit disponible
2. Condition de détention et d'attente • les processus ayant déjà obtenu des ressources peuvent
en demander des nouvelles.
3. Pas de réquisition • les ressources déjà détenues ne peuvent être retirées de
force à un processus
4. Condition d'attente circulaire • il doit y avoir un cycle d'au moins deux processus
• chacun attend une ressource détenue par un autre processus du cycle.
A. EL Bourichi
219
Modélisation des interblocages (1)
• Modélisation au moyen de graphes dirigés
– La ressource R est détenue par le processus A
– Le processus B attend après la ressource S
– Les processus C and D sont en interblocage
A. EL Bourichi
220 Ordonnancement provoquant un interblocage
Modélisation des interblocages (2)
A. EL Bourichi
221
Modélisation des interblocages (3)
Interblocage évité par un ordonnacement différent A. EL Bourichi
222
Stratégies de gestion des interblocages
1. Ignorer les problèmes (la politique de l’autruche)
2. Les détecter et y remédier
3. Les éviter de manière dynamique en allouant les ressources avec précaution
4. Les prévenir en empêchant l'apparition d'une des 4 conditions de leur existence.
A. EL Bourichi
223
La politique de l'autruche
• Ignorer le problème
• Raisonnable si
– les interblocages se produisent rarement
– le coût de la prévention est élevé
• UNIX et Windows utilisent cette approche
• Il existe un compromis entre
– ce qui est pratique
– ce qui est correct
A. EL Bourichi
224
Détection avec une seule ressource de chaque type
• Noter la détention et la demande en ressource
• cycle = interblocage
A. EL Bourichi
225
Détection avec plusieurs ressources de chaque type (1)
Structures de données utilisées par l'algorithme
A. EL Bourichi
226
Détection avec plusieurs ressources de chaque type (2)
Exemple de détection d'interblocage
Ressources existantes Ressources disponibles
A. EL Bourichi
227
Reprendre après un interblocage (1)
• Reprendre au moyen de la préemption – Prendre une ressource d'un autre processus
– dépend de la nature de la ressource
• Reprendre au moyen du "rollback" – enregistrer des points de reprise
– l'état du processus est sauvé pour être restauré ultérieurement
– reprendre le processus si un interblocage se produit
A. EL Bourichi
228
Reprendre après un interblocage (2)
• Reprendre au moyen de la suppression de processus
– rudimentaire mais simple
– Suspendre un processus pour libérer ses ressources
– les autres processus peuvent utiliser ses ressources
– choisir un processus pouvant être redémarré depuis le début (ex. compilation)
A. EL Bourichi
229
Évitement des interblocages Trajectoires des ressources
Exemple: 2 processus A. EL Bourichi
230
États sûr et non sûr
• On dit d'un état qu'il est sûr s'il n'est pas bloqué et qu'il existe un ordonnancement selon lequel chaque processus peut s'exécuter jusqu'au bout, même si tous demandent d'un seul coup leur nombre maximum de ressources.
A. EL Bourichi
231
États sûrs et non sûrs (1)
Démonstration que l'état de (a) est sûr
On suppose qu’il y a 10 ressources en tout.
A. EL Bourichi
232
États sûrs et non sûrs (2)
Démonstration que l'état de (b) n'est pas sûr
Si A demande et obtient une ressource supplémentaire (figure b) alors on est dans un état non sur
A. EL Bourichi
233
L'algorithme du banquier pour une ressource unique (Dijkstra 1965)
• 3 états d'allocation de ressource – (a) sûr – (b) sûr – (c) non sûr
A. EL Bourichi
234
L'algorithme du banquier pour plusieurs ressources
C R
A. EL Bourichi
235
L'algorithme du banquier pour plusieurs ressources
1. Rechercher une rangée R dont les demandes de ressources non satisfaites sont inférieur ou égales à A
2. Marquez le processus R comme achevé et ajouter toutes ses ressources au vecteur A
3. Recommencer les étapes 1 et 2 jusqu'à ce que tous les processus soient terminés (état sûr) où jusqu'à ce qu'un interblocage se produise (état non sûr).
• Si B demande un scanner, on ne peut le lui accorder
• Par contre, on peut servir D
• Si E en demande un aussi alors on ne peut pas lui accorder et il devra patienter.
A. EL Bourichi
236
Prévention des interblocages S'attaquer à la condition de l'exclusion mutuelle
• Certains périphériques (tel que l'imprimante) peuvent être spoolés (traités en différé) – seul le démon d'imprimante peut directement utiliser
l'imprimante
– cela élimine les interblocages
• Tous les périphériques ne peuvent être spoulés.
• Principe: – éviter d'attribuer une ressource lorsque cela n'est pas
absolument nécessaire
– le plus petit nombre possible de processus peuvent réclamer la ressource
A. EL Bourichi
237
S'attaquer à la condition de détention et d'attente
• Exige que les processus demandent toutes ses ressources avant l'exécution – le processus n'attend jamais après une ressource
• Problèmes – peut ignorer le nombre de ressources qu'il aura besoin
(sinon on pourrait utiliser l’algorithme du banquier)
– les ressources ne sont pas utilisées de manière optimale
• Variation: – un processus doit libérer toutes les ressources qu'il détient
– il obtient ensuite tout ce dont il a besoin en une seule fois
A. EL Bourichi
238
S'attaquer à la condition de non-préemption
• Cette option est difficilement réalisable
• Considérer un processus utilisant une imprimante
– au milieu de la tâche
– réquisitionner l'imprimante
– !!??
– Solution dans ce cas: utiliser
le disque et le
démon d’impression
A. EL Bourichi
239
S'attaquer à la condition de l'attente circulaire
• Ressources ordonnées numériquement
• Un processus peux demander plusieurs ressources mais il doit respecter l’ordre
• Dans l’exemple, si i<j alors – A peux demander i
– B ne peux pas demander i sans d’abord libérer j
• Le problème est qu’il est difficile de trouver un ordonnancement adéquat