Vous êtes sur la page 1sur 20

0

COURS CONCEPTION DE SYSTEME


D’EXPLOITATION
1

CHAPITRE I: RAPPEL GENERAL

I.1. NOTION DE SYSTEME INFORMATIQUE

I. 1. Définitions

Un système informatique est un ensemble formé de matériels et de logiciels


destinés à réaliser des tâches qui mettent en jeu le traitement automatique de
l’information.

Un système informatique est relié au monde extérieur par des organes d’accès
appelés “périphériques” qui lui permettent de communiquer avec des usagers humains ou
avec des équipements divers.

I. 2. Fonctions

La fonction essentielle d’un système informatique est de fournir des services


adaptés à la résolution des problèmes les plus courants des usagers, à savoir:

 Les problèmes de gestion de l’information : stockage, recherche,


communication, etc.

 Les problèmes liés à la présentation et la mise au point des programmes ;

 Les problèmes liés à l’exploitation des programmes.

I. 3. Architecture

Un système informatique peut donc se décomposer en :

 Logiciel de Base : qui est un ensemble de programmes réalisant les fonctions


communes à une large classe d’application.

 Logiciel d’Application : qui met en œuvre une application spécifique en


faisant appel aux services offerts par le logiciel de base.

 Machine physique : qui représente l’ensembles des composant matériels du


système informatique.
2

LOGICIEL D’APPLICATION

LOGICIEL DE BASE

MACHINE PHYSIQUE

Dans cette architecture, hiérarchique, chaque couche utilise les ressources ou


services fournies par la couche inférieure ; et cette dernière présente à la couche
supérieure une Interface décrivant les ressources ou services qu’elle fournit. L’interface de
la couche la plus haute est celle du Système d’Exploitation.

I. 4. Logiciel de Base

A l’intérieur du logiciel de base, on distingue généralement deux niveaux :

 Le Système d’Exploitation ;

 Les outils et services fournis par le logiciel de base tels que les compilateurs, les
chargeurs, les éditeurs, les utilitaires, etc.

OUTILS ET SERVICES

SYSTEME
(Compilateurs, D’EXPLOITATION
Chargeurs, Editeurs, Utilitaires)

I.2. NOTION D’ARCHITECTURE D’ORDINATEUR

Les trois éléments essentiels d'un ordinateur sont :

 L’Unité Centrale ;

 La Mémoire Centrale ;

 Le Dispositif de gestion des entrées-sorties.

Ces divers éléments communiquent entre eux par l'intermédiaire du bus, lequel
est subdivisé en :
3

 bus des données : qui achemine les données devant être traitées par le
processeur;

 bus des commandes : qui achemine les commandes devant être exécutées par le
processeur.

Schématiquement un ordinateur peut être représenté comme suit :

MEMOIRE PROCESSEUR
CENTRALE CENTRALE

CONTROLEUR CONTROLEUR CONTROLEUR CONTROLEUR DE


DE DISQUE DE BANDE D’IMPRIMANTE TERMINAUX

I.2. 1. L’unité central

L’Unité Centrale est le cerveau de l’ordinateur. Elle est constituée d’un


Processeur Central ou Unité Central de Traitement (UCT) dont le rôle est d’exécuter les
programmes préalablement stockés en mémoire centrale en chargeant les instructions une a
une, en les décodant une a une, et en les exécutant.

L’UCT comprend une mémoire locale et privée formée de Registres. Le registre le


plus important est le Compteur Ordinal (CO) qui pointe sur la prochaine instruction à
exécuter. On trouve aussi le Registre d’Instruction (RI) qui contient l’instruction en cours
d’exécution. On peut aussi citer d’autres registres importants tels que : l’Accumulateur, le
Registre d’état, le Registre tampon.

I.2. 2. La mémoire central


4

La mémoire centrale contient les données à traiter et les commandes à exécuter


par le processeur, lesquels y sont préalablement enregistrés. La Mémoire Centrale est
constituée d’un ensemble d’emplacements ou de cellules ou de position mémoire repérés
de manière explicite à l’aide d’une adresse.

La cellule mémoire est la plus petite quantité d’information adressable. Une


mémoire adressable est une mémoire dans laquelle chaque emplacement est repéré par
une adresse. La mémoire est organisée, dans tous les ordinateurs, en groupes de 8 bits
appelés octets ou bytes en anglais. Chaque octet possède donc une adresse numérique.

Cependant, il existe deux types d’adresses :

 Une adresse physique : qui est l’adresse renvoyée par le processeur à la mémoire
