Chapitre 1
Chapitre 1
Chapitre 1
Mokaddem
INTRODUCTION
Un système d’exploitation est un programme software offrant un environnement de
programmation dans lequel d’autres programmes peuvent s’exécuter et, d’une manière très
simple, prendre avantage du processeur et de ces organes d’entrée/sortie. Un autre fait
important est qu’un système n’est pas strictement nécessaire pour l’usage du hardware. Dans les
premiers âges de l’informatique, les programmeurs chargeaient directement leurs programmes
en mémoire via des pupitres dédiés. Ensuite, manuellement ils indiquèrent une adresse début et
ordonnèrent le processeur de s’y brancher. Cependant, les programmeurs modernes se sont
habitués, actuellement, à des facilités trop sophistiquées.
Actuellement, les systèmes modernes offrent deux services fondamentaux aux utilisateurs.
Premièrement, ils permettent un usage facile du hardware, en définissant et créant une machine
virtuelle qui diffère de marque, uniquement, de la machine réelle. Pour cette raison, le succès des
ordinateurs des deux dernières décades est dû aux systèmes d’exploitation qui ont su achever
une couverture de l’obscurité hardware. En plus, les programmeurs n’ont pas besoin de réécrire
leurs applications lorsqu’ils changent d’une machine à une autre. Deuxièmement, ils gèrent les
ressources, par partage, entre plusieurs utilisateurs. Une des plus importantes ressources est le
processeur. Un système multi-tâche divise la tâche à exécuter entre plusieurs processus et
procure pour chaque processus les ressources nécessaires pour son exécution, en particulier, la
mémoire et au moins un thread d’exécution. Le système exécute un thread pour une très courte
durée et passe ensuite au suivant permettant une équitable exécution des différents threads.
Même dans un système mono-utilisateur, le multi-tâche est extrêmement utile puisqu’il permet
l‘exécution d’au moins deux tâches à la fois. Par exemple, un utilisateur peut éditer un texte en
même temps où il imprime ou compile un second. Chaque processus se voit servi et, à l’œil de
l’utilisateur, les programmes semblent s’exécuter simultanément.
En plus du partage du processeur, le système gère la mémoire et régularise l’accès aux fichiers
et organes d’entrée/sortie. Les systèmes se distinguent les uns des autres selon la façon dont ils
présentent leurs machines virtuelles et leur gestion des ressources.
1
Systèmes d’exploitation M. Mokaddem
Ce chapitre discute comment les systèmes définissent la machine virtuelle et gèrent les
ressources.
La première section présente une définition détaillée des systèmes d’exploitation en
expliquant ces deux fonctions primordiales que chaque système assure. La seconde section
présente un historique qui relèvera l’évolution des systèmes à travers les âges. Une troisième
section décrira les principales structures des systèmes et met le point sur les appels systèmes
pour montrer comment a lieu l’exécution des commandes utilisateurs. En fin, une dernière
section décrit un exemple de système qui servira tout au long de ce cours de référence de base.
Cet exemple est typiquement éducatif et peut être réalisé sous forme de travail pratique par les
étudiants.
2
Systèmes d’exploitation M. Mokaddem
M0 M0 M0 niveau 0
M1 M1 M2 M1 niveau 1
M2 M2 M3 M4 niveau 2
M3 M3 M5 niveau 3
3
Systèmes d’exploitation M. Mokaddem
complexe à un niveau d’abstraction inférieur. Donc une opération de haut niveau se décompose
en plusieurs opérations de bas niveau.
D’autre part, plusieurs machines virtuelles (abstraites) peuvent être définies sur une même
machine pour des utilisateurs différents. De là, il apparaît la décomposition suivante fig.I.2 :
C
Cooom
C mpppiiilllaaattteeeuuurrr A
m Asssssseeem
A mbbbllleeeuuurrr E
m Edddiiittteeeuuurrrdddeeettteeexxxttteee...
E .. .. B
Baaassseeedddeeedddooonnnnnnéééeeesss
B
mee dd’’eexxppllooiittaattiioonn
SSyyssttèèm
L
Looggiicciieell ddee B
Baassee
M
Maacchhiinnee PPhhyyssiiqquuee
Un utilisateur est caractérisé par un logiciel d’application qui constitue son environnement
de travail. Tout utilisateur a son propre environnement.
Une partie commune à tous les utilisateurs appelée logiciel de base. Tout logiciel
d’application dépend de cette partie.
Les frontières entre ces couches ne sont pas définitives, il arrive parfois qu’un logiciel
d’application puisse être intégré au logiciel de base. Ce qui est la tâche du manager. Une
fonction du logiciel de base peut être câblée par besoin d’économie. Ce qui est la tâche du
concepteur.
A l’intérieur du logiciel de base, nous distinguons les outils et services
(compilateurs, éditeurs, utilitaires…) et le système d’exploitation lui-même, qui nous
intéresse le plus dans ce cours.
I.1.2 Fonctions d’un système d’exploitation
Cette partie du logiciel de base, en contact direct avec la machine remplit deux fonctions
essentielles.
I.1.2.1 Gestion des ressources
I.1.2.1.1 Ressources physiques
Processeurs centraux.
Mémoire principale.
Mémoire secondaire.
Organes d’E/S.
4
Systèmes d’exploitation M. Mokaddem
I.2 HISTORIQUE
Pour comprendre encore mieux les systèmes d’exploitation et ce qu’ils font, il faudrait voir
comment ils se sont développés au cours de cette dernière décennie. En suivant cette évolution,
on pourra identifier les éléments communs à ces systèmes et comprendre leur développement.
Comme les systèmes d’exploitation dépendent étroitement de l’architecture des
ordinateurs sur lesquels ils fonctionnent, on passera en revue les générations
d’ordinateurs pour en examiner les différents systèmes d’exploitation.
I.2.1 Première génération (1945-1955)
Les machines de cette génération étaient construites au moyen de tubes électroniques
A cette époque, un seul groupe de personne concevait, construisait, programmait, utilisait et
effectuait la maintenance de le machine. La programmation se faisait intégralement en langage
machine. Les systèmes d’exploitation étaient inconnus.
Chaque utilisateur se réservait l’usage de la machine pour un temps fini et disposait de toutes
ses ressources de la machine. A l’aide d’un pupitre, il communique son programme écrit en
binaire et lance son exécution.
5
Systèmes d’exploitation M. Mokaddem
6
Systèmes d’exploitation M. Mokaddem
Conséquence :
On doit lire plusieurs travaux avant le traitement.
On doit conserver un grand nombre de résultats à imprimer.
En voulant faire du transfert simultané, on a crée une accumulation d’information sous forme
de buffers d’E/S en MC.
La solution est de transporter les buffers en mémoire secondaire à grande capacité telle que
le débit de transfert soit un peu plus élevé que les périphériques lents. Ces transferts sont
généralement commandés par un canal.
Cette forme de traitement est appelée SPOOLING fig. I.3. Ce nom est acronyme pour
Simultaneous Peripheral Operation On Line. Le Spooling utilise essentiellement le disque
comme un buffer très grand pour lire sur les dispositifs d’entrée et mémoriser les fichiers de
sortie jusqu’à ce que les dispositifs de sortie puissent les accepter.
CPU
LECTEUR PRINTER
MC
DISQUE
Fig.1.3 Spooling
Inconvénients :
a- Lorsque le job en cours lit des données nécessaires à la suite de son exécution, le
processeur arrête et reste inactif pendant la durée de l’E/S.
b- Un travail bref arrivant pendant l’exécution d’un travail lent attend la fin de celui-ci.
La solution est qu’il faut songer à un système où :
a- Un job en attente d’exécution peut utiliser le CPU libéré par un job en attente
d’E/S.
b- Le CPU peut changer de programme avant la fin d’un programme en cours pour
satisfaire au temps de réponse.
7
Systèmes d’exploitation M. Mokaddem
Dans ces deux cas, le temps de réaffectation du CPU doit être bref par rapport au transfert de
la mémoire secondaire vers la mémoire centrale.
Donc il est nécessaire que plusieurs programmes coexistent en mémoire centrale.
I.2.3 Troisième génération (1965-1980)
Cette génération est caractérisée par la naissance des circuits intégrés et la
multiprogrammation. Des mémoires rapides et de grande capacité ont vu le jour et ont permis
de penser au partage de celles-ci entre plusieurs utilisateurs en même temps.
On dit qu’il y a multiprogrammation lorsque plusieurs programmes coexistent en mémoire et que
le déroulement de l’un peut être interrompu au profit d’un autre avec reprise ultérieure du
programme interrompu.
La solution qui en a résulté consiste à partitionner la mémoire. Chaque partition contient une
tâche différente. Lorsqu’une tâche attend la fin d’une E/S, une autre tâche peut utiliser le CPU.
Inconvénients :
Complexité du système : partage de la mémoire et protection des programmes entre eux en
mémoires centrale et secondaire.
a- Partage des ressources : équilibre de la charge du CPU, mémoire centrale et des
organes d’E/S.
b- Protection mémoire et réentrance.
La solution est donc la naissance du temps partagé. Le premier système à temps partagé est le
TCSS qui fut suivi après son succès par des travaux communs au MIT, les laboratoires Bells et
la General Electric pour donner naissance à MULTICS ( MULTiplexed Information and
Computing Service). Multics ne réussissait pas, mais de nombreuses idées furent introduites
dans la littérature informatique.
Cette génération est aussi caractérisée par le développement des mini-ordinateurs de la série
PDP 11 de la DEC où Ken Thompson travaillant déjà sur Multics, Brian Kernighan et Dennie
Ritchie améliorèrent une nouvelle de
Multics qu’ils baptisèrent UNIX (UNiplexed Information and computing service).
I.2.3.1 Principes du temps partagé
Allouer à chaque utilisateur une portion quanta de temps lui permettant de disposer de toutes
les ressources dont il a besoin. Ces tranches de temps sont de quelques millisecondes (ms).
A l’expiration du quantum de temps le programme est sauvegardé sur mémoire secondaire
s’il n’est pas complètement exécuté.
C’est un programme d’ordonnancement (Scheduling) particulier aux moniteurs d’emploi
partagé qui détermine l’utilisateur qui prend la machine ainsi que le quantum alloué.
8
Systèmes d’exploitation M. Mokaddem
Avantages :
Possibilités d’interaction directe d’un usager avec ses programmes (meilleure mise au point).
Existence de langages spéciaux adaptés au mode interactif
Naissance de langage de commande.
Les systèmes à temps partagés se distinguent par trois catégories
1. Mode Swapping
Le système travaille en temps partagé avec un programme en mémoire centrale seulement.
Le système se charge de partager les ressources entre les processus par des swapping de
processus. L’ensemble des processus est sur disque avec un seul processus uniquement en
mémoire. Dés qu’un processus est élu, le système le charge en mémoire en vidant le
précédent et lui attribue toutes les ressources nécessaires.
2. Multiprogrammation
Plusieurs processus sont en même temps en mémoire. Le système se charge de partager les
ressources entre ces processus.
3. Mixte
On affecte à chaque utilisateur un espace mémoire, si son programme, pendant son
exécution, a besoin de données ou fait appel à d’autres procédures (sous-programmes), le
système exécute des swappings à l’intérieur de son espace. Plusieurs programmes sont en
mémoire. A un certain état, le système se charge de vider, par swapping, certains programmes
pour les remplacer par d’autres par des critères de choix préalablement prédéfinis.
Cette génération fut aussi caractérisée par le développement des systèmes temps réel qui
sont une forme de systèmes d’exploitation spécialisés. Ils consistent à conduire des processus
industriels par un ordinateur. L’ordinateur fait lui-même des prélèvements de données dont il a
besoin (température, pression, etc.…) et agit directement sur les organes du processus
industriel. Les mesures sont enregistrées périodiquement, affichées sur un tableau de bord et
stockées pour des statistiques d’exploitation. L’ordinateur veille que les mesures prises soient
normales et ne dépassent pas un certain seuil. Sinon, il provoque l’arrêt du processus industriel.
Comme les pannes ou les défaillances sont aléatoires, le système doit rester en garde pour
éviter tout accident. On dit qu’il travaille en temps réel.
I.2.4. Quatrième génération (1980 – 1990)
Cette génération est caractérisée par les ordinateurs personnels, les réseaux et les systèmes
répartis.
I.2.4.1 Ordinateurs Personnels
L’électronique LSI (Large Scale Integration) et VLSI a permis la production d’une large
gamme de PC qui ne sont pas sensiblement différents de la PDP-11, mais encore moins chers.
Ces machines nécessitent des systèmes assez simples. Les dispositifs d’E/S ont radicalement
changé. Les pupitres et les lecteurs de cartes ont été remplacés par le clavier et la souris. Les
imprimantes ligne par ligne ont succombé aux écrans et aux petites imprimantes bon marché.
9
Systèmes d’exploitation M. Mokaddem
Les PCs sont apparus dans les années 1970 et comme leurs CPUs manquaient encore de
caractéristiques nécessaires pour la protection, leurs systèmes d’exploitation n’étaient ni multi-
utilisateurs ni multi-tâches. Et depuis, ces systèmes ont opté pour la commodité et la rapidité
d’où la naissance de CPM, MSDOS, OS/2, Xenix qui sont simples d’utilisation et ont
commencé à intégrer beaucoup de concepts d’Unix. Microsoft a étendu MSDOS pour inclure
un système de fenêtrage et IBM a intégré le multitâche et le système de fenêtrage a OS/2.
Ainsi, la baisse des prix de ces matériels augmentera notre besoin de comprendre les concepts
des systèmes d’exploitation qui commencent à envahir ces machines.
En même temps que les caractéristiques des grands systèmes d ‘exploitation étaient réduites
pour s’adapter aux PCs, on a développé également du matériel plus puissant, plus rapide et plus
sophistiqué. Les stations de travail comme les stations Sun, Appolo d’HP ou la RS/6000
d’IBM sont des résultats d’un tel effort. Actuellement, beaucoup d’universités et de sociétés
préfèrent utiliser un grand nombre de stations connectées en réseaux locaux. La ligne qui sépare
la station du PC tend à s’effacer dans l’avenir.
I.2.4.2 Les systèmes distribués
De tels systèmes possèdent plus d’un processeur en étroite communication partageant le bus
de l’ordinateur, l’horloge et quelquefois la mémoire et les périphériques. Il existe plusieurs
raisons pour créer de tels systèmes. En augmentant le nombre de processeurs, on espère
améliorer la capacité de traitement, c’est à dire, effectuer plus de travail en moins de temps. Un
autre avantage aussi considérable est la fiabilité. Si l’on peut distribuer correctement les
fonctions parmi les différents processeurs, une panne d’un processeur n’arrêtera pas le système
mais peut être le ralentira seulement. Les autres processeurs auront à effectuer les tâches du
processeur en panne jusqu’à son rétablissement. Ce mode de fonctionnement s’appelle le mode
dégradé.
Les systèmes multiprocesseurs actuels les plus courants utilisent le modèle de traitement
symétrique où chaque processeur exécute une copie du système d’exploitation. Au besoin, ces
copies communiquent entre elles. D’autres utilisent le traitement asymétrique où à chaque
processeur est assignée une tâche spécifique. Un processeur maître contrôle le système, les
autres attendent que le maître donnent des instructions. Le processeur maître alloue par
scheduling du travail aux processeurs esclaves. Dans de tels systèmes, les utilisateurs n’ont pas à
connaître où se trouvent leurs fichiers ou leurs programmes. Les systèmes distribués permettent
l’exécution simultanée et distribuée de plusieurs programmes sur plusieurs processeurs. Le
scheduling est complexe et doit optimiser le parallélisme. Il doit également se dérouler en cas
d’informations incomplètes ou fausses à cause des délais de communication.
I.2.4.3 les systèmes répartis
Les processeurs ne partagent pas de mémoire ni d’horloge. Au lieu de cela, chaque processeur
possède sa propre mémoire locale. Les processeurs communiquent à travers diverses lignes de
communication.
Dans un système réparti, les processeurs peuvent varier en taille et en fonction. Ils peuvent
inclure des PCs, des stations, des mini-ordinateurs et de grands systèmes à usage général. Ces
processeurs portent différentes appellations sites, nœuds, ordinateurs, etc. Dans un tel système,
les utilisateurs connaissent l’existence des différents sites, peuvent se connecter sur une
10
Systèmes d’exploitation M. Mokaddem
machine distante et transférer des fichiers d’une machine à une autre. Chaque ordinateur
fonctionne avec son propre système et au compte d’un utilisateur particulier.
Les raisons pour construire des systèmes répartis sont le partage des ressources, l’accélération
du calcul, la fiabilité et la communication.
PPrrooggrraam
mmmeess dd’’aapppplliiccaattiioonn
PPrrooggrraam
mmmeess ssyyssttèèm
meess rrééssiiddeennttss
D
Drriivveerrss M
MSSD
DOOSS
D
Drriivveerrss B
BIIO
OSS
11
Systèmes d’exploitation M. Mokaddem
Les premiers systèmes Unix sont également un second exemple de structure limitée. Il est
constitué de deux parties : le noyau et les programmes systèmes. Le noyau est composé d’une
série d’interface et de drivers qui ont été ajoutés et améliorés au fil du temps et au fur et à
mesure de l’évolution d’Unix. Le système est présenté à la fig. I.5. Le noyau est constitué par
tout ce qui se trouve en dessous de l’interface d’appels système et au-dessus du matériel. Le
noyau fournit le scheduling du CPU, la gestion de la mémoire, le système de fichiers, et d’autres
fonctions grâce aux appels système.
LLeess uuttiilliissaatteeuurrss
Le système analyse les paramètres et sélectionne le service demandé dans une table. 2
Le système identifie et exécute la primitive. 3
Le contrôle est donné au programme utilisateur provoquant l’appel 4
12
Systèmes d’exploitation M. Mokaddem
PPrrooggrraam
mmmee uuttiilliissaatteeuurr nn
..
..
..
PPrrooggrraam
mmmee uuttiilliissaatteeuurr 11
4
1
T
Taabbllee ddeess
pprriim
miittiivveess
ssyyssttèèm
mee 3
2
Exécution
13
Systèmes d’exploitation M. Mokaddem
C
Coouucchhee 55 PPrrooggrraammm meess uuttiilliissaatteeuurr
C
Coouucchhee 44 G
Geessttiioonn ddeess EE//SS
C
Coouucchhee 33 CCoommm muunniiccaattiioonn ooppéérraatteeuurr -- pprroocceessssuuss
C
Coouucchhee 22 GGeessttiioonn ddee llaa m
méém mooiirree
C
Coouucchhee 11 SScchheedduulliinngg dduu C CPPU U eett m muullttiipprrooggrraammm maattiioonn
C
Coouucchhee 00 M
Maacchhiinnee
Fig. I.7 Structure en couches du système THE
SSoouuss ssyyssttèèm
mee SSoouuss ssyyssttèèm
mee SSoouuss ssyyssttèèm
mee
Noyau du système
G Geessttiioonn mméém mooiirree
D Diissppaattcchhiinngg ddee ttââcchheess
GGeessttiioonn ddeess ppéérriipphhéérriiqquueess
SSyysstteem
m SSeerrvviicceess
FFiillee SSyysstteem
m
M
Meem
moorryy aanndd II//O
ODDeevviiccee M
Maannaaggeem
meenntt
PPrroocceessssoorr SScchheedduulliinngg
H
HAAR
RDDW
WAAR
REE
I.3.2.1 Principes
Dans le cas du système THE, le noyau répond aux interruptions par traitement direct de ces
dernières. Les interruptions sont autorisées durant le traitement d’une requête antécédente.
La première couche gère le processeur et la synchronisation de l’ensemble des processus via le
système d’interruption (multiprogrammation). La deuxième couche se charge de gérer la
mémoire entre les différents processus, elle alloue l’espace nécessaire aux processus. Chaque
processus dispose d’un espace sur disque et d’un espace en mémoire. La couche trois est
chargée d’associer à chaque processus un terminal. La couche quatre gère les E/S par l’usage de
buffers. Les processus écrivent et lisent les buffers que cette couche est chargée de
communiquer aux périphériques. La couche cinq regroupe les processus utilisateurs. La fig.I.9
est un autre exemple du principe de système en couches. MULTICS est une généralisation de
cette approche.
I.3.3 Machines virtuelles
Conceptuellement, un système est composé de couches. Le matériel constitue toujours la
première couche. L’approche en couches a abouti à sa conclusion logique dans le concept de
machines virtuelles. La fig.I.10 montre une telle structure. Le noyau se charge de la
multiprogrammation et fournit plusieurs machines virtuelles. Ces machines sont des modèles
logiques de la machine réelle. Chaque machine virtuelle exécute n’importe quel système
d’exploitation. Il serait préférable d’utiliser des systèmes mono-utilisateurs tels que MSDOS.
IBM, le pionnier de ce domaine, appelle ces machines des CMS (Conversational Monitor
System). Java : les programmes compilés en Java tournent sur une machine virtuelle (JVM).
Le concept de machines virtuelles possède plusieurs avantages. Les diverses ressources du
système sont totalement protégées. Chaque machine virtuelle est entièrement isolée des autres,
il n’existe pas de problème de sécurité. Il n’y a aucun partage direct des ressources. Il est
possible de définir un réseau de machines virtuelles communiquant entre elles.
I.3.3.1 Principes
Lors d’un appel système, ce dernier se trouve au niveau de sa machine virtuelle (CMS). La
machine virtuelle essaie de répondre à l’appel par l’exécution du service approprié en
demandant la machine réelle au noyau. Le noyau réalise un scheduling de machines virtuelles
selon un algorithme approprié et alloue la machine réelle à la machine virtuelle qui exécute alors
l’appel et redonne la main à l’utilisateur. L’appel est traité selon de système exécuté le type par la
machine virtuelle.
I.3.4 Client/serveur
L’idée est de décomposer le système en un ensemble de processus clients et serveurs, chacun
des processus serveurs implémentant un ensemble de services, par exemple les services de
gestion de la mémoire, des processus ou du scheduling. Chaque serveur tourne en mode
utilisateur, exécutant une boucle qui vérifie toujours s’il y a des requêtes de services des clients.
Le client qui peut être un autre composant (serveur) du système d’exploitation ou une
application utilisateur exprime ses requêtes de services par envoi de messages aux serveurs. Un
noyau tournant en mode kernel gère (la communication) le transfert des messages entre les
différents éléments (clients et serveurs).
15
Systèmes d’exploitation M. Mokaddem
U
Usseerr 11 U
Usseerr 22 U
Usseerr 33 U
Usseerr 44
Noyau
M
Muullttiipprrooggrraam
mmmaattiioonn
G
Geessttiioonn ddeess m
meessssaaggeess
Matériel
NO
N OY
YAAU
U
MATERIEL
16
Systèmes d’exploitation M. Mokaddem
I.3.4.1 Principes
Le principe est très simple. Les clients et les serveurs demandent des services par envoi de
messages. Tous les messages transitent par le noyau, ce qui peut conduire à un goulot
d’étranglement lors d’une intensification de communication. Le noyau identifie la destination,
note l’expéditeur et supervise le transfert. Si le message n’aboutit pas le noyau se charge de
résoudre le problème en régénérant le message à nouveau. Le noyau se base sur le système
d’interruption pour gérer la communication.
I.3.5 Modèle hybride
Ce modèle est une combinaison des modèles précédents. Il se base surtout sur le modèle à
couches et sur le modèle client/serveur. Le système se décompose généralement en une couche
d’abstraction du hardware ce qui constitue la machine virtuelle, d’un noyau et d’un exécutif. Le
noyau implémente les fonctions de bas niveau tout comme le noyau du modèle client/serveur.
Il comprend le scheduling des threads, la gestion des interruptions et la synchronisation
multiprocesseur. Il comprend également un ensemble de routines et d’objets de base
nécessaire à l’exécutif. La machine virtuelle (une DLL Dynamic Link Library ) protège le noyau
des spécificités hardware, elle manipule directement le hardware. L’exécutif est décomposé en
un ensemble de serveurs et de clients offrant la gestion de la mémoire virtuelle, la gestion des
processus, la gestion des E/S, la sécurité et bien d’autres choses.
SSyysstteem
mCCaallllss
KERNEL
H
Haarrddw
waarree A
Abbssttrraaccttiioonn
LLaayyeerr
HARDWARE
Fig.I.12 Windows NT, un modèle hybride
17
Systèmes d’exploitation M. Mokaddem
La fig.I.12 présente le système windows NT, un exemple de modèle hybride tel que décrit par
ses concepteurs. Les composants du système windows NT sont :
Object Manager : crée, manipule et détruit les objets de l’exécutif représentant les
ressources système.
Security reference monitor : renforce la sécurité de la machine locale et surveille les
ressources système en protégeant dynamiquement les objets système.
Process Manager : crée et termine les processus et les threads. Il suspend et reprend
l’exécution des threads assurant la gestion des processus.
Local Procedure Call (LPC) : passe les messages entre clients et serveurs sur le
même site. C’est une forme flexible du RPC. Un standard de la communication
locale.
Virtual Memory Manager : implémente la mémoire virtuelle, un schéma de gestion
de la mémoire offrant un espace pour chaque processus, suffisamment large pour
son exécution. Il assure la protection mémoire des processus et du système. Et
enfin gère le swapping entre le disque et la mémoire.
Kernel : répond aux interruptions et assure le scheduling et la synchronisation des
threads sur une architecture multiprocesseur.
I/O System : contient un ensemble de composants responsables des E/S.
18
Systèmes d’exploitation M. Mokaddem
Processus :
Arrêter (end), stopper un processus (abort)
Charger (load), exécuter un processus (execute)
Créer (fork), terminer (exit)
Obtenir (get, set process attib), définir des attributs
Attendre un certain temps (wait time)
Attendre, signaler des événements ( wait, signal )
Allouer, libérer la mémoire (alloc, dealloc)
Fichiers :
I/O :
demander, libérer des périphériques (request, release)
obtenir, définir des attributs de périphériques (get, set)
attacher, détacher attach, detach)
information :
communication :
19
Systèmes d’exploitation M. Mokaddem
Le mode utilisateur (esclave) : pour les programmes des utilisateurs et les utilitaires, où
certaines instructions ne sont pas permises.
Ces modes de fonctionnement assurent la protection du système d'exploitation contre les
intrusions et les erreurs. Ce n'est pas le cas des systèmes mono-utilisateur comme MS-DOS ou
MacOS qui ont un seul mode de fonctionnement : le mode utilisateur. Ils ne sont pas protégés
et donc peu fiables. Un appel système consiste en une interruption logicielle (instruction
TRAP) qui a pour rôle d'activer le système d'exploitation. Il a pour but : changer de mode
d'exécution pour passer du mode utilisateur au mode maître, récupérer les paramètres et vérifier
la validité de l'appel, de lancer l'exécution de la fonction demandée, de récupérer la (les)
valeur(s) de retour et de retourner au programme appelant avec retour au mode utilisateur.
I.1.3.6.1 Les processus
Un processus est un programme en cours d'exécution. Il est composé d'un programme
exécutable (code), un compteur ordinal (co), un ensemble de données, une pile d'exécution
et autres registres et informations nécessaires à l'exécution. Les appels systèmes permettent
notamment la création et l'arrêt des processus. Un processus peut créer un ou plusieurs
processus fils qui, à leur tour, peuvent créer des processus fils dans une structure arborescente.
Les processus peuvent se synchroniser et communiquer entre eux. Actuellement, on utilise de
plus en plus le concept de processus légers (on parlera des processus et des processus légers
dans le Chapitre III). Les processus légers sont un moyen de raffiner et de diviser le travail
normalement associé à un processus. Lorsqu'on lance une application, le processus qui est créé
par le système d'exploitation exécute les instructions du programme en mode utilisateur.
À certains moments, on fait des appels système qui requièrent l'exécution d'instructions (et
l'accès à des données) qui appartiennent au système d'exploitation. Pour ce faire, le même
processus passe alors au mode superviseur. Il est à noter qu'il s'agit bien du même processus,
même s'il exécute des instructions du système d'exploitation. On peut considérer que des
routines du système d'exploitation sont exécutées au nom du processsus en question. La figure
1.7 illustre ce principe. La figure 1.8 illustre de manière plus détaillée ce qui se produit
typiquement lors d'un appel système. Dans cet exemple, une application exécute fork(). Il s'agit
ici d'une fonction d'une librairie qui a été compilée avec l'application. Cette fonction prépare le
terrain pour exécuter le véritable appel système, c'est-à-dire une instruction assembleur TRAP
qui prend comme paramètre un pointeur dont la valeur est ici indiquée par SYS_FORK.
Essentiellement, cette instruction met d'abord le processeur en mode superviseur, puis cherche
dans une table (qui a été créé lors du chargement du système d'exploitation), à la position
indiquée par SYS_FORK, l'adresse de la routine qui doit être exécutée. Puis le compteur
ordinal se positionne à cette adresse et continue l'exécution du processus, cette fois-ci avec des
instructions qui appartiennent au système d'exploitation. Lorsque le service demandé est
terminé, on revient à l'application, tout en rétablissant le mode utilisateur.
20
Systèmes d’exploitation M. Mokaddem
fork() {
…………. ……..
//mise à jour des registres Return ;
Trap SYS_FORK }
Librairie ………………
} sys_fork()
NOYAU
Fig.I.14 . Étapes d'un appel système
I.1.3.6.2 Les fichiers
Un fichier est un ensemble de données enregistrées de façon à être lues et traitées par
ordinateur. Les fichiers peuvent être regroupés dans des répertoires. Un répertoire peut
contenir soit des fichiers, soit d'autres répertoires dans une structure arborescente. L'accès aux
fichiers se fait en spécifiant un chemin d'accès, c'est-à-dire la liste des répertoires à traverser
pour accéder au fichier. Un chemin d'accès est absolu si le point de départ est le répertoire
racine. Un chemin d'accès est relatif si le point de départ est le répertoire courant. Les appels
système permettent de créer les fichiers et les répertoires, ainsi que de les supprimer, de les
ouvrir, de les lire et de les modifier.
21
Systèmes d’exploitation M. Mokaddem
22
Systèmes d’exploitation M. Mokaddem
créer les disquettes en utilisant la commande « dd», ou un script fourni par le vendeur. Lisez la
page de man sur dd(1) et demandez de l'aide aux gourous UNIX de votre entourage.
Le CD-ROM lui-même. Le but de la disquette « boot » est de préparer votre machine au
chargement des disquettes « root » ou d'installation, qui ne sont elles-mêmes que des moyens
pour préparer votre disque dur et copier dessus des parties du CD-ROM.
I.4.3 L'installation en détail
I.4.3.1 Se préparer pour l'installation
Linux utilise les composants d'un PC plus efficacement que MS-DOS, Windows ou NT, et est
donc moins tolérant vis à vis des matériels mal configurés. Il y a un minimum de choses à faire
avant de commencer pour diminuer les risques d'être arrêté par ce genre de problèmes.
D'abord, récupérez toutes les documentations que vous possédez sur votre matériel -- carte
mère, carte vidéo, écran, modem, etc. -- et gardez-les à portée de main.
Puis, rassemblez les informations détaillées sur votre configuration matérielle. Une façon de
réaliser cela facilement, si vous disposez de MS-DOS 5.0 ou supérieur, est d'imprimer un
rapport en utilisant l'utilitaire de diagnostic « msd.exe » de Microsoft (vous pouvez ignorer les
parties concernant les programmes résidents, la carte mémoire, les chaînes d'environnement et
la version du système). Entre autres choses, ceci vous garantit une information complète et
correcte sur votre carte graphique et le type de votre souris, ce qui sera utile lors de la
configuration de X.
Enfin, vérifiez votre machine pour les problèmes de configuration avec du matériel reconnu qui
pourrait causer un bloquage irrécupérable pendant l'installation de Linux.
Un système DOS/Windows peut utiliser un (des) disque(s) dur(s) et un CD-ROM IDE même
si les jumpers maître/esclave ne sont pas correctement positionnés sur ces disques. Linux ne
fonctionne pas ainsi. En cas de doute, vérifiez vos jumpers maître/esclave !
Est-ce que l'un de vos périphériques ne possède ni jumper, ni mémoire de configuration non
volatile ? Si c'est le cas, vous pouvez avoir besoin d'une initialisation au démarrage via un
utilitaire MS-DOS pour démarrer, et il peut être difficilement accessible par Linux. Les CD-
ROMs, les cartes sons, les cartes Ethernet et les lecteurs de bande de bas de gamme peuvent
avoir ce problème. Vous pourrez peut-être contourner le problème au moyen de paramètres
donnés à l'invite du démarrage.
Certains systèmes d'exploitation permettent à une souris de type bus de partager une IRQ avec
d'autres dispositifs. Linux ne le permet pas ; en fait, ce genre de choses peut entraîner le
bloquage de votre machine.
Si possible, récupérez le numéro de téléphone d'un utilisateur Linux expérimenté que vous
pourrez appeler en cas d'urgence. Neuf fois sur dix vous n'en n'aurez pas besoin, mais c'est
rassurant de l'avoir.
Évaluez le temps nécessaire à l'installation. Il sera d'à peu près une heure sur un système vierge
ou converti en tout Linux, ou jusqu'à trois heures pour un système « dual-boot » (ceux-ci ont un
taux de mauvais démarrage et de plantage bien plus élevé).
23
Systèmes d’exploitation M. Mokaddem
24
Systèmes d’exploitation M. Mokaddem
Vous n'avez pas besoin de faire tourner Linux ou MS-DOS pour installer Linux. Cependant,
cela facilite la création des disquettes de « boot » et de « root » à partir de votre CD-ROM. Si
vous n'avez pas de système d'exploitation installé sur votre machine, vous pouvez utiliser le
Linux ou le MS-DOS de quelqu'un d'autre juste pour créer les disquettes, et installer à partir de
là.
I.4.3.3 Repartitionner les disques DOS/Windows
Sur beaucoup de systèmes, le disque dur est déjà consacré à des partitions MS-DOS, OS/2, etc.
Vous devez modifier la taille de ces partitions pour faire de la place à Linux. Si vous comptez
avoir un système « dual boot », il vous est vivement conseillé de lire un, ou plusieurs, des mini-
HOWTOs qui décrivent certaines configurations « dual boot ». Même s'ils ne sont pas
directement applicables à votre système, ils vous aideront à comprendre tout ce qui est mis en
jeu.
REMARQUE : Certains Linux peuvent s'installer DANS un répertoire de votre partition MS-
DOS. (Ce qui n'est pas la même chose qu'installer Linux À PARTIR d'une partition MS-DOS).
Vous utiliserez alors le système de fichiers « UMSDOS » qui vous permet de traiter un
répertoire de votre partition MS-DOS comme un système de fichiers Linux. Vous n'aurez donc
pas besoin de repartitionner votre disque dur.
Je ne recommande cette méthode que dans le cas où votre disque a déjà quatre partitions (c'est
le maximum pour DOS) et qu'un repartionnement serait problématique (il ralentirait Linux à
cause du surcoût engendré par la traduction des noms de fichiers). Une autre raison d'utiliser
UMSDOS est que cela permet d'essayer Linux avant de repartitionner. Cependant, dans la
majeure partie des cas, vous devrez repartitionner votre disque comme cela est décrit ici. Si
vous avez l'intention d'utiliser UMSDOS, vous devrez vous débrouiller par vous-même -- ce
type d'installation n'est pas décrit ici. A partir de maintenant, nous considérons que vous
n'utilisez pas UMSDOS, et que vous devez repartitionner votre disque dur.
Une partition est simplement une section du disque dur, réservée pour un système d'exploitation
particulier. Si vous n'avez que MS-DOS installé, votre disque dur n'a probablement qu'une
seule partition qui lui est entièrement consacrée. Pour utiliser Linux, il faut repartitionner le
disque afin d'avoir une partition pour MS-DOS, et une (ou plusieurs) pour Linux.
Il y a trois types de partitions : primaire, étendue, et logique. Sans entrer dans les détails, les
partitions primaires correspondent aux quatre partitions principales de votre disque. Cependant,
si vous désirez avoir plus de quatre partitions par disque, vous devez créer une partition
étendue qui peut contenir plusieurs partitions logiques. On ne stocke pas les données
directement sur une partition étendue -- celle-ci ne sert qu'à contenir les partitions logiques. Les
données ne sont stockées que sur des partitions primaires ou logiques.
Autrement dit, la plupart des gens n'utilisent que des partitions primaires. Cependant, si vous
avez besoin de plus de quatre partitions sur un disque, vous devrez créer une partition étendue.
Les partitions logiques seront ensuite créées dans la partition étendue et vous aurez alors plus
de quatre partitions par disque.
Notez aussi que vous pouvez facilement installer Linux sur le second disque de votre machine
(D: sous MS-DOS). Il suffit de préciser le nom du périphérique approprié lors de la création
des partitions Linux. Ceci est décrit en détail plus loin.
25
Systèmes d’exploitation M. Mokaddem
26
Systèmes d’exploitation M. Mokaddem
27
Systèmes d’exploitation M. Mokaddem
problèmes avec les disques SCSI qui ont généralement leur propre BIOS disque. Pour les
détails techniques, consultez le Large Disk Mini-HOWTO.
Remarque #2 : Vous mélangez les disques IDE et SCSI ? Alors attention. Votre BIOS ne
vous permettra peut-être pas de démarrer directement à partir d'un disque SCSI.
Taille des partitions
A côté de vos partitions racine et de swap, vous créerez une ou plusieurs partitions pour y
mettre vos programmes et les répertoires d'accueil des utilisateurs.
Bien, qu'en théorie, vous puissiez tout faire marcher avec une seule grosse partition, presque
personne ne le fait. Disposer de plusieurs partitions a de nombreux avantages : souvent, cela
diminue le temps nécessaire aux vérifications des systèmes de fichiers qui sont effectuées au
démarrage ; les fichiers ne peuvent grandir au delà des frontières de partitions. En conséquence,
vous pouvez utiliser ces frontières de partition comme des protections contre les programmes
(comme les news Usenet) qui voudraient consommer d'énormes quantités de disque, afin de les
empêcher de surpeupler l'espace disque nécessaire à votre noyau et au reste de vos applications
; si jamais vous avez un problème sur votre disque, formater et récupérer une seule partition est
une opération moins pénible que d'avoir à tout refaire en partant de zéro.
Sur les disques actuels, une bonne configuration de base consiste en une petite partition racine
(moins de 80 Mo), une partition /usr moyenne (environ jusqu'à 300 Mo) pour contenir les
logiciels systèmes, et une partition /home occupant le reste de l'espace disque disponible pour les
répertoires utilisateurs.
Vous pouvez faire des choses plus élaborées. Par exemple, si vous savez que vous allez utiliser
les forums Usenet, vous pouvez leur attribuer une partition qui leur sera dédiée afin de
contrôler leur occupation disque maximale, ou créer une partition /var regroupant les fichiers
du courrier, des news, et les fichiers temporaires. Mais, à l'heure des disques de très grandes
capacités et très peu chers, ces complications semblent de moins en moins nécessaires pour les
premières installations Linux. Pour votre premier essai, surtout, restez simple.
I.4.3.5 Démarrer la disquette d'installation
La première étape consiste à lancer la disquette de boot que vous avez créée. Normalement,
tout devrait se passer sans problème ; le prompt de démarrage du noyau devrait se terminer
automatiquement après 10 secondes. Normalement, c'est ainsi que vous démarrerez à partir
d'un disque IDE.
En donnant certaines options à la suite du nom du noyau, vous pouvez préciser différents
paramètres matériels, comme l'IRQ et l'adresse de votre contrôleur SCSI, ou la géométrie du
disque, avant de lancer le noyau Linux. Ce sera peut-être nécessaire si Linux ne détecte pas
votre contrôleur SCSI ou la géométrie de votre disque, par exemple.
Notamment, de nombreux contrôleurs SCSI nécessitent de spécifier l'adresse du port et l'IRQ
au moment du démarrage. De même, les machines PS/1, ThinkPad, et ValuePoint d'IBM ne
mémorisent pas la géométrie des disques dans la CMOS, et vous devrez alors la spécifier au
démarrage. (Plus tard, vous saurez configurer votre système afin qu'il fournisse lui-même ces
paramètres.)
28
Systèmes d’exploitation M. Mokaddem
Faites attention aux messages qui s'affichent lors du démarrage du système. Ils énumèreront et
décriront le matériel que votre installation Linux a détecté. Notamment, si vous avez un
contrôleur SCSI, vous devriez voir une liste des hôtes SCSI détectés. Si vous voyez le message :
SCSI: 0 hosts
Cela veut dire que votre contrôleur SCSI n'a pas été reconnu, et que vous devez vous poser la
question de savoir comment informer le noyau de son emplacement.
Le système affichera aussi des informations sur les partitions et les périphériques détectés. Si
l'une de ces informations n'est pas correcte, ou manque, vous devrez provoquer une détection
du matériel. Si tout va bien et que votre matériel semble avoir été reconnu, vous pouvez passer
à la section suivante, « Utiliser la disquette root ». Pour forcer la détection de votre matériel,
vous devez entrer les paramètres corrects au prompt du démarrage en utilisant la syntaxe
suivante :
linux <paramètres...>
Un bon nombre de paramètres sont disponibles ; nous donnons ci-dessous la liste des plus
courants. Les disquettes de boot Linux récentes vous permettront, le plus souvent, de consulter
un écran d'aide décrivant ceux-ci avant de démarrer.
hd=cylindres,têtes,secteurs Précise la géométrie du disque dur. Nécessaire pour des machines
comme le PS/1, ValuePoint, et ThinkPad d'IBM. Par exemple, si votre disque dur a 683
cylindres, 16 têtes et 32 secteurs par piste, entrez :
linux hd=683,16,32
tmc8xx=memaddr,irq Précise l'adresse et l'IRQ pour les contrôleurs SCSI TMC-8xx de Future
Domain. Par exemple :
linux tmc8xx=0xca000,5
Notez que le préfixe 0x doit être utilisé pour les valeurs exprimées en hexadécimal. Ceci est vrai
pour toutes les options suivantes.
st0x=memaddr,irq Précise l'adresse et l'IRQ pour les contrôleurs STO2 de Seagate.
t128=memaddr,irq Précise l'adresse et l'IRQ pour les contrôleurs T128B de Trantor.
ncr5380=port,irq,dma Précise le port, l'IRQ, et le canal DMA pour les contôleurs NCR5380
génériques.
aha152x=port,irq,scsi_id,1 Précise le port, l'IRQ et l'identificateur SCSI pour les contrôleurs AIC-
6260. Ceci s'applique aux contrôleurs Adaptec 1510, 152x, et Soundblaster-SCSI.
Si vous avez des questions sur ces options de démarrage, lisez le SCSI HOWTO, disponible sur
tous les sites archives FTP Linux.
I.4.3.6 Utiliser la disquette root
29
Systèmes d’exploitation M. Mokaddem
Après le démarrage de la disquette de boot, vous serez invité à insérer la ou les disquettes root.
Ôtez la disquette de boot du lecteur, insérez la disquette root, puis tapez Entrée pour continuer.
Éventuellement, une deuxième disquette root vous sera demandée.
Ce qui se passe, en fait, c'est que la disquette boot fournit un mini-système d'exploitation qui
(parce que le disque dur n'est pas préparé) utilise une partie de la RAM comme un disque
virtuel (appelé, assez logiquement, un « ramdisk »).
Les disquettes root chargent sur le ramdisk un petit nombre de fichiers et d'outils d'installation
que vous utiliserez pour préparer votre disque dur et installer Linux dessus à partir de votre
CD-ROM.
Choisir une installation EGA ou X
Cette étape réalisée, les anciens Linux (dont la Slackware) lançaient un shell et vous
demandaient d'entrer manuellement les commandes d'installation dans un ordre déterminé.
Ceci est encore possible, mais les versions plus récentes démarrent en lançant un programme
d'installation fenêtré qui vous guide de façon interactive à travers ces étapes en vous fournissant
un maximum d'aide.
Vous aurez sûrement la possibilité de configurer X, ainsi le programme d'installation pourra
être graphique. Si vous choisissez cette façon de faire, le programme d'installation vous
questionnera sur votre souris et votre type d'écran avant de commencer l'installation
proprement dite. Lorsque l'installation de Linux aura été réalisée, cette configuration sera
sauvegardée. Vous pourrez affiner le fonctionnement de votre écran plus tard, par conséquent,
lors de cette étape, vous pouvez commencer avec un mode SVGA 640x480 de base.
X n'est pas nécessaire pour l'installation, mais (en supposant que l'on sache configurer la souris
et l'écran), beaucoup de gens trouvent l'interface graphique plus facile à utiliser. De toutes
façons, vous serez amenés à installer X, donc le faire dès le début est une chose plutôt sensée.
Suivez simplement les indications du programme. Elles vous guideront à travers les étapes
nécessaires à la préparation du disque, à la création des comptes utilisateurs et à l'installation des
paquetages à partir du CD-ROM.
Dans les sections suivantes, nous décrirons quelques parties épineuses de l'installation comme
si vous les réalisiez à la main. Ceci devrait vous aider à comprendre ce que fait le programme
d'installation, et pourquoi.
Utiliser fdisk et cfdisk
Votre première étape d'installation, une fois que la disquette root Linux a été lancée, sera de
créer ou d'éditer les tables de partitions de vos disques. Même si vous avez déjà utilisé FDISK
pour configurer vos partitions, vous devez revenir à la table des partitions et rajouter des
informations spécifiques à Linux. Pour créer ou éditer des partitions Linux, nous utiliserons la
version Linux du programme fdisk, ou sa version orientée écran cfdisk.
En général, le programme d'installation recherchera une table des partitions déjà existante et
proposera de lancer fdisk ou cfdisk sur elle pour vous. Des deux programmes, cfdisk est
30
Systèmes d’exploitation M. Mokaddem
vraiment le plus facile à utiliser, mais ses versions actuelles sont aussi moins tolérantes vis à vis
d'une table de partitions inexistante ou mal faite.
Par conséquent, vous pouvez (surtout si vous faites une installation sur du matériel vierge)
devoir commencer avec fdisk afin de vous placer dans une situation que cfdisk saura gérer.
Essayez de lancer cfdisk ; s'il y a des problèmes, lancez fdisk. (Une bonne façon de procéder, si
vous créez un système tout Linux et que cfdisk provoque des erreurs, est d'utiliser fdisk pour
détruire toutes les partitions existantes et de relancer cfdisk pour éditer la table vide.)
Quelques remarques sur fdisk et cfdisk : les deux programmes prennent en paramètre le nom
du disque sur lequel vous souhaitez créer les partitions Linux. Les noms des pilotes de disques
durs sont :
/dev/hda Premier disque IDE
/dev/hdb Second disque IDE
/dev/sda Premier disque SCSI
/dev/sdb Second disque SCSI
Par exemple, pour créer des partitions Linux sur le premier disque dur SCSI de votre système,
utilisez la commande (votre programme d'installation peut la générer à partir d'un choix du
menu) :
cfdisk /dev/sda
Si vous utilisez fdisk ou cfdisk sans paramètre, /dev/hda est pris par défaut.
Pour créer des partitions Linux sur le second disque de votre système, spécifiez simplement soit
/dev/hdb (pour un disque IDE), soit /dev/sdb (pour un disque SCSI) au moment de lancer fdisk.
Vos partitions Linux n'ont pas besoin d'être toutes sur le même disque. Par exemple, vous
pouvez créer la partition du système de fichier racine sur /dev/hda et votre partition de swap sur
/dev/hdb. Pour ce faire, lancez simplement fdisk ou cfdisk une seule fois pour chaque disque.
Sous Linux, les partitions ont un nom basé sur le disque auquel elles appartiennent. Par
exemple, la première partition du disque /dev/hda s'appelle /dev/hda1, la seconde /dev/hda2, et
ainsi de suite. Si vous avez des partitions logiques, elles sont numérotées en partant de
/dev/hda5, /dev/hda6 etc.
REMARQUE : Il est préférable de ne pas créer, ou détruire, des partitions d'autres systèmes
d'exploitation que Linux avec les programmes fdisk ou cfdisk de Linux. Autrement dit, ne créez
pas ou ne supprimez pas des partitions MS-DOS avec cette version de fdisk ; utilisez plutôt la
version MS-DOS de FDISK.
Voici un exemple d'utilisation de fdisk. Nous avons une unique partition MS-DOS occupant
61693 blocs sur le disque, le reste est disponible pour Linux. Sous Linux, un bloc fait 1024
octets, par conséquent 61693 blocs représentent à peu près 61 Mo.
Nous ne créerons que deux partitions dans cet exemple :
une pour le swap
une pour la racine.
31
Systèmes d’exploitation M. Mokaddem
Vous étendrez probablement cette configuration à quatre partitions en ligne selon les
recommandations suivantes : une pour le swap, une pour le système de fichiers racine, une pour
les logiciels systèmes et une pour la zone des répertoires des utilisateurs.
D'abord, nous utilisons la commande « p » pour afficher la table de partition courante. Comme
on peut le constater, /dev/hda1 (la première partition de /dev/hda) est une partition DOS de
61693 blocs.
Command (m for help): p
Disk /dev/hda: 16 heads, 38 sectors, 683 cylinders
Units = cylinders of 608 * 512 bytes
Device Boot Begin Start End Blocks Id System
/dev/hda1 * 1 1 203 61693 6 DOS 16-bit >=32M
Command (m for help):
Puis, nous utilisons la commande « n » pour créer une nouvelle partition. La partition racine
Linux aura une taille de 80 Mo.
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
On nous donne alors le choix entre la création d'une partition étendue ou primaire. Dans la
plupart des cas, on utilisera des partitions primaires, à moins que l'on ait besoin de plus de
quatre partitions sur un même disque. Voir la section sur le repartitionnement, ci-dessous, pour
plus d'informations.
Partition number (1-4): 2
First cylinder (204-683): 204
Last cylinder or +size or +sizeM or +sizeK (204-683): +80M
Le premier cylindre doit être le premier cylindre libre APRÈS la fin de la partition précédente..
Dans notre cas, /dev/hda1 se termine sur le cylindre 203, nous démarrerons donc la nouvelle
partition au cylindre 204.
Comme on peut le constater, si l'on utilise la notation « +80M », celle-ci spécifie une partition
de 80 Mo. De même, la notation « +80K » spécifierait une partition de 80 Ko, et « +80 » une
partition qui ne ferait que 80 octets.
Warning: Linux cannot currently use 33090 sectors of this partition
32
Systèmes d’exploitation M. Mokaddem
Si vous voyez cet avertissement, vous pouvez l'ignorer. Il provient d'une ancienne restriction
qui limitait les systèmes de fichiers Linux à 64 Mo. Cependant, avec les nouveaux types de
systèmes de fichiers, ce n'est plus le cas...
Puis, nous créeons notre partition de swap de 10 Mo, /dev/hda3.
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 3
First cylinder (474-683): 474
Last cylinder or +size or +sizeM or +sizeK (474-683): +10M
À nouveau, nous affichons le contenu de la table de partition. Assurez-vous de noter ces
informations, notamment la taille de chaque partition en blocs. Vous aurez besoin de celles-ci
plus tard.
Command (m for help): p
Disk /dev/hda: 16 heads, 38 sectors, 683 cylinders
Units = cylinders of 608 * 512 bytes
Device Boot Begin Start End Blocks Id System
/dev/hda1 * 1 1 203 61693 6 DOS 16-bit >=32M
/dev/hda2 204 204 473 82080 83 Linux native
/dev/hda3 474 474 507 10336 83 Linux native
Notez que la partition de swap Linux (ici, /dev/hda3) a le type « Linux native ». On doit changer
ce type en « Linux swap » afin que le programme d'installation la reconnaisse comme partition
de swap. Pour ce faire, on utilise la commande « t » de fdisk :
Command (m for help): t
Partition number (1-4): 3
Hex code (type L to list codes): 82
Si vous utilisez « L » pour obtenir la liste des types, vous verrez que 82 est le type qui
correspond au swap Linux.
33
Systèmes d’exploitation M. Mokaddem
Pour quitter fdisk et sauvegarder les changements dans la table de partition, on utilise la
commande « w ». Pour quitter fdisk SANS sauvegarder les changements, on utilise la
commande « q ».
Après avoir quitté fdisk, le système peut vous demander de relancer le système afin d'être sûr
que les modifications soient prises en compte. En général, on n'a pas besoin de redémarrer
après avoir utilisé fdisk -- les versions récentes de fdisk et cfdisk sont suffisamment évoluées
pour mettre à jour les partitions sans redémarrer.
Étapes suivantes
Après avoir édité les tables de partitions, le programme d'installation devrait les consulter et
vous proposer d'activer la partition de swap. Répondez oui.
Puis, le programme vous demandera d'associer des noms de systèmes de fichiers Linux (comme
/, /usr, /var, /tmp, /home, /home2, etc.) à chacune des partitions non swap que vous désirez
utiliser.
Il existe une seule règle pour cela. Il doit y avoir un système de fichiers racine, appelé /, et on
doit pouvoir démarrer dessus. Vous pouvez appeler vos autres partitions Linux comme vous
voulez, mais certaines conventions concernant leurs noms vous simplifieront probablement la
vie plus tard.
Plus haut, je recommandais une configuration basée sur trois partitions comprenant une petite
racine, une partition système moyenne et une grosse partition utilisateur. Traditionnellement,
elles doivent s'appeler /, /usr, et /home. Le nom peu intuitif « /usr » vient des temps où les
systèmes Unix (beaucoup plus petits) mélangaient les logiciels systèmes et les répertoires
utilisateurs sur une seule partition non racine. Le fonctionnement de certains logiciels dépend
de son existence.
Si vous avez plus d'une zone pour les répertoires des utilisateurs, la convention veut qu'on les
nomme /home, /home2, /home3, etc. Ceci peut arriver lorsque l'on a deux disques physiques. Sur
mon système, par exemple, la configuration est la suivante :
Filesystem 1024-blocks Used Available Capacity Mounted on
/dev/sda1 30719 22337 6796 77% /
/dev/sda3 595663 327608 237284 58% /usr
/dev/sda4 1371370 1174 1299336 0% /home
/dev/sdb1 1000949 643108 306130 68% /home2
En réalité, le second disque (sdb1) n'est pas entièrement dédié à /home2 ; les partitions de swap
sur sda et sdb ne sont pas montrées dans cette liste. Vous pouvez constater que /home est
l'importante zone libre sur sda et /home2 la zone utilisateurs sur sdb.
Si vous voulez créer une partition pour les fichiers spool, temporaires, de courriers, et des news,
appelez-la /var. Sinon, faites un /usr/var et créez un lien symbolique nommé /var pointant
dessus (le programme d'installation peut vous proposer de le faire).
I.4.3.7 Installer les paquetages
34
Systèmes d’exploitation M. Mokaddem
Lorsque vos partitions ont été préparées, le reste de l'installation est presque automatique.
Votre programme d'installation (qu'il soit EGA ou X) vous guidera à travers une série de
menus qui vous permettront de spécifier le CD-ROM à partir duquel vous installez, les
partitions à utiliser, etc.
Nous n'allons pas décrire ici la plupart des spécificités de cette étape de l'installation. C'est une
des parties qui varie le plus entre les distributions Linux (généralement, les distributeurs y
rivalisent entre eux pour valoriser leur produit), mais c'est aussi la plus simple. Les programmes
d'installation sont plutôt bien auto-documentés et avec de bons écrans d'aide.
I.4.3.8 Après l'installation des paquetages
Lorsque l'installation est finie, et que tout s'est bien passé, le programme d'installation vous
proposera plusieurs options pour configurer votre système avant son premier démarrage à
partir du disque dur.
LILO, le LInux Loader
LILO (qui signifie LInux LOader) est un programme vous permettant de lancer Linux (ainsi
que d'autres systèmes d'exploitation comme MS-DOS) à partir de votre disque dur.
On peut vous donner la possibilité d'installer LILO sur votre disque dur. A moins que vous
n'utilisiez OS/2, répondez « oui ». OS/2 a des besoins particuliers, voir Custom LILO
Configuration ci-dessous.
Installer LILO comme chargeur principal évite d'avoir besoin d'une disquette de démarrage ; au
lieu de cela, à chaque démarrage, vous pouvez indiquer à LILO quel système lancer.
Créer une disquette de démarrage (option)
Il est possible que l'on vous propose de créer une « disquette de démarrage standard », que vous
pourrez utiliser pour lancer votre système Linux nouvellement installé. (Il s'agit d'une ancienne
méthode, plutôt peu pratique, qui suppose que vous démarrez normalement sur DOS et que
vous utilisez une disquette de démarrage pour lancer Linux.)
Pour la créer, vous aurez besoin d'une disquette haute-densité, formatée MS-DOS et vierge.
Insérez celle-ci lorsqu'on vous le demande et la disquette de démarrage sera générée. (Ce n'est
pas la même chose qu'une disquette de démarrage d'installation, et vous ne pouvez remplacer
l'une par l'autre !)
Configurations système diverses
La procédure qui suit l'installation peut aussi vous conduire à travers différents menus vous
permettant de configurer votre système. Ceci comprend la spécification de votre modem et de
votre souris, ainsi que votre zone horaire. Laissez-vous guider par les options du menu. Elle
peut aussi vous demander de créer des comptes utilisateurs ou de donner un mot de passe pour
le compte root (administrateur). Ce n'est pas compliqué et vous n'avez qu'à suivre les
instructions affichées à l'écran.
I.4.3.9 Démarrer votre nouveau système
35
Systèmes d’exploitation M. Mokaddem
Si tout se passe comme prévu, vous devriez pouvoir démarrer Linux à partir du disque dur en
utilisant LILO. Sinon, vous devriez pouvoir lancer votre disquette de démarrage Linux (pas la
disquette de démarrage originale, mais celle créée après l'installation des paquetages). Après le
démarrage, loggez vous sous le login root. Bravo ! Vous avez votre système Linux personnel.
Si vous démarrez en utilisant LILO, essayez de presser les touches shift ou contrôle pendant le
démarrage. Ceci vous présentera une invite de démarrage ; pressez la touche tab pour avoir la
liste des options. De cette façon, vous pourrez lancer Linux, MS-DOS, ou n'importe quel
système directement à partir de LILO.
36
Systèmes d’exploitation M. Mokaddem
Exercices
1. Quels sont les objectifs principaux d’un système d’exploitation ?
2. Une méthode extrême de Spooling connue comme Staging, consiste à lire le contenu
d’une bande magnétique sur disque avant de l’utiliser. Exposez le principal avantage d’un
tel système ?
3. dans un système multiprogrammé et en temps partagé, plusieurs utilisateurs partagent le
système simultanément. Cette situation peut provoquer divers problèmes de sécurité :
a. quels sont ces deux problèmes ?
b. dans une machine en temps partagé, pouvez vous assurer le même degré de
sécurité que dans une machine dédiée ? expliquez ?
4. quelle est le principal avantage de la multiprogrammation ?
5. quelles sont les principales différences entre les systèmes pour les gros ordinateurs et les
ordinateurs personnels ?
6. Définissez les propriétés suivantes :
a. batch
b. interactif
c. temps partagé
d. temps réel
e. réparti
7. Nous avons insisté sur la nécessité pour un OS d’utiliser efficacement le matériel, quand
est-il intéressant que le système (OS) délaisse ce principe et gaspille des ressources ?
Pourquoi un tel système n’est-il pas un gaspilleur ?
8. Dans quelles circonstances serait-il mieux qu’un user utilise un système en temps partagé
plutôt qu’un PC ou une station de travail mono utilisateur ?.
9. Donner les différences entre multitraitement symétrique et asymétrique ? quels sont les
avantages et inconvénients des OS multiprocesseurs ?
10. pourquoi les systèmes répartis sont-ils souhaitables ?
11. Quelle est la principale difficulté à surmonter pour écrire un système temps réel?
Exercice 2 :
12. Quelles sont les cinq activités principales d’un système d’exploitation en ce qui
concerne la gestion de processus ?
13. Quelles sont les trois activités principales d’un système d’exploitation en ce qui
concerne la gestion de la mémoire ?
14. Quelles sont les trois activités principales d’un système d’exploitation en ce qui
concerne la gestion de la mémoire auxiliaire ?
37
Systèmes d’exploitation M. Mokaddem
15. Quelles sont les cinq activités principales d’un système d’exploitation en ce qui
concerne la gestion de fichiers?
16. Quel est l’objectif de l’interpréteur de commandes ? Pourquoi est-il habituellement
séparé du noyau ?
17. Enumérer les cinq services fournis par un système d’exploitation. Expliquer comment
chacun d’entre eux rend le système plus pratique pour les utilisateurs. Expliquer également
dans quels cas il serait impossible pour les programmes niveau utilisateur de fournir ces
services ;
18. Quel est l’objectif des appels système ?
19. Quel est l’objectif des programmes système ?
20. Quel est le principal avantage de l’approche en couches pour la conception des OS ?
21. Pour un concepteur d’OS, quel est le principal avantage de l’utilisation d’une
architecture de machine virtuelle ? Quel en est le principal avantage pour un utilisateur ?
22. Indiquez si les éléments logiciels suivants se situent parmi la catégorie des programmes
d'application, des programmes système, ou des programmes de systèmes d'exploitation.
(a) Le programme more
(b) L'éditeur de texte emacs
(c) La librairie de routines X-Window (Xlib)
(d) Un script de shell
(e) Le traitement de texte Ms-word
(f) La fonction read
2. L'ordinateur personnel compatible IBM fournit une interface aux périphériques en utilisant
des routines du BIOS (Basic Input and Output System) qui est stockée en mémoire morte
(ROM). Quel avantage cette interface fournit-elle aux développeurs d'applications pour la plate-
forme Intel 80x86 ?
3. Dans un environnement multiprogrammé, y-a-t-il partage des ressources entre les processus
d'un même utilisateur ? Expliquez.
4. Le degré de multiprogrammation représente le nombre maximal de processus qu'un système
monoprocesseur peut manipuler à tout moment. Expliquez quelques facteurs matériels et
logiciels qui pourraient avoir une certaine influence sur le degré de multiprogrammation d'un
système.
5. Décrivez le facteur principal qui sert de mesure du temps de réponse pour un système à
soumission de lots et pour un système en temps partagé.
38
Systèmes d’exploitation M. Mokaddem
39
Systèmes d’exploitation M. Mokaddem
Bibliographie
La bibliographie sur les systèmes d’exploitation est très abondante et elle se renouvelle très
rapidement. Elle comprend à la fois des revues de recherche, des ouvrages pédagogiques et des
ouvrages sur la programmation et l'utilisation d'un système particulier. La liste que nous
donnons concerne ne concerne pas la recherche et n’est absolument pas exhaustive. Par
ailleurs, cette recherche est largement passée des laboratoires universitaires à ceux de quelques
industriels : Microsoft et IBM notamment. Notre liste fournit seulement les références que
nous pensons être les plus utiles.
Littérature générale sur les systèmes d’exploitation
A. Tanenbaum, Modern Operating Systems, Prentice–Hall, 1992, est une référence générale très
pédagogique. Distributed Computer Systems, Prentice Hall, 1994, examine plus en détail les
systèmes répartis. Operating Systems, 2nd ed., Prentice-Hall, 1997, est une référence par le même
auteur qui comprend le code, très formateur, d’un système d’exploitation voisin d’Unix.
Cette édition ne comprend pas les systèmes répartis.
A. Silberschatz and P. Galvin, Operating System Concepts, 5th ed., Addison Wesley, 1997, est un
ouvrage plus conceptuel et plus théorique que le précédent. Il reste néanmoins très clair. Il
est traduit en français chez Addison-Welsey sous le titre Principes des systèmes d’exploitation mais
peut être pas l’édition la plus récente.
Sur les noyaux de systèmes d’exploitation commerciaux
M. Bach, La conception du système Unix, Masson, a longtemps été l’ouvrage de référence. Sa
rédaction est extrêmement lourde – à éviter après le dessert – et elle est doublée d’une
traduction maladroite. Cet ouvrage est cependant une mine de renseignements pour ceux qui
veulent connaître les algorithmes internes d’Unix en détail.
L’ouvrage qui précède a inspiré les firmes conceptrices d’autres systèmes. Ceci a donné lieu à
plusieurs ouvrages, en général plus clairs et mieux écrits que leur ancêtre :
H.M Deitel et M.S. Kogan, La conception d’OS/2, Addison-Wesley, 1992.
Helen Custer, Au cœur de Windows NT, Microsoft Press, 1993.
Sur la programmation des systèmes d’exploitation
Le man d’Unix est la meilleure référence pour le programmeur. Il n’y a rien d’équivalent sur
papier.
J.M. Rifflet, La programmation sous Unix, 3e éd., McGraw-Hill, 1993, est une bonne référence
et un ouvrage assez complet.
Charles Petzold, Programming Windows 95, Microsoft Press, 1996, est une bonne référence
pour apprendre la programmation Windows. Elle a été la première du genre. Actuellement, il
y a des dizaines d’ouvrages équivalents.
Microsoft, Microsoft Visual C++, Version 4, Microsoft Press, 1995, est la référence de
programmation de Microsoft. Cette encyclopédie est en 6 volumes comporte tous les appels
systèmes de Windows ainsi que les MFC. Elle est disponible sous forme électronique.
40
Systèmes d’exploitation M. Mokaddem
Apple Computer, Inside Macintosh Series, Addison-Wesley, 1992, 1993, 1994, est une série
traitant des caractéristiques du Macintosh. Elle détaille aussi bien les mécanismes internes
que les méthodes de programmation.
Sur l’utilisation du système Unix
R.S. Bourne, Le système Unix, InterEditions, est une référence antique, mais qui reste un
modèle de clarté. L’auteur est le concepteur du premier interprète de commande d’Unix. La
traduction comprend beaucoup de fautes, par exemple dans les listings de programmes.
B. Kernighan et R. Pike, L’environnement Unix, InterEditions, s’axe plutôt sur les outils
d’Unix. Il est plus difficile à lire que le précédent et il privilégie parfois la « bidouille » info-
maniaque.
J.L. Nebut, Unix pour l’utilisateur : Commandes et langages de commandes, Technip, 1990, est une
bonne référence sur les outils d’Unix.
Sur les langages C et C++
B. Kernighan et D. Ritchie, Le langage C, 2e édition, Masson, est la seule référence
intéressante pour ceux qui ont déjà des notions de programmation dans un autre langage.
Toute la programmation système se faisant actuellement en langage C, il est indispensable
d’en posséder des notions.
P.H. Winston, On to C++, Addison Wesley, 1994, est un excellent manuel à la fois court et
clair.
B. Stroustrup, Le langage C++, 2e éd., Addisson Wesley, 1992, est une référence plus
complète mais plus difficile à lire que la précédente.
Sur les réseaux
Apple, Understanding Computer Networks, Addisson Wesley, est une référence courte mais
exceptionnellement claire sur les concepts des réseaux. Les illustrations sont particulièrement
explicatives.
Guy Pujolle, Les réseaux, Eyrolles, 2000, est la meilleure référence en français.
A. Tanenbaum, Computer Networks, 3rd ed., Prentice-Hall, 1996, est une bonne référence
souvent citée.
W. R. Stevens, Unix Network Programming, 2nd ed, Prentice Hall, 1997, est une excellente
référence de programmation. De nombreux programmes très biens expliqués.
D. Comer, Internetworking with TCP/IP, Prentice Hall, 1990, (3 volumes en collaboration) est
bonne référence sur l’ensemble des protocoles constituant TCP/IP.
C. Hunt, TCP/IP Network Administration, 2nd ed, 1997, O’Reilly & Associates, est une
excellente référence pour l’administration des systèmes TCP/IP.
Sur le langage Java
41
Systèmes d’exploitation M. Mokaddem
D. Flanagan, Java in a Nutshell, 3nd ed, O’Reilly, 1999, est une excellente référence, concise et
claire. Elle est traduite en français.
P. Niemeyer & J. Knudsen, Learning Java, 3nd ed, O’Reilly, 2000, est un ouvrage très
pédagogique pour apprendre Java. Il est traduit en français.
Deitel & Deitel, Java How to Program, 3rd ed, 1999, est un livre très complet sur l’ensemble du
langage Java. Il est traduit en français.
42