centrale pour chercher une donnée dont l’adresse se trouve déjà dans un registre ;

 Une adresse logique : qui est un emplacement de l’espace adressable


représentant la forme dans laquelle la mémoire centrale se présente au logiciel.

L’espace adressable est souvent constitué d’un ensemble de segments de


mémoire de largeur variable.

Un segment est en fait un ensemble d’informations manipulable comme un tout et


qui occupe en mémoire centrale une suite d’emplacements contigus.

I.2. 3. Le dispositif de gestion des entrées / sorties

Le dispositif de gestion des Entrées /Sorties est composé des éléments suivants :

 Les Unités périphériques : qui sont essentiellement constituées d’équipements


d’entrée/sortie et des mémoires auxiliaires. La fonction d’une unité
d’entrée/sortie est de transmettre des données entre l’ordinateur et l’utilisateur.
Les unités d’entrée/sortie sont essentiellement constituées d’équipements
électromécaniques dont le fonctionnement physique est commandé par des
circuits électroniques appelés contrôleurs.

 Les Contrôleurs de périphérique : qui sont des dispositifs électroniques construits


pour assurer les communications avec les périphériques. Ils sont spécialisés dans
leur usage et possèdent leur propre mémoire.

 Les Unités d’échanges : qui sont des dispositifs intercalés entre l’UCT et les unités
périphériques pour palier la disproportion de vitesse de fonctionnement entre
l’UCT (qui est un équipement électronique) et les unités périphériques (qui sont
des équipements électromécaniques). Ils effectuent le transfert d’information
entre l’UCT et les unités périphériques. Parmi les unités d’échange, on peut citer :
5

 Les Bus : qui sont constitués d’un ensemble de conducteurs électriques


montés en parallèle ;

 Un Canal : qui est en fait un processeur spécialisé travaillant en


parallèle avec le processeur central.

I.2. 4. La problématique

Le problème fondamental est de réussir à faire fonctionner cet ensemble, à


assurer les échanges d'information entre les différents éléments qui constituent la machine
et surtout, du point de vue de l'utilisateur, à dialoguer avec lui. C'est le rôle du système
d'exploitation.
6

CHAPITRE II: INTRODUCTION

II.1. Présentation du système d’exploitation

Sans son programme, un ordinateur est fondamentalement un amas de métal.


Avec son logiciel, un ordinateur peut stocker, traiter et renvoyer des informations; jouer la
musique, envoyer un e-mail, faire des recherché sur internet; et entreprendre beaucoup
d’autres activités utiles.

Les programmes d’ordinateur peuvent être divisés en gros en 2 catégories :

 Les programmes systèmes : qui gèrent les opérations inhérentes à l’ordinateur lui-
même.

 Les logiciels applicatifs (applications): qui exécutent le travail réel des utilisateurs.

Le plus fondamental des programmes système est le système d’exploitation,


dont le travail est de contrôler toutes les ressources de l’ordinateur et de fournir une base
sur laquelle les programmes applicatifs peuvent être écrits.

Un système informatique moderne est souvent constitué d’un ou de plusieurs


processeurs, d’une mémoire centrale, des disques durs, des imprimantes, d’un clavier, d’un
écran, des interfaces réseaux, et d’autres équipements d’entrée/sortie ; le tout formant un
système assez complexe. Écrire un programme qui tient compte de touts ces équipements et
les utilisent correctement de façon optimal est un travail très difficile. If chaque
programmeur devait se préoccuper de comment les disques durs fonctionnaient, et de la
douzaine de choses qui pourrait allez mal quand un bloc de disque est lu, il est fort probable
que beaucoup de programmes ne serait pas écrits.

Il y a bien des années, il est apparu de plus en plus évident qu’une des voies a
suivre était de décharger les programmeurs de la complexité du matériel. La solution ainsi
trouvée qui a évolué graduellement a été de placer une couche logicielle au dessus du
matériel, pour gérer toutes les parties du système, et présenter à l’utilisateur une interface
ou machine virtuelle plus facile à comprendre et à programmer. Cette couche logicielle,
c’est ce qu’on appelé Système d’exploitation.

Le placement du système d’exploitation est ainsi illustré sur la figure II.1. Au


bas se trouve le matériel, qui est dans plusieurs cas lui-même composé de 2 ou plusieurs
niveaux (couches). Le niveau le plus bas contient les équipements physiques, constitués de
circuits intégrés, de fils, de boitiers d’alimentation, de tubes cathodiques et d’autres
7

équipements physiques similaires. La façon dont ces divers équipements sont conçu et
comment ils fonctionnent est du domaine de l’électronique.

FIGURE II.1

Après le niveau équipements physiques vient le niveau microarchitecture dans


lequel les équipements physiques sont regroupés ensemble pour former des unités
fonctionnelles. Typiquement, ce niveau contient certains registres internes au CPU (Unité
Central de Traitement) et un circuit de données contenant une UAL (Unité Arithmétique et
Logique). A chaque cycle d’horloge, une ou deux opérandes sont emmenés des registres et
combinées dans l’Unité Arithmétique et Logique (par exemple par addition ou l’opération
booléenne AND). Le résultat est stocké dans une ou plusieurs registres. Dans certaines
machines, les opérations des circuits de données sont contrôlées par un programme appelé
« Microprogramme ». Sur d’autres machines, ces opérations sont contrôlées directement
par des circuits physiques.

Le but des circuits de données est d’exécutées quelques suites d’instructions.


Certaines de ces instructions peuvent être acheminées en un cycle de circuit de données,
tandis que certaines autres en requièrent plusieurs. Ces instructions peuvent utilisées des
registres ou d’autres composants physiques. Ensemble, le hardware et les instructions
visibles par un langage d’assemblage forment l’Architecture du jeu d’Instruction ou ISA pour
«Instruction Set Architecture » en anglais. Ce niveau est souvent appelé « Langage
Machine ».
8

Le langage machine comprend typiquement entre 50 et 300 instructions, le plus


souvent pour transférer des données au sein de la machine, effectuer des opérations
arithmétiques, et comparer des valeurs. A ce niveau, les équipements d’entrées/sorties sont
contrôlés en chargeant des valeurs dans des registres périphériques spéciaux. Par exemple, a
disque dur peut être exécuter une commande de lecture en chargeant les valeurs de
l’adresse disque, de l’adresse de la mémoire centrale, de l’octet de comptage, et de
direction (lecture ou écriture) dans ces registres. En pratique, beaucoup plus de paramètres
sont exigés, et l’état renvoyé par le pilote après une opération peut être complexe. En
outre, pour beaucoup d’équipements d’entrée/sortie, le temps joue un rôle important dans
la programmation.

Une des fonctions majeures du système d’exploitation est de cacher toute


cette complexité et de fournir au programmeur, un jeu d’instruction plus commode avec
lequel travailler. Par exemple, read block from file est conceptuellement plus simple que
avoir à se préoccuper sur les détails pour bouger les têtes de lecture du disque dur,
atteindre qu’elle se stabilise et ainsi de suite.

Au dessus du système d’exploitation se trouve le reste des programmes


systèmes. Ici, on peut trouver les interpréteurs de commande (Shell), les systèmes de
fenêtrage, les compilateurs, les éditeurs de code, et des applications indépendantes. Il est
important de réaliser que tous ces programmes ne font pas partie du système d’exploitation,
même si ils sont le plus souvent fournis préinstaller par le fabricant d’ordinateur, ou dans le
même package que le système d’exploitation. Ceci est point crucial, mais subtile qu’il
convient de relever.

Le système d’exploitation est (habituellement) cette portion de programme qui


s’exécute en Mode noyau ou Mode Superviseur. Il est protégé des interférences des
utilisateurs par le matériel (ignorant pour le moment quelques processus vieux ou lent qui
ne bénéficient pas d’une protection matérielle du tout).

Les compilateurs et autres éditeurs de code s’exécutent en Mode Utilisateur.


Si un utilisateur n’aime pas un compilateur, il est libre d’en utiliser un autre qu’il a peut
éventuellement écrire; par contre, il n’est pas libre d’écrire son propre gestionnaire
d’interruption d’horloge, lequel fait parti intégrante du système d’exploitation et est
normalement protégé par le matériel contre les tentatives des utilisateurs de le modifier.

Cependant, cette distinction est quelque fois floue dans les systèmes
embarqués (lesquels peuvent ne pas avoir un mode noyau) ou les systèmes interprétés (tels
que les systèmes basés sur le Java qui utilise l’interprétation, pas le matériel, pour séparer
les composants).
9

Finalement, au-dessus des programmes systèmes on trouve les programmes


applicatifs. Ces programmes sont achetés (ou écrits par) les utilisateurs pour résoudre des
problèmes particulier, tels que les traitements de texte, les feuilles de calcul, les calculs
d’ingénieur, ou le stockage des informations dans une Base de données.

II.2. Définitions du Système d’Exploitation

La plus difficultés dans la définition du système d’exploitation réside dans le


fait qu’un système d’exploitation rempli fondamentalement 2 fonctions sans lien apparent à
savoir : étendre une machine physique et en gérer les ressources. Cette définition dépend
aussi en grande parti du point de vue de celui qui l’énonce, point de vue qui, selon le cas,
peut pencher pour l’une ou l’autre fonction.

De ce qui précède, un système d’exploitation peut donc être considéré


comme :

1. L’extension d’une machine physique

Ici, la fonction du système d’exploitation est de présenter à l’utilisateur


l’équivalent d’une machine étendu ou machine virtuelle plus facile à manipuler que la
machine physique sous-jacente. Pour ce faire, le système d’exploitation fournit applications
une variété de services qui peuvent être obtenus en utilisant des instructions spéciaux
appelées Appels Systèmes. Cette approche est dite « ascendante ».

2. Un gestionnaire de ressources :

Ici, la fonction du système d’exploitation est de fournir une allocation


ordonnée et contrôlée des processeurs, des mémoires et des différents équipements
d’entrée /Sortie aux divers programmes concurrents qui tentent d’utiliser lesdits ressources.
Cette approche est dite « descendante ». La gestion des ressources implique le
« multiplexage », c’est-à-dire le « partage » des ressources en temps et en espace. Quand
une ressource est multiplexé temporellement, les différents programmes ou utilisateurs en
concurrence l’utilisent à tour de rôle. Pour le cas d’un multiplexage spatiale, chaque
programmes ou utilisateurs en concurrence occupe une portion d’espace mémoire qui lui
alloué par le système d’exploitation.

II.3. Les Concepts du Système d’Exploitation

L’interface entre le système d’exploitation et les programmes utilisateurs est


défini par un jeu « d’instructions étendues » fournies par le système d’exploitation. C’est
10

ce que l’on appelle traditionnellement les Appels Système. Pour réellement comprendre ce
que fait un système d’exploitation, il convient d’examiner minutieusement cette interface
qui peut varier d’un système d’exploitation à un autre.

Dans notre cours, nous allons nous baser sur les appels système de MINIX 3 qui
peuvent ainsi être regroupé en deux grandes catégories (ce qui est du reste valable pour la
plupart des systèmes d’exploitation):

 Les appels systèmes concernant les processus ;


 Les appels systèmes concernant le système de fichiers.

II.3.1. Les Processus

Un concept clé dans MINIX 3 et dans la plupart des systèmes d’exploitation est
celui des « processus ». Un processus est fondamentalement un programme en exécution.

A chaque processus est associé son « espace d’adressage » qui représente un


liste d’emplacements mémoires délimités, dans lequel le processus peut lire et écrire.
L’espace d’adressage comprend donc le programme exécutable, les données du programme,
ainsi que leurs piles. On associe aussi à chaque processus un ensemble de registres, incluant
le compteur ordinal, le pointeur de la pile, et d’autres registres matériels, ainsi que
d’autres informations nécessaires à l’exécution du programme.

En multiprogrammation, quand un processus est temporairement suspendu, il


doit être exécuté plus tard exactement dans le même état que lorsqu’il était suspendu. Ce
qui signifie que toutes les informations antérieur concernant ledit processus doivent être
explicitement conservées quelque part durant la suspension. Dans beaucoup de systèmes
d’exploitation, toutes les informations relatives à chaque processus, autres que celles
contenues dans son propre espace d’adressage sont sauvegardé dans un table du système
d’exploitations appelé « Table de processus » ; qui n’est rien d’autre qu’un tableau (ou
liste chainée) de structures, une pour chaque processus en existence.

Ainsi, un processus (suspendu) consiste en son espace d’adressage,


habituellement appelé « image noyau », et en sa « table d’entrée » (table de processus).

Des appels système clé dans la gestion des processus, il y a ceux qui concernent
la création et la terminaison des processus. A titre d’exemple, considérons un processus
appelé Interpréteur de commande ou Shell qui lit une commande sur un terminal.
L’utilisateur tape juste une commande qui demande qu’un programme soit compilé. Le Shell
doit créer un nouveau processus qui va exécuter le compilateur. Quand ce processus a fini la
compilation, il exécute un appel système qui le termine lui-même.
11

Dans Windows et d’autres systèmes d’exploitations qui ont une Interface


graphique ou GUI (Graphical User Interface), cliquer (double cliquer) sur une icône du
bureau lance un programme de la même façon que si on avait tapé son nom dans une invite
de commande. Les interfaces graphiques ne sont donc en réalité que de simple interpréteur
de commande.

Si un processus peut créer un ou plusieurs autres processus appelés « processus


fils » et ces processus à leur tour créée d’autres processus fils, nous obtenons rapidement
structure arborescente de processus. Ces différents processus qui coopèrent pour effectuer
certaines taches ont souvent besoin de communiquer entre eux et de se synchroniser leurs
activités. Cette communication est appelé « Communication Interprocessus ».

FIGURE II.2

La figure II.2 représente un arbre à processus. Le processus A crée 2 processus


fils, les processus B et C. le Processus B créée 3 processus fils, les processus D, E et F.

D’autres appels système de processus nécessitent plus de mémoire (ou libèrent


de la mémoire non utilisée), attendent la fin d’un processus fils, et masque son programme
avec un programme différent.

Occasionnellement, il est nécessaire de transmettre l’information vers un


processus en exécution qui n’en est pas demandeur. Par exemple, un processus qui
communique avec un autre processus s’exécutant sur une autre machine le fait en envoyant
des messages au processus distant à travers un réseau. Pour éviter qu’un message ou sa
réponse se perde, l’expéditeur peut demander à son propre système d’exploitation de le
notifier après un nombre de seconde déterminé, de façon a retransmettre le message si
aucun accusé de réception n’est reçu. Apres avoir configuré cette sorte de réveil, le
programme peut continuer son travail habituel. Quand le nombre de secondes spécifié est
dépassé, le système d’exploitation envoie un Signal d’alarme au processus. Ce signal
entraine momentanément la suspension du processus, quel que soit la tache qu’il effectuait,
sauve ses registres sur la pile, démarre l’exécution d’une procédure spéciale de traitement
12

des signaux, par exemple pour retransmettre une présumée perte de message. Quand le
traitement du signal est traité, le processus redémarre dans l’état qu’i avait avant.

Les signaux sont les équivalents logiciels des interruptions matériels. Ils sont
générés par une variété de causes. Beaucoup d’alertes détectées au niveau matériel, comme
l’exécution d’une instruction illégales ou l’utilisation d’une adresse invalide, sont aussi
convertis en signaux d’alarme envoyés au processus coupable.

Chaque personne autorisé à utilisé MINIX 3 se voit assigné un identificateur


d’utilisateur ou UID (User IDentification) par l’administrateur du système. Chaque processus
qui commence possède l’UID de la personne qui l’a lancé. Un processus fils possède la même
UID de son parent.les utilisateurs peuvent faire parti de groupes, lesquels possède chacun un
Identificateur de Groupe ou GID (Groupe IDentification).

II.3.2. Les fichiers

Une autre grande famille d’appels systèmes concerne le système de fichiers.


Comme évoqué précédemment, une des fonctions majeur du système d’exploitation est de
cacher les particularités du fonctionnement des disques et autres équipements d’entrée
sortie en présentant au programmer, un model d’abstraction agréable et clair, formé de
fichiers indépendant représentant chaque équipement. Les appels systèmes auront
évidemment besoin de créer des fichiers, de supprimer des fichiers, de lire dans des fichiers,
et d’écrire dans des fichiers. Avant qu’un fichier puisse être lu, il doit être ouvert, et après
avoir été lu, il doit être fermé ; d’où les appels systèmes doivent fournir des services pour
faire tout cela.

Pour fournir une place ou conserver les fichiers, MINIX 3 introduit le concept de
« Répertoire » comme un moyen de grouper les fichiers ensemble. Par exemple, un étudiant
peut avoir un répertoire pour chaque cours qu’il prend, un autre répertoire pour les
courriers électroniques, et encore un autre répertoire pour sa page web d’accueil. Les
appels systèmes seront nécessaires pour créer et supprimer ces répertoires. Les appels
systèmes sont aussi nécessaires pour placer un fichier existant dans un répertoire, et pour
supprimer un fichier d’un répertoire. Les entrées des répertoires peuvent être soit des
fichiers, soit des répertoires. Ce modèle a aussi favorisé l’émergence d’un système de
fichier hiérarchique tels que montré sur la figure II.3.
13

FIGURE II.3

Les hiérarchies des processus et des fichiers sont toutes les deux organisées en
arborescence, mais la ressemblance s’arrête là. Les hiérarchies des processus ne sont pas
souvent profondes (plus de 3 niveaux est inhabituel), alors que les hiérarchies des fichiers
contient habituellement 4, 5, et même plus de niveaux de profondeur. Les hiérarchies des
processus ont typiquement une durée de vie limitée, généralement quelques minutes le plus
souvent, alors que la hiérarchie des répertoires peut exister des années durant. Les droits de
propriétés, ainsi que les méthodes de protection aussi différent, selon qu’il s’agit des
processus ou des fichiers. Typiquement, seul un processus parent peut contrôler ou même
accéder à un processus fils, mais il existe presque toujours des mécanismes pour permettre
aux fichiers et répertoires d’être lu par un large group d’utilisateur que juste le
propriétaire.

Tous les fichiers dans une hiérarchie de répertoire peuvent spécifier en


donnant leur chemin d’accès à partir du début de la hiérarchie de répertoire appelée
« Répertoire Racine ». De tels chemins de nom absolu consistent en une liste de répertoires
qui doivent être traversé du répertoire racine pour aboutir au fichier, les différents
éléments séparés par des slashs. Dans la figure FIG II.3, le chemin d’accès au fichier CS101
est /Faculté/Prof.Brown/Cours/CS101. Il convient de remarquer qu’en Windows, les
caractères slash sont remplacés par des Back slash ; d’où l’exemple ci-haut peut se traduire
en \Faculté\Prof.Brown\Cours\CS101. Tout au long de notre cours, nous adopterons la
convention utilisée par UNIX pour les chemins d’accès.
14

Les fichiers et les répertoires en MINIX 3 sont protégés en affectant à chacun


d’eux un code binaire de 11 bit. Ce code binaire consiste en 3 champs de 3 bit chacun (un
relatif au propriétaire, un pour les membres du groupe du propriétaire, un autre pour tous
les autres utilisateurs), et un champ de 2 bits. Chaque champ de 3 bits a 1 bit pour un accès
en lecture, 1 bit pour un accès en écriture et 1 pour un accès en exécution. Ces 3 bits sont
connus comme les rwx bits (read, write, execute bits). Par exemple, le code de protection
rwxr-x- - x signifie que le propriétaire peut lire, écrire ou exécuter le fichier, les autres
membres du groupe propriétaire peuvent lire et exécuter le fichier (pas écrire), et tous les
autres utilisateurs peuvent seulement exécuter les fichiers (mais pas lire ou écrire). Pour un
répertoire, x indique une permission de recherche. Un trait signifie que la permission
correspondante est absente (le bit est à zéro).

Avant qu’un fichier ne puisse être lu ou écrit, il doit être ouvert, moment au
cours de laquelle les permissions sont vérifiées. Si l’accès est permis, le system retourne un
petit entier appelé un « Descripteur de Fichier » à utiliser dans les opérations qui suivent.
Si l’accès est prohibé, un code d’erreur (1) est retourné.

Un autre concept important en MINIX 3 est le système de fichier monté.


Presque tous les ordinateurs personnels possèdent un ou plusieurs lecteurs CD-ROM dans
lesquels sont insérer ou retiré des CD-ROM. Pour fournir une méthode claire pour exploiter
ces media amovibles (CD-ROMs, DVDs, lecteurs de disquette, lecteur ZIP, etc.), MINIX 3
permet au système de fichier d’un CD-ROM d’être attaché à l’arborescence principale du
système de fichier.

Considérons le cas illustrés à la figure II.4 (a). Avant l’appel système mount, le
système fichier racine sur le disque dur, et un second système de fichier sur le CD-ROM,
sont séparés et non pas de lien apparent.

FIGURE II.4

Au point (a), avant le montage, les fichiers sur le lecteur de disquette sont
inaccessibles. Au point (b), après le montage, ils font partie intégrante de la hiérarchie des
15

fichiers. Le système de fichier du CD-ROM est ainsi monté dans le répertoire b, permettant
ainsi des fichiers /b/x et /b/y. le plus souvent, les systèmes de fichier sont monté dans des
répertoires préalablement vides. De même, si un système possède plusieurs disques, ils
peuvent tous être monté dans le même répertoire.

Un autre concept important en MINIX 3 est ce que l’on appelle « le fichier


spécial ». Les fichiers spéciaux sont fournis pour faire correspondre en équipement
d’entrée/Sortie à un fichier. Par cette méthode, ils peuvent être lu et écrit en utilisant les
mêmes appels système utilisés pour lire ou écrire sur des fichiers traditionnels. Il existe 2
sortes de fichiers spéciaux : les fichiers spéciaux blocs et les fichiers spéciaux caractères.
Les fichiers spéciaux blocks sont normalement utilisés pour modéliser des équipements qui
consistent en une collection de blocks aléatoirement adressables, comme les disques durs.
En ouvrant un fichier spécial block et en la lisant, en disant « Block 4 », un programme peut
accéder directement au quatrième block sure l’équipement, sans se soucier de la structure
du système de fichier qu’il contient. De façon similaire, les fichiers spéciaux caractères sont
utilisés pour modéliser des équipements tels que les imprimantes, les modems, et d’autres
équipements qui accepte ou délivre des flux de caractères. Par convention, ces fichiers
spéciaux sont conservés dans le répertoire /dev de MINIX 3. Par exemple, les fichiers
spéciaux de l’imprimante peuvent être conservés dans le répertoire /dev/lp.

La dernière caractéristique dont nous allons parler dans cet aperçu général des
processus concerne a la fois les processus et les fichiers il s’agit des tunnels. Un tunnel est
une sorte de pseudo-fichiers qui peu être utilisé pour connecter deux processus, tel que
illustré sur la FIGURE II.5. Si le processus A et B veulent communiquer en utilisant un tunnel,
ils doivent le créer à l’ avance. Quand le processus A veut envoyer des données au processus
B, il écrit dans le tunnel comme si ce dernier était un fichier de sortie. Le processus B peut
lire ces donnes en lisant dans le tunnel comme si ce dernier était un fichier d’entrée. Ainsi,
la communication entre processus en MINIX 3 est très semblable à une lecture et une
écriture ordinaire dans un fichier. Plus fort encore, la seule façon qu’un processus peut
découvrir qu’un fichier sortie sur dans laquelle il est entrain d’écrire n’est pas réellement un
fichier, mais un tunnel, est de faire appel a un appel system spécial.

FIGURE II.5
16

II.3.3. Le shell

Le système d’exploitation est le code qui supporte les appels systèmes. Les
éditeurs de code, les compilateurs, et les interpréteurs de commande ne font, sans aucun
doute partie intégrante du système d’exploitation, même si ils sont importants et utiles.
Dans ce qui suit nous allons nous parler brièvement de l’interpréteur de commande de MINIX
3 qu’on appelle « Shell ».

Quoique ne faisant pas partie du système d’exploitation, le shell en utilise


abondamment les fonctions, montrant ainsi à suffisance comment les appels systèmes
peuvent être utilisés. Il est aussi la première interface entre l’utilisateur et le système
d’exploitation, à moins que l’utilisateur n’utilise une interface graphique à la place.
Plusieurs shell existent dont csh, ksh, zsh, et bash. Tous supporte les fonctionnalités que
nous verrons tantôt lesquelles dérive du shell original (sh).

Quand un utilisateur ouvre une session sur la machine, un shell démarre. Le


shell utilise un terminal pour effectuer des entrées standards et des sorties standards. Le
shell se lance en affichant l’invite de commande (prompt), souvent un caractère $, qui
indique a l’utilisateur le shell attend de recevoir une commande en entrée. Si par exemple,
l’utilisateur saisi date, le shell crée un processus fils et execute le programme affichant la
date système comme ledit processus fils. Pendant que le processus fils s’execute, le shell
attend qu’il se termine. Une fois terminé, the shell affiche encore l’invite de commande et
essaie de lire la prochaine commande en ligne.

L’utilisateur pet spécifier que la sortie standards soit redirigée vers un fichier
par la commende : date >fichier.

Similairement, une entrée standard peut être redirigée comme suit : sort
<fifchier1 >fichier2. Dans ce cas, le programme de tri récupère des entrées dans le
fichier1 et les trie. Le résultat est ensuite envoyé dans fichie2

Les résultats d’une commande peuvent à leur tour être utilisés comme entrée
d’une autre commande en connectant ces deux commandes par un tube (pipe) comme suit :

Cat fichier1 fichiers2 fichier3 | sort >/dev/lp. La commande cat concatène les 3 fichiers
et envoie le résultat (via le tube |) en sortie à la commande de tri sort qui les trie par ordre
alphabétique. Le résultat de la commande sort est redirigé vers le fichier /dev/lp, qui ne
représente rien d’autre que l’imprimante. Si un utilisateur ajoute un & après la commande
ci-dessus, ceci lui permettra de continuer a travailler normalement pendant que le tri est en
train de se faire en background.
17

II.4. LES APPELS SYSTEMES

MINIX 3 renferme un total de 53 appels systèmes principaux. Ces derniers sont


repris dans le tableau de la figure FIG II.6 ci-dessous, et groupés pou des raisons pratiques
en 6 catégories. Pour une large part, les services offerts par ces appels systèmes
déterminent la plupart des fonctions qu’un système d’exploitation peut accomplir.

APPEL
APPEL DE PROCEDURE DESCRIPTION
SYSTEME
GESTION DES PROCESSUS
fork pid = fork () Créé un processus fils identique au parent.
waitpid pid = waitpid (pid, &statloc, opts) attend la fin d’un processus fils.
wait S = wait (&status) L’ancienne version de waitpid.
execve S = execve (name, argv, envp) Remplace l’image noyau d’un processus
Termine le processus en exécution et revoit
exit exit (status)
son état.
brk size = brk (addr) Fixe la taille d’un segment de données.
Retourne le numéro d’indentification du
getpid pid = getpid ()
processus appelant.
Retourne le numéro d’identification du
getpgrp pid = getpgrp ()
groupe du processus appelant.
Crée une nouvelle session et retourne son
setsid pid = setsid () numéro d’identification de groupe du
processus.
ptrace I = ptrace (req, pid, addr, data) Utiliser pour le débogage.
SIGNAUX
sigaction S = sigaction (sig, &act, &oldact) Définit l’action à prendre par les signaux.
sigreturn S = sigreturn (&context) Retourner d’un signal.
sigprocmask S = sigprocmask (how, &set, Examine ou change le mask du signal.
&old)
sigpending S = sigpending (set) Obtient l’ensemble des signaux bloqués.
Remplace le masque du signal et suspend le
sigsuspend S = sigsuspend (sigmask)
processus.
kill S = kill (pid, sig) Envoi un signal à un processus.
alarm S = alarm (seconds) Règle l’alarme de l’horloge.
Suspend le processus appelant jusqu’au
pause S = pause ()
prochain signal.
GESTION DE FICHIER
Manière obsolète de créer un nouveau
creat fd = creat (name, mode)
fichier.
Crée un i-node régulière, spécial ou
mknod fd = mknod (name, mode, addr)
répertoire.
Ouvre un fichier en lecture, en écriture ou
open fd = open (file, how, …)
les deux en même temps.
close S = close (fd) Ferme un fichier ouvert.
18

Lit les données d’un fichier dans un


read n = read (fd, buffer, nbytes)
tampon.
Ecrit les données d’un fichier dans un
write n = write (fd, buffer, nbytes)
tampon.
lseek pos = lseek (fd, offset, whence) Bouge le pointer d’un fichier.
Obtient l’état des informations d’un
stat S = stat (name, &buf)
fichier.
Obtient l’état des informations d’un
fstat S = fstat (fd, &buf)
fichier.
Alloue un nouveau descripteur de fichier à
dup fd = dup (fd)
un fichier ouvert.
pipe S = pipe (&fd[0]) Crée un tunnel.
Exécute des opérations spéciales sur un
ioctl S= ioctl (fd, request, argp)
fichier.
access S = access (name, amode) Vérifie l’accessibilité d’un fichier.
rename S = rename (old, new) attribue un nouveau non de fichier.
Verrouillage d’un fichier et d’autres
fcntl S = fcntl (fd, cmd, …)
opérations.
GESTION DE REPERTOIRE ET DE SYSTEME DE FICHIER
mkdir S = mkdir (name, mode) Crée un nouveau répertoire.
rmdir S = rmdir (name) Supprime un répertoire vide.
Crée une nouvelle entrée name2 pointant
link S = link (name 1, name2)
vers name1.
unlink S = unlink (name) Supprime l’entrée d’un répertoire.
mount S = mount (special, name, flag) Monte un système de fichiers.
unmount S = unmount (special) Démonte un système de fichier.
Nettoie tous les blocs en cache sur le
sync S = sync ()
disque.
chdir S = chdir (dirname) Change le répertoire de travail.
chroot S = chroot (dirname) Change le répertoire racine.
PROTECTION
chmod S = chmod (name, mode) Change les bits de protection d’un fichier.
Obtient le numéro d’identification
getuid uid = getuid ()
utilisateur de l’appelant.
Obtient le numéro d’identification du
getgid gid = getgid ()
groupe de l’appelant.
Détermine le numéro d’identification
setuid S = setuid (uid)
utilisateur de l’appelant.
Détermine le numéro d’identification du
setgid S = setgid (gid)
groupe de l’appelant.
Change le propriétaire et le groupe d’un
chown S = chown (name, owner, group)
fichier.
umask oldmask = umask (complmode) Change le mode du masque.
GESTION DU TEMPS
time seconds = time (&seconds) Obtient le temps écoulé de puis le 1er
19

Janvier 1970.
stime S = stime (tp) Fixe le temps écoulé de puis le 1er Janvier
1970.
utime S = utime (file, timep) Fixe un temps de « dernier access » du
fichier
Obtient les temps system et utilisateur
times S = times (buffer)
écoulé depuis.

FIGURE II.6

Sur la Figure II.6 représentant les principaux appels système de MINIX. fd


signifie descripteur de fichier ; n signifie nombre d’octets.

Vous aimerez peut-être aussi