Vous êtes sur la page 1sur 151

Dr Selain Kasereka, Ph.

Cours et travaux pratiques

Système d’exploitation
comparé

Edition 2024
Page |2

PRELUDE

Le système d’exploitation est l’interface entre l’utilisateur et le matériel, c’est un


logiciel indispensable pour pouvoir nous servir de l’ordinateur. Dans le monde
actuel où l’automatisation des tâches et la mise en réseau des équipements
informatiques deviennent le passage obligé, le système d’exploitation a un rôle
majeur à jouer. Nous trouvons alors plusieurs types de systèmes d’exploitation
qu’ils soient propriétaires ou libres.

Le contenu que nous proposons dans ce document d’une centaine de pages est
adapté au contexte actuel, aux pré-requis en générale et au niveau des
apprenants. Les chapitres préliminaires tentent de balayer les notions de base
des systèmes d’exploitation en général pour permettre à l’auditoire d’avoir un
même niveau avant de nous attaquer aux notions de comparaison entre
quelques systèmes d’exploitation. Une partie est consacrée à la programmation
Shell et Batch pour l’automatisation des tâches.

Ce cours prévoit des séances des travaux en salle machine. Les systèmes
d’exploitation qui seront essentiellement utilisés sont UNIX/Linux, Windows et
MS-DOS.

Ces notes de cours et travaux pratiques évolueront en fonction du niveau de


l’auditoire.
Page |3

PRESENTATION DU COURS
1. OBJECTIFS
• Donner à l’étudiant les notions de base sur les systèmes d’exploitation et
surtout montrer la place du système d’exploitation dans un système
informatique.
• Faire une étude approfondie des fonctionnalités d’un système
d’exploitation par des exercices et des exposés.
• Mener sur le plan théorique et pratique, une étude comparative de
quelques systèmes d’exploitation couramment utilisés notamment MS-
DOS, Windows et UNIX/Linux.
• Apprendre aux étudiants comment automatiser les tâches routinières par
la programmation (BATCH et SHELL).

A la fin du cours, l’étudiant sera capable de :


• Comprendre les principales fonctions de base d’un système
d’exploitation ;
• Faire une étude comparative entre les systèmes d’exploitation ;
• Approfondir l’exécution des commandes de base dans quelques
environnements, essentiellement MS-DOS, Windows et Linux/Unix ;
• Automatiser les taches par la programmation des scripts SHELL et BATCH ;

2. CONTENU DU COURS

CHAPITRE I. RAPPELS SUR LES SYSTEMES D’EXPLOITATION


CHAPITRE II. FONCTIONNALITES D’UN SYSTEME D’EXPLOITATION
CHAPITRE III. ETUDES DES SYSTEMES MS-DOS, WINDOWS ET LINUX/UNIX
CHAPITRE IV. SCRIPTING AVEC SHELL ET BATCH
CHAPITRE V. INTRODUCTION AUX SYSTEMES TEMPS REEL
Page |4

3. CONTEXTE DE REALISATION DES OBJECTIFS OU MODE


D’INTERVENTION
Pour mieux réussir ce cours, les enseignements se feront en salle de cours et/ou
en laboratoire équipé d'ordinateurs. Si possible nous devons avoir deux
systèmes d’exploitation de la gamme Linux/UNIX (Mandriva, Fédora, Ubuntu,
FreeBSD, AIX, …) et deux de la gamme Windows (XP, Win7, Win8, …) installés sur
des postes différents. Idéalement nous aurons un étudiant par poste pour les
travaux en laboratoire. La partie pratique touchera les systèmes d'exploitation
MS-DOS, Windows et Linux/UNIX.

4. MODE D’EVALUATION
L’évaluation sera faite sur base de la présence, la participation au cours, les
travaux pratiques, interrogations et sous forme d’examen oral et / ou d’examen
écrit. Des exposés sur les sujets d’actualité sur les systèmes d’exploitation sont
aussi prévus dans le cadre de ce cours.

5. PREREQUIS
L’étudiant qui suivra ce cours doit avoir des notions de base sur :

• L’informatique générale
• L’architecture des ordinateurs
• L’algorithmique
• La programmation
• La statistique et les mathématiques

6. QUELQUES REFERENCES BIBLIOPGRAPHIQUES

1. Andrew Tanenbaum, « Systèmes d’exploitation. Systèmes centralisés.


Systèmes distribués », DUNOD, 1994.
2. J. BEAUQUIER, B. BERARD, Systèmes d'exploitation, Ediscience, 1993
3. M. BEN-ARI, Processus concurrents, Masson 1986
4. A. TANENBAUM, Les systèmes d'exploitation, Prentice Hall, 1999
5. SCHIPER, Programmation concurrente, Presses Polytechnique Romandes
1986
6. P. KASENGEDIA, Système d’exploitation, Unikin, 2020
Page |5

7. Systèmes temps-réel de contrôle-commande, F. Cottet et E. Groleau,


Dunod, 2005(Ch.2)
8. Real-Time systemsdevelopment, R. Williams, Elsevier, 2006
9. Hard real-time computing systems, 2d edition, G.C. Buttazo, Springer, 3d
edition, 2011(Ch.4)
10.Programmation Système: maîtrisez les interfaces système avec le langage
C sous Linux, Jean-Paul Gourret, 2012.
11.http://www-phase.c-strasbourg.fr/inform/linux/cours/user/node1.html
12.http://www.linux-pour-lesnuls.com/shell.php
13.http://www.labo-linux.org/cours/module-1/chapitre-11-scripting-bash/
Page |6

CHAPITRE I. RAPPELS SUR LE SYSTEME D’EXPLOITATION

Dans ce chapitre nous allons aborder les notions de base sur les systèmes
d’exploitation en générale. Les notions essentiellement abordées sont la
création et la destruction des processus, les algorithmes d’ordonnancement et
la gestion de la mémoire.

1. Notions de base et mots clés

a. Informatique
C’est une science de traitement automatique des informations, au moyen d’une
machine électronique appelé Ordinateur et de programmes appelés logiciels,
pour obtenir des résultats.
• Science : elle obéit aux lois.
• Traitement : transformation
• Automatique : sans l’intervention de l’homme
• Informations : données numériques, alphanumériques, visuelles, sonores,
tactiles, etc.
• Electronique : courant faible
• Ordinateur : matériel
• Programmes (logiciels) : textes (ensemble de phrases) écrits dans des
langages de programmation qui permettent à l’ordinateur de traiter,
mémoriser et restituer les résultats.
Ordinateur = ensemble de matériel + logiciels
Matériel = Unité centrale + périphériques
Unité centrale = ensemble de processeurs (un ou plusieurs) + mémoire
principale + disques+ horloges + interfaces de connexion réseaux+pores+…
Périphériques = entrées (acquisitions de données) + sorties (sortie des
résultats)+ entrées-sorties ( lecteurs de disques, modem)+stockages ( mémoires
de masses).
Logiciels = Logiciels de base (systèmes d’exploitation) + logiciels d’application

Logiciel de base (Système d’exploitation) ® faire fonctionner l’ordinateur (le


plus important) : interface entre l’utilisateur et l’ordinateur (ressources
hardware + software).
Page |7

Logiciels d’application : résoudre les problèmes de l’utilisateur

Les logiciels peuvent être donc classés en deux catégories :

• les programmes d'application des utilisateurs


• les programmes système qui permettent le fonctionnement de l'ordinateur. Parmi
- ceux-ci, le système d'exploitation (système d’exploitation dans la suite). Le
système d’exploitation contrôle les ressources
- de l'ordinateur et fournit la base sur laquelle seront construits les programmes
- d'application.
• Le système d’exploitation soustrait le matériel au regard du programmeur
et offre une présentation agréable des fichiers. Evolution de l’ordinateur
est liée à celle des systèmes d’exploitation
Schématiquement, nous obtenons :
Ressources hardware
et software
Ordinateur

Système Interface
d’Exploitation

Utilisateur

En résumé :

Un système d'exploitation d'un ordinateur ou d'une installation informatique


est un ensemble de programmes qui remplissent deux grandes fonctions :
• gérer les ressources de l'installation matérielle en assurant leurs partages
entre un ensemble plus ou moins grand d'utilisateurs ; il ordonne et
contrôle l'allocation des processeurs, des mémoires, des icônes et
fenêtres, des périphériques, des réseaux entre les programmes qui les
Page |8

utilisent. Il assiste les programmes utilisateurs. Il protège les utilisateurs


dans le cas d'usage partagé.
• assurer un ensemble de services en présentant aux utilisateurs une
interface mieux adaptée à leurs besoins que celle de la machine physique.
En d’autres termes Il propose à l'utilisateur une abstraction plus simple et
plus agréable que le matériel : une machine virtuelle

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


à réaliser des tâches mettant en jeu le traitement automatique de l'information.
La communication d'un tel système avec le monde extérieur est assurée par des
organes d'accès ; ceux ci permettent également une interaction avec des
dispositifs physiques que le système informatique est chargé de surveiller ou
piloter.
La fonction d'un système informatique est la fourniture de prestations (services)
capables d'aider à la réalisation de problèmes usuels :
• Gestion de l'information : stockage, désignation, recherche,
communication, protection contre les intrusions ou les incidents ;
• Préparation et mise au point de programmes ;
• Gestion de l'ensemble des ressources pour permettre l'exploitation des
programmes (c'est−à−dire création d'un environnement nécessaire à
l'exécution du programme).
• Gestion et partage de l'ensemble des ressources (matériels,
informations,...) entre l'ensemble des usagers.

On peut considérer que cet ensemble de prestations, fournies par le système


d'exploitation, constitue pour l'usager de ce système, une machine nouvelle
qualifiée d'abstraite ou de virtuelle, par opposition à la machine physique
réalisée par l'assemblage de composants matériels.
• Logiciel d'application ;
• Logiciel de base ;
• Machine physique.
Le logiciel de base peut lui−même être décomposé en deux niveaux :
• Les outils et services (compilateurs, chargeurs, éditeurs, utilitaires, ...)
• Le système d'exploitation (noyau).
Page |9

Système Système de Programmes


Programmes
bancaire réservation de Jeux
d’application
d’avion
Compilateurs Editeurs Interprète
Programmes
de système
commandes
Système d’exploitation
Langage machine
Microprogramme Matériel
Dispositifs physiques

Dispositifs physiques = Ils se composent de circuits intégrés, de fils électriques,


de périphériques physiques ...
Microprogramme = C'est un logiciel de contrôle des périphériques (interprête).
Langage machine = C'est un ensemble (entre 50 et 300) d'instructions
élémentaires (ADD, MOVE, JUMP) pour effectuer le déplacement des données,
des calculs, ou la comparaison de valeurs.
Système d'exploitation = C'est un ensemble d'instructions plus simples, comme
LIRE UN BLOC DU FICHIER.

Autrement dit, on peut dire que le système d’exploitation fonctionne en deux


modes :
• Le mode noyau ou superviseur et
• le mode utilisateur (compilateur, éditeur, programmes utilisateurs,
interprète de commandes, etc.).

b. Modèle de VON NEUMAN


En dehors de l’ordinateur COLOSSUS (construit par le mathématicien ALAIN
TURING), le modèle qui la base de la plupart d’ordinateurs standards actuels,
c’est le modèle de VON NEUMAN (expert en sciences mathématiques et
physiques) présenté ci – après :
P a g e | 10

ENTREES MEMOIRE SORTIES

ALU
U.C
ACCU

U.C = Unité de Commande (Command Unit)


ALU = Unité Arithmétique Logique ( Arithmetic Logical Unit)
ACCU = Accumulateur (registre)

Processeur (CPU : Central Processing Unit) = U.C. + ALU + ACCU


Processeur = microprocesseur

c. Système à microprocesseurs

Un microprocesseur est une unité centrale de traitement (CPU). Il est le moteur


du traitement de l’information dans un micro – ordinateur. Il interprète et
exécute les instructions du programme. Il est relié directement ou indirectement
à tous les composants de l’ordinateur. Les contrôleurs d’entrée sortie
permettent de relier l’ordinateur aux différents équipements d’entrées – sorties
(clavier, souris, disque dur, imprimante, disquettes, flash, etc.).

Actuellement, les ordinateurs sont développés sous forme de système à


microprocesseurs de manière à être transporté ou dédicacé :

• au contrôle des paramètres fonctionnels d’une voiture (véhicule


informatisé, autonome, automatisé, etc.)
• au pilotage automatique des avions (ordinateur embarqué ou système
embarqué, drone)
• à une centrale téléphonique
P a g e | 11

2. Eléments de base d'un système d'exploitation

Les principales fonctions assurées par un système d’exploitation sont les suivantes :
• gestion de la mémoire principale et des mémoires secondaires, exécution
des E/S à faible débit (terminaux, imprimantes) ou haut débit (disques,
bandes),
• multiprogrammation, temps partagé, parallélisme : interruption,
ordonnancement, répartition en mémoire, partage des données
• lancement des outils du système (compilateurs, environnement
utilisateur,...) et des outils
• pour l'administrateur du système (création de points d'entrée,
modification de privilèges,...),
• Lancement des travaux,
• protection, sécurité ; facturation des services,
• réseaux

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


constituée d'un ensemble d'instructions étendues, spécifiques d'un système
d’exploitation, ou appels système. Généralement, les appels système
concernent soit les processus, soit le système de gestion de fichiers (SGF).

3. Les différentes classes de systèmes d'exploitation

1. Selon les services rendus


• Les systèmes d’exploitation mono/multi tâches.
Multitâches : capacité du système à pouvoir exécuter plusieurs processus
simultanément ; par exemple effectuer une compilation et consulter le fichier
source du programme correspondant. C'est le cas d'UNIX, d'OS/2 d'IBM et de
Windows 95.

• Les systèmes d’exploitation mono/multiutilisateurs :


Multiutilisateurs : capacité à pouvoir gérer un panel d'utilisateurs utilisant
simultanément les mêmes ressources matérielles. C'est le cas d'UNIX, de MVS,
de Gecos, etc.
P a g e | 12

2. Selon leur architecture


• Systèmes centralisés :
L'ensemble du système est entièrement présent sur la machine considérée. Les
machines éventuellement reliées sont vues comme des entités étrangères
disposant elles aussi d'un système centralisé. Le système ne gère que les
ressources de la machine sur laquelle il est présent. C'est le cas d'UNIX, même si
les applications réseaux (X11, FTP, Mail ...) se sont développées.

• Systèmes répartis (distributed systems) :


Les différentes abstractions du système sont réparties sur un ensemble
(domaine) de machines (site). Le système d'exploitation réparti apparaît aux
yeux de ses utilisateurs comme une machine virtuelle monoprocesseur même
lorsque cela n'est pas le cas. Avec un système réparti, l'utilisateur n'a pas à se
soucier de la localisation des ressources. Quand il lance un programme, il n'a pas
à connaître le nom de la machine qui l'exécutera. Ils exploitent au mieux les
capacités de parallélisme d'un domaine. Ils offrent des solutions aux problèmes
de la résistance aux pannes.

3. Selon leur capacité à évoluer


• Systèmes fermés (ou propriétaires) :
Ces types de système sont caractérisés par l’extensibilité réduite : quand on veut
rajouter des fonctionnalités à un système fermé, il faut remettre en cause sa
conception et refaire une archive (système complet). C'est le cas MSDOS. Il n'y a
donc aucun ou peu d'échange possible avec d'autres systèmes de type différent,
voir même avec des types identiques.

• Systèmes ouverts :
Par contre ces types de systèmes sont caractérisés par l’extensibilité accrue : il
est possible de rajouter des fonctionnalités et des abstractions sans avoir à
repenser le système et même sans avoir à l'arrêter sur une machine. Cela
implique souvent une conception modulaire basée sur le modèle « client-
serveur». Cela implique aussi une communication entre systèmes, nécessitant
des modules spécialisés.

4. Selon l'architecture matérielle qui les supporte


• Architecture monoprocesseur (temps partagé ou multiprogrammation):
P a g e | 13

Ressource processeur unique : Il a fallu développer un mécanisme de gestion des


processus pour offrir un (pseudo) parallélisme à l'utilisateur : c'est la
multiprogrammation ; il s'agit en fait d'une commutation rapide entre les
différents processus pour donner l'illusion d'un parallélisme.

• Architectures multiprocesseurs (parallélisme) :

On trouve une grande variété d'architectures multiprocesseurs :

- SIMD (Single Instruction Multiple Data) : Tous les processeurs exécutent


les mêmes instructions mais sur des données différentes.
- MIMD (Multiple Instructions Multiple Data) : Chaque processeur est
complètement indépendant des autres et exécute des instructions sur des
données différentes.
- PIPELINE : Les différentes unités d'exécution sont mises en chaîne et font
chacune partie du traitement à effectuer.

On parle aussi d'architecture faiblement ou fortement couplée.


- Architecture fortement couplée : Ce sont principalement des architectures
à mémoire commune.
- Architecture faiblement couplée : Ce sont des architectures où chaque
processeur possède sa propre mémoire locale ; c'est le cas d'un réseau de
stations.
- Architecture mixte : Ce sont des architectures à différents niveaux de
mémoire (commune et privée).

Remarque : Il n'y a pas de système universel pour cette multitude


d'architectures. Les constructeurs de supercalculateurs ont toujours développés
leurs propres systèmes. Aujourd'hui, compte tenu de la complexité croissante
des systèmes d'exploitation et du coût inhérent, la tendance est à
l'harmonisation notamment via le développement de systèmes polyvalents tels
que les systèmes répartis.

• Les systèmes « temps réel ».


Systèmes temps réel (TR) : Ce sont des systèmes pour lesquels l'exécution des
programmes est soumise à des contraintes temporelles. Les résultats de
P a g e | 14

l'exécution d'un programme n'est plus valide au delà d'un certain temps connu
et déterminé à l'avance. Généralement, on trouve des systèmes « temps réel »
dans les systèmes embarqués (satellites, sondes, avions, trains, téléphones
portables, ...).

On distingue deux types de contraintes temporelles : les contraintes strictes et


les contraintes relatives. Pour garantir ces contraintes, le système possède des
mécanismes spécifiques dont le but est de réduire l'indéterminisme des durées
d'exécution des programmes. C'est le cas de LinuxRT.

4. Différents types de noyaux des systèmes d’exploitation

Il existe toutes sortes de noyaux, plus ou moins spécialisés. Des noyaux


spécifiques à une architecture, souvent monotâches, d’autres généralistes et
souvent multitâches et multiutilisateurs. L’ensemble de ces noyaux peut être
divisé en deux approches opposées d’architectures logicielles : les noyaux
monolithiques et les micro-noyaux.

On considère généralement les noyaux monolithiques, de conception ancienne,


comme obsolètes car difficiles à maintenir et moins « propres ». Le noyau Linux
était déjà qualifié d’obsolète par Andrew Tanenbaum , dès sa création en 1991.
Il ne croyait pas, à l’époque, pouvoir faire un noyau monolithique multiplate-
forme et modulaire. La mise en place de micro-noyaux, qui consiste à déplacer
l’essentiel des fonctions du noyau vers l’espace utilisateur, est très intéressante
en théorie mais s’avère difficile en pratique. Ainsi les performances du noyau
Linux (monolithique) sont supérieures à celles de ses concurrents (noyaux
généralistes à micro-noyaux), sans compter qu’il fut finalement porté sur de très
nombreuses plates-formes et qu’il est modulaire depuis 1995.

Pour ces raisons de performance, les systèmes généralistes basés sur une
technologie à micro-noyau, tels que Windows et Mac OS X, n’ont pas un « vrai »
micro-noyau enrichi. Ils utilisent un micro-noyau hybride : certaines
fonctionnalités qui devraient exister sous forme de mini-serveurs se retrouvent
intégrées dans leur micro-noyau, utilisant le même espace d’adressage. Pour
Mac OS X, cela forme XNU : le noyau monolithique
BSD (Berkeley System Developpement) fonctionne en tant que service de Mach
P a g e | 15

et ce dernier inclut du code BSD dans son propre espace d’adressage afin de
réduire les latences.

Ainsi, les deux approches d’architectures de noyaux, les micro-noyaux et les


noyaux monolithiques, considérées comme diamétralement différentes en
termes de conception, se rejoignent quasiment en pratique par les micro-noyaux
hybrides et les noyaux monolithiques modulaires.

a. Les noyaux monolithiques

• Noyaux monolithiques non modulaires

Certains systèmes d’exploitation, comme d’anciennes versions de Linux, certains


BSD ou certains vieux Unix ont un noyau monolithique. C’est-à-dire que
l’ensemble des fonctions du système et des pilotes sont regroupés dans un seul
bloc de code et un seul bloc binaire généré à la compilation.

De par la simplicité de leur concept mais également de leur excellente vitesse


d’exécution, les noyaux monolithiques ont été les premiers à être développés et
mis en œuvre. Cependant, au fur et à mesure de leurs développements, le code
de ces noyaux monolithiques a augmenté en taille et il s’est avéré difficile de les
maintenir. Le support par les architectures monolithiques des chargements à
chaud ou dynamiques implique une augmentation du nombre de pilotes
matériels compilés dans le noyau, et par suite, une augmentation de la taille de
l’empreinte mémoire des noyaux. Celle-ci devint rapidement inacceptable. Les
multiples dépendances créées entre les différentes fonctions du noyau
empêchaient la relecture et la compréhension du code. L’évolution du code s’est
faite en parallèle à l’évolution du matériel, et des problèmes de portage ont alors
été mis en évidence sur les noyaux monolithiques.

En réalité les problèmes de la portabilité de code se sont révélés avec le temps


indépendants de la problématique de la technologie des noyaux. Pour preuve,
NetBSD est un noyau monolithique et est porté sur un très grand nombre
d’architectures, alors que des noyaux tels que HURD ou celui de Windows XP
utilisent des micro-noyaux censés faciliter le portage mais n’existent que pour
quelques architectures.
P a g e | 16

• Noyaux monolithiques modulaires

Pour répondre aux problèmes des noyaux monolithiques, ces derniers sont
devenus modulaires. Dans ce type de noyau, seules les parties fondamentales
du système sont regroupées dans un bloc de code unique (monolithique). Les
autres fonctions, comme les pilotes matériels, sont regroupées en différents
modules qui peuvent être séparés tant du point de vue du code que du point de
vue binaire.

La très grande majorité des systèmes actuels utilise cette technologie : Linux, la
plupart des BSD ou Solaris. Par exemple avec le noyau Linux, certaines parties
peuvent être non compilées ou compilées en tant que modules chargeables
directement dans le noyau. La modularité du noyau permet le chargement à la
demande de fonctionnalités et augmente les possibilités de configuration. Ainsi
les systèmes de fichiers peuvent être chargés de manière indépendante, un
pilote de périphérique changé, etc. Les distributions Linux, par exemple, tirent
profit des modules chargeables lors de l’installation. L’ensemble des pilotes
matériels sont compilés en tant que modules. Le noyau peut alors supporter
l’immense variété de matériel trouvé dans les compatibles PC. Après
l’installation, lors du démarrage du système, seuls les pilotes correspondants au
matériel effectivement présent dans la machine sont chargés en mémoire vive.
La mémoire est économisée.

Les noyaux monolithiques modulaires conservent les principaux atouts des


noyaux monolithiques purs dont ils sont issus. Ainsi, la facilité de conception et
de développement est globalement maintenue et la vitesse d’exécution reste
excellente. L’utilisation de modules implique le découpage du code source du
noyau en blocs indépendants. Ces blocs améliorent l’organisation et la clarté du
code source et en facilitent également la maintenance.

Les noyaux monolithiques modulaires conservent également un important


défaut des noyaux monolithiques purs : une erreur dans un module met en
danger la stabilité de tout le système. Les tests et certifications de ces
composants doivent être plus poussés.
P a g e | 17

D’un point de vue théorique, le grand nombre de lignes de code exécutées en


mode noyau engendre des problèmes de portabilité. La pratique contredit
largement la théorie et les noyaux modulaires sont aujourd’hui les plus portés.

b. Systèmes à micro-noyaux

Les limitations des noyaux monolithiques ont amené à une approche


radicalement différente de la notion de noyau : les systèmes à micro-noyaux. Ces
systèmes cherchent à minimiser les fonctionnalités dépendantes du noyau en
plaçant la plus grande partie des services du système d’exploitation à l’extérieur
de ce noyau, c’est-à-dire dans l’espace utilisateur. Ces fonctionnalités sont alors
fournies par de petits serveurs indépendants possédant souvent leur propre
espace d’adressage.

Un petit nombre de fonctions fondamentales est conservé dans un noyau


minimaliste appelé « micro-noyau ». L’ensemble des fonctionnalités
habituellement proposées par les noyaux monolithiques est alors assuré par les
services déplacés en espace utilisateur et par ce micro-noyau. Cet ensemble
logiciel est appelé « micro-noyau enrichi ».

Ce principe a de grands avantages théoriques : en éloignant les services « à


risque » des parties critiques du système d’exploitation regroupées dans le
noyau, il permet de gagner en robustesse et en fiabilité, tout en facilitant la
maintenance et l’évolutivité. En revanche, les mécanismes de communication
(IPC) qui deviennent fondamentaux pour assurer le passage de messages entre
les serveurs, sont très lourds et peuvent limiter les performances.

Avantages et inconvénients d’un système à micro-noyau :

Les avantages théoriques des systèmes à micro-noyaux sont la conséquence de


l’utilisation du mode protégé par les services qui accompagnent le micro-noyau.
En effet, en plaçant les services dans l’espace utilisateur, ceux-ci bénéficient de
la protection de la mémoire. La stabilité de l’ensemble en est améliorée : une
erreur d’un service en mode protégé a peu de conséquences sur la stabilité de
l’ensemble de la machine.
P a g e | 18

De plus, en réduisant les possibilités pour les services de pouvoir intervenir


directement sur le matériel, la sécurité du système est renforcée. Le système
gagne également en possibilités de configuration. Ainsi, seuls les services utiles
doivent être réellement lancés au démarrage. Les interdépendances entre les
différents serveurs sont faibles. L’ajout ou le retrait d’un service ne perturbe pas
l’ensemble du système. La complexité de l’ensemble est réduite.

Le développement d’un système à micro-noyau se trouve également simplifié en


tirant parti à la fois de la protection de la mémoire et de la faible
interdépendance entre les services. Les erreurs provoquées par les applications
en mode utilisateur sont traitées plus simplement que dans le mode noyau et ne
mettent pas en péril la stabilité globale du système. L’intervention sur une
fonctionnalité défectueuse consiste à arrêter l’ancien service puis à lancer le
nouveau, sans devoir redémarrer toute la machine.

Les micro-noyaux ont un autre avantage : ils sont beaucoup plus compacts que
les noyaux monolithiques. 6 millions de lignes de code pour le noyau Linux 2.6.0
contre en général moins de 50 000 lignes pour les micro-noyaux. La maintenance
du code exécuté en mode noyau est donc simplifiée. Le nombre réduit de lignes
de code peut augmenter la portabilité du système.

Les premiers micro-noyaux (comme Mach) n’ont pas tout de suite atteint ces
avantages théoriques. L’utilisation de nombreux services dans l’espace
utilisateur engendre les deux problèmes suivants :

1. La plupart des services sont à l’extérieur du noyau et génèrent un très


grand nombre d’appels système ;
2. Les interfaces de communication entre les services (IPC) sont complexes
et trop lourdes en temps de traitement.

Le grand nombre d’appels système et la communication sous-jacente sont un


défaut inhérent à la conception des micro-noyaux. Dans L4, il a été résolu en
plaçant encore plus de services en espace utilisateur. La rapidité de traitement
des IPC a pu être améliorée en simplifiant les communications au maximum, par
exemple en supprimant toute vérification des permissions, laissant ce soin aux
serveurs externes.
P a g e | 19

Ces modifications radicales ont permis d’obtenir de bonnes performances mais


elles ne doivent pas faire oublier qu’un micro-noyau doit être accompagné d’un
grand nombre de services pour fournir des fonctionnalités équivalentes à celles
des noyaux monolithiques. De plus, la grande liberté dont disposent les services
au niveau de la sécurité et de la gestion de la mémoire accroît la difficulté et le
temps de leur développement (ils doivent fournir leurs propres interfaces).

Architecture d’un micro-noyau enrichi par des services (micro-noyau enrichi)

Le tableau ci-dessous, présente l’association micro-noyaux – noyaux enrichis –


système d’exploitation.

Micro-noyau Micro-noyau Systèmes d’exploitation associés


enrichi
L4 HURD GNU/HURD
Mach (GNU HURD GNU/HURD
Mach)
Mach XNU Darwin
Mach XNU Mac OS X
P a g e | 20

c. Noyaux hybrides

La dénomination de « noyaux hybrides » désigne principalement des noyaux qui


reprennent des concepts à la fois des noyaux monolithiques et des micro-
noyaux, pour combiner les avantages des deux.

Lorsqu’au début des années 1990 les développeurs et concepteurs se sont


aperçus des faiblesses des premiers micro-noyaux, certains réintégrèrent
diverses fonctionnalités non fondamentales dans le noyau, pour gagner en
performance. Les micro-noyaux « purs » semblaient condamnés à l’échec.

Alors que la philosophie générale des systèmes à micro-noyaux est maintenue


(seules les fonctions fondamentales sont dans l’espace noyau), certaines
fonctions non critiques, mais très génératrices d’appels système, sont
réintégrées dans l’espace noyau. Ce compromis permet d’améliorer
considérablement les performances en conservant de nombreuses propriétés
des systèmes à micro-noyaux. Un exemple de ce type de noyau hybride est le
noyau XNU de Mac OS X. Il est basé sur le micro-noyau Mach 3.0 mais qui inclut
du code du noyau monolithique BSD au sein de l’espace noyau.

Cette dénomination est également utilisée pour désigner d’autres types de


noyaux, notamment les noyaux monolithiques sur micro-noyaux (temps réel ou
non) tels que L4Linux (Linux sur L4), MkLinux (le noyau Linux sur Mach), Adeos,
RTLinux et RTAI.

Plus rarement, on peut rencontrer le terme « noyau hybride » pour remplacer


improprement « noyau monolithique modulaire » ou « micro-noyau enrichi ».

d. Exo-noyaux

Étymologiquement, 'exo' signifie en grec 'hors de'. Un exo-noyau est donc un


système d'exploitation fonctionnant en espace utilisateur (en 'user-space', au
lieu du 'kernel-space' dans le cas des autres noyaux). Les fonctions et services du
système d'exploitation sont assurés par de petits modules qui, selon les
approches techniques, sont des librairies dynamiques (MIT, LibOSes) ou des
démons (IntraServices).
P a g e | 21

e. Méta-noyaux

Un « méta-noyau » est un ensemble de logiciels qui vise à appliquer la notion de


noyau informatique au niveau d’un réseau informatique, en créant une unique
couche de gestion des périphériques au niveau d’un réseau.

De cette manière, les logiciels peuvent être déployés et utilisés sur le réseau
informatique comme s’il s’agissait d’une machine unique, et l’ensemble des
logiciels fonctionnant sur cette plate-forme peuvent se partager les ressources
de manière intégrée, comme elle le ferait sur un noyau simple.

Un méta système doit également permettre la personnalisation, la gestion des


permissions ainsi que l’utilisation d’informations dépendant de la localisation.

Cette notion rejoint les notions de grappe de calcul, de machine virtuelle, de


serveur d’application et de CORBA.

f. Noyaux temps réel

Les noyaux temps réel sont fonctionnellement spécialisés. Ce sont des noyaux
généralement assez légers qui ont pour fonction de base stricte de garantir les
temps d’exécution des tâches. Il n’y a pas à proprement parler de notion de
rapidité de traitement ou de réactivité dans les noyaux temps réel, cette notion
est plutôt implicite à la garantie des temps d’exécution en comparaison aux
critères temporels de l’application industrielle (la réactivité d’un système de
freinage ABS n’a pas les mêmes critères temporels que le remplissage d’une cuve
de pétrole).

Très utilisés dans le monde de l’électronique embarquée, ils sont conçus pour
tourner sur des plates-formes matérielles limitées en taille, puissance ou
autonomie.

Les noyaux temps réel peuvent adopter en théorie n’importe quelle architecture
précédemment listée. Ils fournissent souvent deux interfaces séparées, l’une
spécialisée dans le temps réel et l’autre générique. Les applications temps réel
font alors appel à la partie temps réel du noyau.
P a g e | 22

Une des architectures souvent retenue est un noyau hybride qui s’appuie sur la
combinaison d’un micro-noyau temps réel spécialisé, allouant du temps
d’exécution à un noyau de système d’exploitation non spécialisé. Le système
d’exploitation non spécialisé fonctionne en tant que service du micro-noyau
temps réel. Cette solution permet d’assurer le fonctionnement temps réel des
applications, tout en maintenant la compatibilité avec des environnements
préexistants.

Par exemple, on peut avoir un micro-noyau temps réel allouant des ressources à
un noyau non temps réel tel que Linux (RTLinux, RTAI) ou Windows.
L’environnement GNU (resp. Windows) peut alors être exécuté à l’identique sur
le noyau pour lequel il a été conçu, alors que les applications temps réel peuvent
faire directement appel au micro-noyau temps réel pour garantir leurs délais
d’exécutions.

VxWorks est un noyau propriétaire temps réel très implanté dans l’industrie bien
que les systèmes à base de noyau Linux se déploient énormément et aient un
succès grandissant via RTAI (RTLinux étant breveté).
P a g e | 23

CHAPITRE II. FONCTIONS D’UN SYSTEME D’EXPLOITATION


1. INTRODUCTION

Le système d’exploitation est l’interface entre l’utilisateur et le matériel, sans lui


l’ordinateur entant que matériel ne peut être utilisé. Le système d’exploitation
joue alors plusieurs rôles, plusieurs fonctions. Ce chapitre tente de balayer
toutes ces fonctionnalités.

Les principales fonctions assurées par un Système d’exploitation sont les


suivantes :
• Gestion de la mémoire principale et des mémoires secondaires,
• Exécution des E/S à faible débit (terminaux, imprimantes) ou haut débit
(disques, bandes),
• Multiprogrammation, temps partagé, parallélisme: interruption,
ordonnancement, répartition en mémoire, partage des données
• Lancement des outils du système (compilateurs, environnement
utilisateur,...) et des outils pour l'administrateur du système (création de
points d'entrée, modification de privilèges,...),
• Lancement des travaux,
• Protection, sécurité ; facturation des services,
• Réseaux.

En résumé, les fonctionnalités d’un système d’exploitation peuvent être


représentées sur la figure ci-dessous :
P a g e | 24

2. DIFFERENTES FONCTIONNALITE

3.1. La gestion des processus


a. Aspects généraux des processus

Un processus est un programme qui s'exécute, ainsi que ses données, sa pile,
son compteur ordinal, son pointeur de pile et les autres contenus de registres
nécessaires à son exécution. Un processus fournit l'image de l'état d'avancement
de l'exécution d'un programme.
Les processus correspondent donc à l’exécution de tâches : les programmes des
utilisateurs, les entrées-sorties, … par le système. Un système d’exploitation doit
en général traiter plusieurs tâches en même temps. Comme il n’a, la plupart du
temps, qu’un processeur, il résout ce problème grâce à un pseudo-parallélisme.
Il traite une tâche à la fois, s’interrompt et passe à la suivante. La commutation
des tâches étant très rapide, l’ordinateur donne l’illusion d’effectuer un
traitement simultané.

Attention : ne pas confondre un processus (objet dynamique dont l'exécution


peut être suspendue, puis reprise), avec le texte d'un programme, source ou
exécutable.

Les processus des utilisateurs sont lancés par un interprète de commande. Ils
peuvent eux-mêmes lancer ensuite d’autres processus. On appelle le processus
créateur, le père, et les processus créés, les fils. Les processus peuvent donc se
P a g e | 25

structurer sous la forme d’une arborescence comme l’illustre la figure ci-


dessous.

Sur cette figure, P1, P2, …, P6 sont des processus. Au lancement du système, il
n’existe qu’un seul processus, qui est l’ancêtre de tous les autres. Les processus
sont composés d’un espace de travail en mémoire formé de 3 segments : la pile,
les données et le code et d’un contexte.

Les processus sont composés d’un espace de travail en mémoire formé de


3segments : la pile, les données et le code et d’un contexte.

Le code correspond aux instructions, en langage d’assemblage, du programme à


exécuter. La zone de données contient les variables globales ou statiques du
programme ainsi que les allocations dynamiques de mémoire. Enfin, les appels
de fonctions, avec leurs paramètres et leurs variables locales, viennent s’empiler
sur la pile. Les zones de pile et de données ont des frontières mobiles qui
croissent en sens inverse lors de l’exécution du programme. Parfois, on partage
la zone de données en données elles-mêmes et en tas. Le tas est alors réservé
aux données dynamiques.
P a g e | 26

Le contexte est formé des données nécessaires à la gestion des processus. Une
table contient la liste de tous les processus et chaque entrée conserve leur
contexte3. Les éléments de la table des processus de Minix, par exemple, ont la
forme simplifiée du tableau ci-dessous.
b. Simultanéité et ressources

On appelle simultanéité l'activation de plusieurs processus au même moment.


Si le nombre de processeurs est au moins égal au nombre de processus, on parle
de simultanéité totale ou vraie, sinon de pseudo-simultanéité. Pseudo-
simultanéité : c’est par exemple l'exécution enchevêtrée de plusieurs processus
sur un seul processeur. La simultanéité est obtenue par commutation temporelle
d'un processus à l'autre sur le processeur. Si les basculements sont suffisamment
fréquents, l'utilisateur a l'illusion d'une simultanéité totale.

Dans le langage de la programmation structurée, on encadre par les mots-clés


parbegin et parend les sections de tâches pouvant s'exécuter en parallèle ou
simultanément. Avec un système d’exploitation qui gère le temps partagé
(pseudo-parallèlisme par commutation de temps), conceptuellement chaque
processus dispose de son propre processeur virtuel. Ainsi, concrètement il
n'existe qu'un seul compteur ordinal dont le contenu est renouvelé à chaque
commutation. Conceptuellement, tout se passe comme si chaque processus
disposait de son propre compteur ordinal.
P a g e | 27

Dans certains systèmes d’exploitation, il existe des appels système pour créer un
processus, charger son contexte et lancer son exécution. Dans d'autres systèmes
d’exploitation, un processus particulier (INIT sous UNIX) est lancé au démarrage
de la machine. Il crée un processus par terminal. Chacun de ces processus attend
une éventuelle connexion, et lorsqu'une connexion est validée, il lance un
nouveau processus chargé de lire et d'interpréter les commandes de l'utilisateur
(Shell sous UNIX). Chacune de ces commandes peut elle-même créer un nouveau
processus, etc. On aboutit ainsi à une arborescence de processus.

Les processus, dans UNIX/LINUX, sont créés par l’appel système FORK qui crée
une copie conforme du processus appelant. A la suite du FORK, le processus père
continue à s’exécuter en parallèle avec le processus fils et peut créer d’autres
processus fils et avoir ainsi plusieurs fils en cours d’exécution.

c. Les différents états d’un processus

De façon simplifiée, on peut imaginer un système d’exploitation dans lequel les


processus pourraient être dans trois états, après leur création :

Création
Prêt

Bloqué

Elu (Actif)

• Elu (actif) : en cours d'exécution. Un processus élu peut être arrêté (en
attente de données), même s'il peut poursuivre son exécution, si le
système d’exploitation décide d'allouer le processeur à un autre
processus.
P a g e | 28

• Bloqué : il attend un événement extérieur pour pouvoir continuer (par


exemple une ressource; lorsque la ressource est disponible, il passe à l'état
"prêt")
• Prêt : suspendu provisoirement pour permettre l'exécution d'un autre
processus et peut revenir à l’état prêt lorsque l’ordonnanceur lui restitue
le processeur.

Le modèle processus permet une approche claire du fonctionnement de


l'ordinateur : processus utilisateurs, processus systèmes (processus terminaux,
processus disques, etc...) qui se bloquent par défaut de ressource, qui passent
de l'état élu à l'état prêt. Dans ce modèle, la couche la plus basse du système
d’exploitation est l'ordonnanceur (scheduler). Il est surmonté d'une multitude de
processus. La gestion des interruptions, la suspension et la relance des processus
sont l'affaire de l'ordonnanceur.
P a g e | 29

d. Création et destruction des processus

Une fois le concept de processus acquis, la première question à se poser est


comment les processus sont-ils créés et détruits ?

La création de processus se fait avec un appel système. Dans le monde Unix, il


s'agit de l'appel FORK qui crée une copie exacte du processus parent. Ce
processus peut alors se remplacer par un autre programme. Dans le monde
Windows, cette création se fait en une seule étape, via un appel système
complexe qui crée un nouveau processus. Les deux approches ont leurs
avantages et leurs inconvénients, l'approche Unix peut avoir un coût important
en performances puisque les informations doivent être dupliquées pour, en
général, être détruites peu de temps avant. Mais cette approche apporte plus
de flexibilité, par exemple, elle permet de mettre en place un certain nombre de
paramètres (variables d'environnement, fichiers ouverts, limites d'utilisation de
ressources, ...) sur le processus fils avant de procéder à l'exécution du
programme.

La destruction de processus est plus délicate. On peut globalement considérer


trois causes de destruction d'un processus :
P a g e | 30

1. par le processus lui-même, lorsqu'il a fini d'effectuer son traitement ;


2. par le système d'exploitation, en cas d'erreur non réparable ;
3. par un autre processus (par exemple, par une action d'un utilisateur).

La troisième méthode pose elle de très nombreuses questions sur la politique de


sécurité, savoir quel processus a le droit, ou non, de détruire un autre processus.
Sous Unix, chaque processus appartient à un utilisateur, et ne peut être détruit
que par cet utilisateur là, ou par l'administrateur système.
e. Réalisation des processus

Pour mettre en œuvre le modèle des processus, le système d’exploitation gère


une table des processus dont chaque entrée correspond à un processus. Chaque
ligne peut comporter des informations sur un processus : son état, son compteur
ordinal, son pointeur de pile, son allocation mémoire, l'état de ses fichiers
ouverts, et d'autres paramètres.

Dans bien des systèmes d’exploitation, on associe à chaque périphérique


d'entrée / sortie une zone mémoire appelée vecteur d'interruptions. Il contient
les adresses des procédures de traitement des interruptions. Lorsqu'une
interruption survient, le contrôle est donné à l'ordonnanceur qui détermine si le
processus élu doit être suspendu ou bien (par exemple, s'il s'agit du processus
traitant une interruption plus prioritaire) s'il doit poursuivre son exécution en
empilant l'interruption qui vient d'arriver.

f. Mécanismes de commutation

La commutation des tâches, le passage d’une tâche à une autre, est réalisée par
un ordonnanceur au niveau le plus bas du système. Cet ordonnanceur est activé
par des interruptions :

• d’horloge,
• de disque,
• de terminaux.

À chaque interruption correspond un vecteur d’interruption, un emplacement


mémoire, contenant une adresse. L’arrivée de l’interruption provoque le
branchement à cette adresse. Une interruption entraîne, en général, les
opérations suivantes :
P a g e | 31

• empilement du compteur ordinal, du registre d’état et peut être d’autres


registres. La procédure logicielle d’interruption sauvegarde les éléments
de cette pile et les autres registres dans du contexte du processus en
cours;
• mise en place d’une nouvelle pile permettant le traitement des
interruptions;
• appel de l’ordonnanceur;
• élection d’un nouveau programme;

On parle aussi de TRAP ou déroutement sur erreur, qui est une extension du
mécanisme des interruptions. En cas de détection d'erreur interne au processus
(ex : division par 0, erreur d'adressage), le contrôle est passé au système
d’exploitation en cas d'erreur mettant en cause son intégrité (ex : erreur
d'adressage) ou à une fonction de traitement de l'erreur du processus courant.

L’appel au superviseur (noyau du système d’exploitation) : dans un système


d’exploitation multi-utilisateur multi-programmé, toutes les interruptions sont
contrôlées par le superviseur. Une raison (pas unique) : l'événement qui
interrompt un processus est peut être destiné à un autre; comme le système
d’exploitation doit garantir l'indépendance des processus, c'est lui qui doit
récupérer l'événement pour le transmettre au processus destinataire. Ainsi, en
cas d'interruption :
o on sauve le mot d'état et le contexte du processus en cours et on
passe en mode superviseur (ou noyau ou système)
o le traitement de l'interruption est réalisé soit par le superviseur
lui-même (horloge, coupure), soit par un processus spécifique
(pilote de périphérique d'E/S), soit par le processus interrompu
(erreur interne)
o on élit un nouveau processus à exécuter (peut-être celui qui avait
été interrompu)
g. Modèle de représentation de processus

1. Décomposition en tâches
P a g e | 32

On appelle tâche une unité élémentaire de traitement ayant une cohérence


logique. Si l'exécution du processus P est constituée de l'exécution séquentielle
des tâches T1, T2,..., Tn, on écrit :

P = T1 T2...Tn

A chaque tâche Ti, on associe sa date de début ou d'initialisation di et sa date


de terminaison ou de fin fi.

Une relation de précédence, notée <, sur un ensemble E est une relation vérifiant :

• Si T Î E, on n'a pas T < T


• Si T Î E et T' Î E, on n'a pas simultanément T < T' et T' < T
• La relation < est transitive

La relation Ti < Tj entre tâches signifie que fi inférieur à dj entre dates. Si on n'a
ni Ti < T j, ni
Tj < Ti, alors on dit que Ti et Tj sont exécutables en parallèle.

Une relation de précédence peut être représentée par un graphe orienté. Par
exemple, la chaîne de tâches S = ((T1, T2, T3), (Ti < Tj pour i inférieur à j)) a pour
graphe :

T1 T3
T2

Que l’on peut simplifier, en représentant le graphe de la plus petite relation qui
a même fermeture transitive que la relation de précédence : c'est le graphe de
précédence :

T1 T3
T2
P a g e | 33

On munit l'ensemble des graphes de précédence de deux opérations :

• la composition parallèle : G1 et G2 étant deux graphes de précédence


correspondant à des ensembles de tâches disjoints, G1 // G2 est l'union
de G1 et de G2
• le produit : G1 * G2 reprend les contraintes de G1 et de G2 avec en plus
la contrainte qu'aucune tâche de G2 ne peut être initialisée avant que
toutes les tâches de G1 ne soient achevées.

T1 T6 T7

T2 T3 T8 G2
G1

T4 T5

T1

T2 T3

G1 * G2
T4 T5

T6 T7

T8

2. Parallèlisation de tâches dans un système de tâches

La mise en parallèle s'effectue par la structure algorithmique :

parbegin
............
parend
P a g e | 34

Exemple 1 : peut-on représenter le graphe suivant de tâches par un programme


parallèle utilisant parbegin et parend

lire a lire b

c <- a * a d <- b * b

e <- c + d

Un algorithme simple de cette représentation peut être donné par ce qui suit :

Début
parbegin
lire a
lire b
parend
parbegin
c ß a * a
d ß b * b
parend
e ß c + d
fin

Exemple 2 : Nous avons la possibilité de représenter le graphe suivant de tâches


par un programme parallèle utilisant parbegin et parend

1 2

3 4
P a g e | 35

Pour augmenter le degré de multiprogrammation, donc le taux d'utilisation de


l'UC, on peut exécuter en parallèle certaines tâches d'un processus séquentiel.

Exemple 3 : soit un système S0


T1 lire X
T2 lire Z
T3 X ß X + Z
T4 Y ß X + Z
T5 afficher Y

Le système S1 répartit les 5 tâches du système S0 en deux processus parallèles


organisés chacun séquentiellement :

(S1)
P1 P2
T1 T2
T3 T4
T5
S1 n'est pas équivalent à S (affichage pas forcément identique). S1 est
indéterminé.

Le système S2 peut être représenté comme ci-dessous :


( S2)

T1 T2

T3
T4
T5

Méthode d'étude : Supposons la mémoire composée de m cellules : M = (C1, C2,


..., Cm) L'état initial du système est S0 = (C1 (0), C2 (0), ..., Cm (0)), L'état k du
système ( k Î [1 , l ]) est Sk = ( C1 (k), C2 (k), ..., Cm (k)) après l'événement ak du
comportement w = a1 a2....aj

Par exemple, considérons le problème :


P a g e | 36

T1 lire X
T2 lire Z
T3 Xß X+Z
T4 YßX+Z
T5 afficher Y

On a donc :
- M= (X, Y, Z)
- S0 = (0, 0, 0)
- w = d1 f1 d2 f2 d3 f3 d4 f4 d5 f5 et

A une tâche quelconque T, on associe :

• Son domaine de lecture : L = {C'1, ........, C'p} ou ensemble des cellules lues par T
• Son domaine d'écriture : E = {C"1, ........, C"p} ou ensemble des cellules
écrites par T. Ecrire signifie plus généralement modifier l'état d'une
ressource.

Dans l'exemple que nous développons, nous obtenons les domaines ci-après:

L1 = Æ E1 = {X}
L2 = Æ E2 = {Z}
L3 = {X, Z} E3 = {X}
L4 = {X, Z} E4 = {Y}
L5 = {Y} E5 = Æ
P a g e | 37

h. Ordonnancement des processus

L'ordonnanceur (scheduler) définit l'ordre dans lequel les processus prêts


utilisent l'UC (en acquièrent la ressource) et la durée d'utilisation, en utilisant
un algorithme d'ordonnancement. C’est donc l’ordonnancement qui règle les
transitions d’un état à un autre des différents processus.

Cet ordonnancement a pour objectifs :


• de maximiser l’utilisation du processeur;
• d’être équitable entre les différents processus;
• de présenter un temps de réponse acceptable;
• d’avoir un bon rendement;
• d’assurer certaines priorités;

Un bon algorithme d'ordonnancement doit donc posséder les qualités suivantes


:
• équitabilité : chaque processus reçoit sa part du temps processeur
• efficacité : le processeur doit travailler à 100 % du temps
• temps de réponse : à minimiser en mode interactif
• temps d'exécution : minimiser l'attente des travaux en traitement par
lots (batch)
• rendement : maximiser le nombre de travaux effectués par unité de
temps

On appelle temps de traitement moyen d'un système de tâches la moyenne des


intervalles de temps séparant la soumission d'une tâche de sa fin d'exécution.

On appelle assignation la description de l'exécution des tâches sur le ou les


processeurs. A chaque tâche Ti du système de tâches, on associe deux réels :

- ti : sa date d'arrivée
- t i : sa durée

On peut distinguer deux familles d'algorithmes :


P a g e | 38

• Algorithme Sans Réquisition (ASR) : le choix d'un nouveau processus ne se


fait que sur blocage ou terminaison du processus courant (utilisé en batch
par exemple)

• Algorithme Avec Réquisition (AAR) : à intervalle régulier, l'ordonnanceur


reprend la main et élit un nouveau processus actif

1. Algorithme Sans Réquisition (ASR)

On utilise :

• soit l'ordonnancement dans l'ordre d'arrivée en gérant une file des


processus (FIFO : First First Out). Cet algorithme est facile à implanter,
mais il est loin d'optimiser le temps de traitement moyen.
• soit l'ordonnancement par ordre inverse du temps d'exécution (PCTE :
Plus Court Temps d’Execution) : lorsque plusieurs travaux d'égale
importance se trouvent dans une file, l'ordonnanceur élit le plus court
d'abord.

On démontre que le temps moyen d'attente est minimal par rapport à toute
autre stratégie si toutes les tâches sont présentes dans la file d'attente au
moment où débute l'assignation. En effet, considérons 4 travaux dont les durées
d'exécution sont a, b, c, d. Si on les exécute dans cet ordre, le temps moyen
d'attente sera : (4a + 3b + 2c + d)/4. Comme a possède le plus grand poids (4), il
faut donc que « a » soit le temps le plus court, etc...

2. Algorithme Avec Réquisition (AAR)

2.1. Ordonnancement circulaire ou tourniquet (round robin)

Il s'agit d'un algorithme ancien, simple et fiable. Le processeur gère une liste
circulaire de processus. Chaque processus dispose d'un quantum de temps
pendant lequel il est autorisé à s'exécuter. Si le processus actif se bloque ou
s'achève avant la fin de son quantum, le processeur est immédiatement alloué
à un autre processus. Si le quantum s'achève avant la fin du processus, le
P a g e | 39

processeur est alloué au processus suivant dans la liste et le processus


précédent se trouve ainsi en queue de liste.

La commutation de processus (overhead) dure un temps non nul pour la mise à


jour des tables, la sauvegarde des registres. Un quantum trop petit provoque
trop de commutations de processus et abaisse l'efficacité du processeur. Un
quantum trop grand augmente le temps de réponse en mode interactif. On
utilise souvent un quantum de l'ordre de 100 ms.

2.2. Ordonnancement PCTER

Il s'agit d'une généralisation avec réquisition de l'algorithme PCTE : à la fin de


chaque quantum, on élit la tâche dont le temps d'exécution restant est minimal
(PCTER = plus court temps d'exécution restant). Cet algorithme fournit la valeur
optimale du temps moyen de traitement pour les algorithmes avec réquisition.

2.3. Ordonnancement avec priorité

Le modèle du tourniquet suppose tous les processus d'égale importance. C'est


irréaliste. D'où l'attribution de priorité à chaque processus. L'ordonnanceur
lance le processus prêt de priorité la plus élevée. Pour empêcher le processus
de priorité la plus élevée d'accaparer le processeur, l'ordonnanceur abaisse à
chaque interruption d'horloge la priorité du processus actif. Si sa priorité
devient inférieure à celle du deuxième processus de plus haute priorité, la
commutation a lieu.

Une allocation dynamique de priorité conduit souvent à donner une priorité


élevée aux processus effectuant beaucoup d'E/S. On peut aussi allouer une
priorité égale à l'inverse de la fraction du quantum précédemment utilisée. Par
exemple un processus ayant utilisé 2 ms d'un quantum de 100 ms, aura une
priorité de 50.

A chaque niveau de priorité, on associe une liste (classe) de processus


exécutables, gérée par l'algorithme du tourniquet. Par exemple, supposons 4
niveaux de priorité. On applique à la liste de priorité 4 l'algorithme du
P a g e | 40

tourniquet. Puis, quand cette liste est vide, on applique l'algorithme à la liste de
priorité 3, etc... S'il n'y avait pas une évolution dynamique des priorités, les
processus faiblement prioritaires ne seraient jamais élus : risque de famine.

Exemple : VAX/VMS de DEC et OS/2 d'IBM

2.4. Ordonnancement avec files multiples

On associe une file d'attente et un algorithme d'ordonnancement à chaque


niveau de priorité. Si les priorités évoluent dynamiquement, le système
d’exploitation doit organiser la remontée des tâches.
Exemple : UNIX dont le mode d'ordonnancement sera présenté dans un
chapitre ultérieur
2.5. Ordonnancement par une politique

S'il y a n utilisateurs connectés, on peut garantir à chacun qu'il disposera de 1/n


de la puissance du processeur. Le système d’exploitation mémorise combien
chaque utilisateur a consommé de temps processeur et il calcule le rapport:
temps processeur consommé/temps processeur auquel on a droit. On élit le
processus qui offre le rapport le plus faible jusqu'à ce que son rapport cesse
d'être le plus faible.

2.6. Ordonnancement à deux niveaux

La taille de la mémoire centrale de l'ordinateur peut être insuffisante pour


contenir tous les processus prêts à être exécutés. Certains sont contraints de
résider sur disque. Un ordonnanceur de bas niveau (CPU scheduler) applique
l'un des algorithmes précédents aux processus résidant en mémoire centrale.
Un ordonnanceur de haut niveau (medium term scheduler) retire de la
mémoire les processus qui y sont resté assez longtemps et transfère en
mémoire des processus résidant sur disque. Il peut exister un ordonnanceur à
long terme (job scheduler) qui détermine si un processus utilisateur qui le
demande peut effectivement entrer dans le système (si les temps de réponse
se dégradent, on peut différer cette entrée).
P a g e | 41

L'ordonnanceur de haut niveau prend en compte les points suivants :


• depuis combien de temps le processus séjourne-t-il en mémoire ou sur
disque ?
• combien de temps processeur le processus a-t-il eu récemment ?
• quelle est la priorité du processus ?
• quelle est la taille du processus ? (s'il est petit, on le logera sans
problème)

2.7. Ordonnancement de chaînes de tâches

Supposons que l'on ait r chaînes de tâches à exécuter en parallèle : C1, C2, ...,
Cr avec : Ci = Ti1 Ti 2 Ti 3 .... Tik , c'est à dire que la chaîne C1 comprend k1 tâches,
i

la chaîne C2 comprend k2 tâches, etc... On note : k1 + k2 + ... + kr = n (nombre


total de tâches).
On note : t ij la durée de la tâche Tij

Il existe un algorithme produisant une assignation de temps moyen de


traitement minimal :

Pour chaque chaîne Ci , calculer la durée moyenne


d'exécution (pas de traitement) e ip de chaque sous-
chaîne C 'ip , pour p = 1 à ki
Tant qu'il existe des tâches non assignées
déterminer j tel que : e jp = min { e mp | m = 1 j m

, 2 , ... , n }
Ajouter à l'assignation les tâches de la sous-
chaîne C ' jp et les supprimer de la chaîne C j
j

Recalculer e jp pour la nouvelle chaîne Cj


j

Fin tant que


P a g e | 42

2.2. Gestion de la mémoire

Pour pouvoir utiliser un ordinateur en multiprogrammation, le système


d’exploitation charge plusieurs processus en mémoire centrale (MC). La façon la
plus simple consiste à affecter à chaque processus un ensemble d'adresses
contiguës.
Quand le nombre de tâches devient élevé, pour satisfaire au principe
d'équitabilité et pour minimiser le temps de réponse des processus, il faut
pouvoir simuler la présence simultanée en mémoire centrale de tous les
processus. D'où la technique de "va et vient" ou recouvrement (swapping), qui
consiste à stocker temporairement sur disque l'image d'un processus, afin de
libérer de la place en mémoire centrale pour d'autres processus.

D'autre part, la taille d'un processus doit pouvoir dépasser la taille de la mémoire
disponible, même si l'on enlève tous les autres processus. L'utilisation de pages
(mécanisme de pagination) ou de segments (mécanisme de segmentation)
permet au système de conserver en mémoire centrale les parties utilisées des
processus et de stocker, si nécessaire, le reste sur disque.

Le rôle du gestionnaire de la mémoire est de connaître les parties libres et


occupées, d'allouer de la mémoire aux processus qui en ont besoin, de récupérer
de la mémoire à la fin de l'exécution d'un processus et de traiter le
recouvrement entre le disque et la mémoire centrale, lorsqu'elle ne peut pas
contenir tous les processus actifs.

a. Gestion sans recouvrement, ni pagination

• Monoprogrammation

Dans le cadre de la monoprogrammation, il n’ya que :


- un seul processus utilisateur,
- le processus système (pour partie en RAM, pour partie en ROM; la partie
en ROM étant appelée BIOS [Basic Input Output System])
- les pilotes de périphériques
P a g e | 43

Cette technique en voie de disparition est limitée à quelques micro-ordinateurs.


Elle n'autorise qu'un seul processus actif en mémoire à un instant donné.

• Multiprogrammation
La multiprogrammation est utilisée sur la plupart des ordinateurs : elle permet
de diviser un programme en plusieurs processus et à plusieurs utilisateurs de
travailler en temps partagé avec la même machine.
Supposons qu'il y ait n processus indépendants en mémoire centrale, chacun
ayant la probabilité p d'attendre la fin d'une opération d'E/S. La probabilité que
le processeur fonctionne est 1-pn. (Il s'agit d'une estimation grossière, puisque
sur une machine monoprocesseur, les processus ne sont pas indépendants
(attente de libération de la ressource processeur pour démarrer l'exécution d'un
processus prêt).
Toutefois, on remarque que plus le nombre n de processus en mémoire centrale
est élevé, plus le taux d'utilisation du processeur est élevé : on a donc intérêt à
augmenter la taille de la mémoire centrale. Une solution simple consiste à diviser
la mémoire en n partitions fixes, de tailles pas nécessairement égales (méthode
MFT [Multiprogramming with a Fixed number of Tasks ] apparue avec les IBM
360).

Il existe deux méthodes de gestion :

- on crée une file d'attente par partition. Chaque nouveau processus est
placé dans la file d'attente de la plus petite partition pouvant le contenir.
Inconvénients :
o on perd en général de la place au sein de chaque partition
o il peut y avoir des partitions inutilisées (leur file d'attente est vide)
- on crée une seule file d'attente globale. Il existe deux stratégies :
o dès qu'une partition se libère, on lui affecte la première tâche de
la file qui peut y tenir. Inconvénient : on peut ainsi affecter une
partition de grande taille à une petite tâche et perdre beaucoup de
place
o dès qu'une partition se libère, on lui affecte la plus grande tâche de
la file qui peut y tenir. Inconvénient : on pénalise les processus de
petite taille.
P a g e | 44

Avec le mécanisme de multiprogrammation, un processus peut être chargé


n'importe où en mémoire centrale. Il n'y a plus concordance entre l'adresse dans
le processus et l'adresse physique d'implantation. Le problème de l'adressage
dans un processus se résout par l'utilisation d'un registre particulier, le registre
de base : au lancement du processus, on lui affecte l'adresse de début de la
partition qui lui est attribuée.

On a alors :
Adresse physique = adresse de base (contenu de ce registre) + adresse relative
(mentionnée dans le processus). De plus, il faut empêcher un processus d'écrire
dans la mémoire d'un autre.

Deux solutions :
- des clés de protection : une clé de protection pour chaque partition,
dupliquée dans le mot d'état (PSW = Program Status Word) du processus
actif implanté dans cette partition. Si un processus tente d'écrire dans une
partition dont la clé ne concorde pas avec celle de son mot d'état, il y a
refus.
- un registre limite, chargé au lancement du processus à la taille de la
partition. Toute adresse mentionnée dans le processus (relative)
supérieure au contenu du registre limite entraîne un refus.

b. Gestion avec recouvrement, sans pagination

Dès que le nombre de processus devient supérieur au nombre de partitions, il


faut pouvoir simuler la présence en mémoire centrale de tous les processus pour
pouvoir satisfaire au principe d'équité et minimiser le temps de réponse des
processus. La technique du recouvrement (swapping) permet de stocker
temporairement sur disque des images de processus afin de libérer de la
mémoire centrale pour d'autres processus.

On pourrait utiliser des partitions fixes, mais on utilise en pratique des partitions
de taille variable, car le nombre, la taille et la position des processus peuvent
varier dynamiquement au cours du temps. On n'est plus limité par des partitions
trop grandes ou trop petites comme avec les partitions fixes. Cette amélioration
P a g e | 45

de l'usage de la mémoire centrale nécessite un mécanisme plus complexe


d'allocation et de libération.

• Opérations sur la mémoire

Le compactage de la mémoire permet de regrouper les espaces inutilisés. Très


coûteuse en temps UC, cette opération est effectuée le moins souvent possible.
S'il y a une requête d'allocation dynamique de mémoire pour un processus, on
lui alloue de la place dans le tas (heap) si le système d’exploitation le permet, ou
bien de la mémoire supplémentaire contiguë à la partition du processus
(agrandissement de celle-ci). Quand il n'y a plus de place, on déplace un ou
plusieurs processus :
- soit pour récupérer par ce moyen des espaces inutilisés,
- soit en allant jusqu'au recouvrement. A chaque retour de recouvrement
(swap), on réserve au processus une partition un peu plus grande que
nécessaire, utilisable pour l'extension de la partition du processus venant
d'être chargé ou du processus voisin.

Il existe trois façons de mémoriser l'occupation de la mémoire : les tables de bits


(bits maps), les listes chaînées et les subdivisions (buddy ).

a. Gestion de la mémoire par table de bits

On divise la mémoire centrale en unités d'allocations de quelques octets à


quelques Ko. A chaque unité, correspond un bit de la table de bits : valeur 0 si
l'unité est libre, 1 sinon. Cette table est stockée en mémoire centrale. Plus la
taille moyenne des unités est faible, plus la table occupe de place.

A un retour de recouvrement (swap), le gestionnaire doit rechercher


suffisamment de 0 consécutifs dans la table pour que la taille cumulée de ces
unités permette de loger le nouveau processus à implanter en mémoire centrale,
avec le choix entre trois critères possibles :

• la première zône libre (first fit) : algorithme rapide


• le meilleur ajustement (best fit), mais on peut créer ainsi de nombreuses
petites unités résiduelles inutilisables (fragmentation nécessitant un
compactage ultérieur)
P a g e | 46

• le plus grand résidu (worst fit), avec le risque de fractionnement


regrettable des grandes unités

b. Gestion de la mémoire par liste chaînée

On utilise une liste chaînée des zones libres en mémoire centrale. On applique :

• soit l'un des algorithmes précédents,


• soit un algorithme de placement rapide (quick fit ) : on crée des listes
séparées pour chacune des tailles les plus courantes, et la recherche est
considérablement accélérée.
A l'achèvement d'un processus ou à son transfert sur disque, il faut du temps
(mise à jour des listes chaînées) pour examiner si un regroupement avec ses
voisins est possible pour éviter une fragmentation excessive de la mémoire.

En résumé, les listes chaînées sont une solution plus rapide que la précédente
pour l'allocation, mais plus lente pour la libération.

c. Gestion de la mémoire par subdivisions (ou frères siamois)

Cet algorithme proposé par Donald KNUTH en 1973 utilise l'existence d'adresses
binaires pour accélérer la fusion des zones libres adjacentes lors de la libération
d'unités.

Le gestionnaire mémorise une liste de blocs libres dont la taille est une puissance
de 2 ( 1, 2, 4, 8 octets, ...., jusqu'à la taille maximale de la mémoire). Par exemple,
avec une mémoire de 1 Mo, on a ainsi 251listes. Initialement, la mémoire est
vide, toutes les listes sont vides, sauf la liste 1 Mo qui pointe sur la zone libre de
1 Mo :

1M

Un processus A demande 70 Ko : la mémoire est fragmentée en deux


compagnons (buddies) de 512 Ko; l'un d'eux est fragmenté en deux blocs de
256 Ko; l'un d'eux est fragmenté en deux blocs de 128 Ko et on loge A dans l'un
d'eux, puisque 64 < 70 < 128 :
P a g e | 47

A 128 256 512

Un processus B demande 35 Ko : l'un des deux blocs de 128 Ko est fragmenté


en deux de 64 Ko et on loge B dans l'un d'eux puisque 32 < 35 < 64 :

A B 64 256 512

Un processus C demande 80 Ko : le bloc de 256 Ko est fragmenté en deux de


128 Ko et on loge C dans l'un d'eux puisque 64 < 80 < 128 :

A B 64 C 128 512

A s'achève et libère son bloc de 128 Ko. Puis un processus D demande 60 Ko :


le bloc libéré par A est fragmenté en deux de 64 Ko, dont l'un logera D :

D 64 B 64 C 128 512

B s'achève, permettant la reconstitution d'un bloc de 128 Ko :

D 64 128 C 128 512

D s'achève, permettant la reconstitution d'un bloc de 256 Ko, etc...

256 C 128 512

L'allocation et la libération des blocs sont très simples. Mais un processus de


taille 2n + 1 octets utilisera un bloc de 2n+1 octets ! Il y a beaucoup de perte de
place en mémoire.

Dans certains systèmes, on n'alloue pas une place fixe sur disque aux processus
qui sont en mémoire. On les loge dans un espace de va et vient (swap area ) du
disque. Les algorithmes précédents sont utilisés pour l'affectation.
c. Gestion avec recouvrement avec pagination ou segmentation
P a g e | 48

La taille d'un processus doit pouvoir dépasser la taille de la mémoire physique


disponible, même si l'on enlève tous les autres processus. En 1961, J.
FOTHERINGHAM proposa le principe de la mémoire virtuelle : le système
d’exploitation conserve en mémoire centrale les parties utilisées des processus
et stocke, si nécessaire, le reste sur disque. Mémoire virtuelle et
multiprogrammation se complètent bien : un processus en attente d'une
ressource n'est plus conservé en mémoire centrale, si cela s'avère nécessaire.
La mémoire virtuelle fait appel à deux mécanismes : segmentation ou
pagination. La mémoire est divisée en segments ou pages. Sans recours à la
mémoire virtuelle, un processus est entièrement chargé à des adresses
contiguës ; avec le recours à la mémoire virtuelle, un processus peut être chargé
dans des pages ou des segments non contigus.

• La pagination

L'espace d'adressage d'un processus est divisé en petites unités de taille fixe
appelées pages. La mémoire centrale est elle aussi découpée en unités physiques
de même taille appelées cadres. Les échanges entre mémoire centrale et disques
ne portent que sur des pages entières. De ce fait, l'espace d'adressage d'un
processus est potentiellement illimité (limité à l'espace mémoire total de la
machine). On parle alors d'adressage virtuel.

Pour un processus, le système ne chargera que les pages utilisées. Mais la


demande de pages à charger peut être plus élevée que le nombre de cadres
disponibles. Une gestion de l'allocation des cadres libres est nécessaire.

Dans un système d’exploitation sans mémoire virtuelle, la machine calcule les


adresses physiques en ajoutant le contenu d'un registre de base aux adresses
relatives contenues dans les instructions du processus. Dans un système
d’exploitation à pagination, un sous-ensemble inséré entre l'UC et la mémoire
centrale, la MMU (Memory Management Unit ou unité de gestion de la
mémoire) traduit les adresses virtuelles en adresses physiques.

La MMU mémorise :
- les cadres physiques alloués à des processus (sous forme d'une table de
bits de présence)
P a g e | 49

- les cadres mémoire alloués à chaque page d'un processus (sous forme
d'une table des pages)
On dira qu'une page est mappée ou chargée si elle est physiquement présente
en mémoire.

Dans l'exemple précédent, les pages ont une taille de 4 Ko. L'adresse virtuelle
12292 correspond à un déplacement de 4 octets dans la page virtuelle 3 (car
12292 = 12288 + 4 et 12288 = 12*1024). La page virtuelle 3 correspond à la page
physique 2. L'adresse physique correspond donc à un déplacement de 4 octets
dans la page physique 2, soit : (8*1024) + 4 = 8196.

Par contre, la page virtuelle 2 n'est pas mappée. Une adresse virtuelle comprise
entre 8192 et 12287 donnera lieu à un défaut de page. Il y a défaut de page
quand il y a un accès à une adresse virtuelle correspondant à une page non
mappée. En cas de défaut de page, un déroutement se produit (trap) et le
processeur est rendu au système d’exploitation. Le système doit alors effectuer
les opérations suivantes :
- déterminer la page à charger
- déterminer la page à décharger sur le disque pour libérer un cadre
- lire sur le disque la page à charger
- modifier la table de bits et la table de pages

• La segmentation

Dans cette solution, l'espace d'adressage d'un processus est divisé en segments,
générés à la compilation. Chaque segment est repéré par son numéro S et sa
longueur variable L. Un segment est un ensemble d'adresses virtuelles contiguës.
Contrairement à la pagination, la segmentation est "connue" du processus : une
adresse n'est plus donnée de façon absolue par rapport au début de l'adressage
virtuel; une adresse est donnée par un couple (S , d), où S est le n° du segment
et d le déplacement dans le segment, d Î [0 , L [ .

Pour calculer l'adresse physique, on utilise une table des segments :


- B : adresse de base (adresse physique de début du segment)
- L : longueur du segment ou limite
- p : protection du segment
P a g e | 50

L'adresse physique correspondant à l'adresse virtuelle (S , d) sera donc B + d, si


d <= L

La segmentation simplifie la gestion des objets communs (rangés chacun dans


un segment), notamment si leur taille évolue dynamiquement.

• La pagination segmentée

Lorsque le système possède beaucoup de pages, la consultation de la table des


pages peut être lente et inefficace s'il y a beaucoup de pages non chargées. On
la segmente alors par processus.
Chaque processus possède une table des segments de la table des pages qui le
concernent.
Une adresse (P, r), avec P n° logique de page et r déplacement dans la page, est
transformée à la compilation en adresse (S , P' , r), avec S n° d'un segment et P'
.

• La segmentation paginée

La taille d'un segment peut être importante, d'où un temps de chargement long
qui peut en résulter. La pagination des segments peut être une solution. Une
adresse virtuelle (S, d), avec S n° de segment et d déplacement dans le segment,
est transformée en (S, P, d ), où P est un n° de page et d' un déplacement dans
la page P. Par Exemple avec l'hypothèse de pages de 4 Ko, l'adresse logique (2 ,
9200) est transformée en (2 , 2, 1200)

table des segments

adresse 0 200
(2 , 2 , 1200) 1000 table des pages
1
(une par segment)
2 15700
0
............
1 cadre dans lequel
on effectuera
2 le déplacement
limite de segment de 1200
...........

MC
P a g e | 51

Dans tous les cas, l'utilisation d'une mémoire associative, stockant des triplets
(S, P, adresse de cadre), gérée comme fenêtre au voisinage du dernier cadre
accédé, peut accélérer la recherche des cadres.

• Algorithmes de remplacement de pages

Les méthodes reposent sur 3 stratégies :


- une stratégie de chargement qui choisit les pages à charger et l'instant de
chargement ;
- une stratégie de placement qui choisit un cadre libre pour chaque page à
charger ;
- une stratégie de remplacement destinée à libérer certains cadres. La
recherche se fait soit sur l'ensemble des pages (recherche globale), soit
sur les pages "appartenant" au processus (recherche locale). Les stratégies
de placement sont dépendantes des stratégies de remplacement : on
charge nécessairement une page dans le cadre qui vient d'être libéré.

On peut distinguer deux catégories de méthodes :


- pagination anticipée : on charge les pages à l'avance; mais comment
prévoir efficacement ?
- pagination à la demande : le chargement n'a lieu qu'en cas de défaut de
page et on ne charge que la page manquante.

On appelle suite de références w = p1 p2 ... pn une suite de numéros de pages


correspondant à des accès à ces pages. On dira qu'un algorithme A de pagination
sur m cadres est stable si :
"m , " w , on a : Coût (A , m , w) Ü Coût ( A , m+1 , w)
Cette notion est importante pour éviter l'écroulement du système d’exploitation
(thrashing) par une génération excessive de défauts de pages.

c1. Remplacement de page optimal

Le système d’exploitation indexe chaque page par le nombre d'instructions qui


seront exécutées avant qu'elle ne soit référencée. En cas de nécessité, le
P a g e | 52

système d’exploitation retire la page d'indice le plus élevé, c'est à dire la page
qui sera référencée dans le futur le plus lointain.

Cet algorithme est pratiquement impossible à appliquer (comment calculer les


indices des pages ?). Toutefois, avec un simulateur, on peut évaluer les
performances de cet algorithme et s'en servir comme référence pour les
suivants. En outre, cet algorithme est stable.

c2. NRU (not recently used)

Le système d’exploitation référence chaque page par deux bits R (le plus à
gauche) et M initialisés à 0. A chaque accès en lecture à une page, R est mis à 1.
A chaque accès en écriture, M est mis à 1. A chaque interruption d'horloge, le
système d’exploitation remet R à 0.
Les bits R-M forment le code d'un index de valeur 0 à 3 en base 10. En cas de
défaut de page, on retire une page au hasard dans la catégorie non vide de plus
petit index. On retire donc préférentiellement une page modifiée non
référencée (index 1) qu'une page très utilisée en consultation (index 2). Cet
algorithme est assez efficace.

c3. FIFO (first in, first out)

Le système d’exploitation indexe chaque page par sa date de chargement et


constitue une liste chaînée, la première page de la liste étant la plus ancienne
ment chargée et la dernière la plus récemment chargée. Le système
d’exploitation replacera en cas de nécessité la page en tête de la liste et chargera
la nouvelle page en fin de liste.

Deux critiques à cet algorithme :


- ce n'est pas parce qu'une page est la plus ancienne en mémoire qu'elle est
celle dont on se sert le moins ;
- l'algorithme n'est pas stable : quand le nombre de cadres augmente, le
nombre de défauts de pages ne diminue pas nécessairement (on parle
de l'anomalie de BELADY : L.A. BELADY a proposé en 1969 un exemple à
4 cadres montrant qu'on avait plus de défaut de pages qu'avec 3).
P a g e | 53

Amélioration 1 : le système d’exploitation examine les bits R et M (gérés comme


ci-dessus en 4.2) de la page la plus ancienne en mémoire centrale (en tête de la
liste). Si cette page est de catégorie 0, il l'ôte. Sinon, il teste la page un peu moins
ancienne, etc... S'il n'y a aucune page de catégorie 0, il recommence avec la
catégorie 1, puis éventuellement avec les catégories 2 et 3.

Amélioration 2 : Algorithme de la seconde chance : R et M sont gérés comme ci-


dessus en 4.2. Le système d’exploitation examine le bit R de la page la plus
ancienne (tête de la liste). Si R = 0, la page est remplacée, sinon R est mis à 0, la
page est placée en fin de liste et on recommence avec la nouvelle page en tête.
Si toutes les pages ont été référencées depuis la dernière RAZ, on revient à FIFO,
mais avec un surcoût.

c4. LRU (least recently used)

En cas de nécessité, le système d’exploitation retire la page la moins récemment


référencée. Pour cela, il indexe chaque page par le temps écoulé depuis sa
dernière référence et il constitue une liste chaînée des pages par ordre
décroissant de temps depuis la dernière référence. L'algorithme est stable. Mais
il nécessite une gestion coûteuse de la liste qui est modifiée à chaque accès à
une page.

Variantes :

NFU (not frequently used) ou LFU (least frequently used) : le système


d’exploitation gère pour chaque page un compteur de nombre de références. Il
cumule dans ce compteur le bit R juste avant chaque RAZ de R au top d'horloge.
Il remplacera la page qui aura la plus petite valeur de compteur. Inconvénient :
une page qui a été fortement référencée, mais qui n'est plus utilisée ne sera pas
remplacée avant longtemps.

Vieillisement (aging) ou NFU modifié : avant chaque RAZ de R, le système


d’exploitation décale le compteur de 1 bit à droite (division entière par 2) et
additionne R au bit de poids fort. En cas de nécessité, on ôtera la page de
P a g e | 54

compteur le plus petit. Mais en cas d'égalité des compteurs, on ne sait pas quelle
est la page la moins récemment utilisée.

Matrice : s'il y a N pages, le système d’exploitation gère une matrice (N , N+1). A


chaque référence à la page p, le système d’exploitation positionne à 1 tous les
bits de la ligne p et à 0 tous les bits de la colonne p. En outre, le 1er bit de la ligne
p vaut 0 si la page est chargée, 1 sinon. On ôtera la page dont la ligne a la plus
petite valeur.

c5. Améliorations

Le dérobeur de pages : dès qu'un seuil minimal de cadres libres est atteint, le
système d’exploitation réveille un dérobeur de pages. Celui-ci supprime les
pages les moins récemment utilisées, par algorithme d'aging, et les range dans
la liste des cadres libres, ceci jusqu'à un seuil donné. Le système d’exploitation
vérifie qu'une page référencée sur défaut de page n'est pas dans la liste.

Problèmes d'entrée/sortie : on a intérêt, soit à verrouiller les pages concernées


par les E/S pour éviter de les ôter, soit à effectuer les E/S dans des tampons du
noyau et à copier les données plus tard dans les pages des utilisateurs.

Pages partagées : lorsque plusieurs processus exécutent le même ensemble de


code, on a intérêt à utiliser des pages de code partagées, plutôt que des pages
dupliquées. Mais on aura à prévoir une gestion spécifique des pages partagées
pour éviter des défauts de pages artificiels.

C6. Taille optimale des pages

Soit t la taille moyenne des processus et p (en octets) la taille d'une page. Soit e
(en octets) la taille de l'entrée de chaque page dans la table des processus. Le
nombre moyen de pages par processus est t/p. Ces pages occupent t*e/p octets
dans la table des processus. La mémoire perdue en moyenne dans la dernière
page d'un processus est p/2 (fragmentation interne). La perte totale q est donc
:
P a g e | 55

q = t*e/p + p/2

q est minimal si : dq/dp = 0, c'est à dire : p = (2 t*e)0.5

Exemple : t = 64 Ko, e = 8 octets, donc p = 1 Ko


Les valeurs courantes sont 1/2 Ko, 1 Ko, 2 Ko ou 4 Ko

c7. Le modèle du Working Set

Le modèle working-set de comportement d'un programme est une tentative


proposée par P.J. DENNING en 1968 pour comprendre les performances d'un
système paginé en multi-programmation. Il s'agit de raisonner non pas en terme
de processus isolés, mais d'effet des autres processus présents sur chacun d'eux,
de corréler allocation de mémoire et allocation du processeur.
Dans le cas d'un système mono-processeur, lorsque le degré de multi-
programmation augmente (nombre de processus présents en mémoire),
l'utilisation du processeur augmente : en effet, l'ordonnanceur a toutes les
chances de trouver à chaque instant un processus à exploiter.
Toutefois, si le degré de multi-programmation franchit un certain seuil, il
en résulte une forte croissance du trafic de pagination entre disques et mémoire
centrale, accompagnée d'une diminution brusque de l'utilisation du
processeur. Le haut degré de multi-programmation empêche chaque processus
de garder suffisamment de pages en mémoire pour éviter un grand nombre de
défauts de pages. Le canal de liaison avec le disque arrive à saturation et
beaucoup de processus sont bloqués par attente de transfert de pages. On parle
de thrashing (déconfiture) du processeur.
En d'autres termes, chaque processus exige un nombre minimal de pages
présentes en mémoire centrale (appelé son working-set) pour pouvoir
réellement utiliser le processeur. Le degré de multi-programmation doit être tel
que le working-set de tous les processus présents en mémoire doit être respecté.
Conceptuellement, on peut définir le working-set à un instant t :
w (t , h) = { ensemble des pages apparaissant dans les h dernières références }

DENNING a montré que w(h) avait un graphe tel que celui-ci :


P a g e | 56

Plus h croît, moins on trouve de pages en excédent dans le working-set. Cela


permet d'établir une valeur raisonnable de h (h0) tel qu'une valeur de h
supérieure à h0 n'accroîtrait pas beaucoup le working-set.

d. Partage de code et données en mémoire centrale

Des procédures peuvent être partagées entre plusieurs processus. On a intérêt


à ce qu'il n'y ait qu'une copie du code qui sera exécutée par chaque processus
avec ses propres données.
Par exemple deux processus P1 et P2 sont susceptibles d'utiliser une procédure
R. On ne peut pas prévoir l'ordre dans lequel ils vont entrer dans R ou sortir de
R. Si l'un des deux processus est désalloué pendant qu'il exécute R et qu'il voit
ses variables locales modifiées par l'exécution de R par l'autre processus, alors
on dit que R n'est pas ré-entrante.

• Cas de la pagination

Le partage du code et des données se fait par un double référencement aux


pages contenant les informations communes.
- Partage du code

Chaque fois qu'un processus fait référence à son propre code, il utilise un
numéro de page fixe qui le fait accéder toujours à la même page virtuelle. Donc,
si un processus partage son code, il va toujours référencer la même page
virtuelle, quelle que soit la table des pages utilisée. Chaque tâche doit donc
mettre le code exécutable de ce processus à la même adresse virtuelle.

- Partage de données

Pour partager des données, la zone commune peut être à des endroits différents
dans la table des pages de chacune des tâches. Soit une page commune P
contenant un pointeur q :
o si D pointe sur une adresse dans P, le numéro de cette page doit
être le même dans tous les processus ;
P a g e | 57

o si l'objet pointé n'est pas dans P, alors il doit avoir la même


adresse virtuelle dans tous les processus

- Solution habituelle

adresse de dé but de la zône adresse de dé but de la zône


de cod es partagés de d onnée s p arta gées

processu s 1

processu s 2

codes pa rtagé s don nées partages


adresses vi rtuel le s
non va lides

• Cas de la segmentation

Pour que deux processus référencent une partie commune, il suffit que cette
partie se trouve dans un segment qui possède le même descripteur dans la
table des segments de chacun des processus.

2.3. Gestion des entrées – sorties


2.3.1. Entrées-Sorties physiques

Les principes et les caractéristiques des périphériques sont sensés être vus dans
le cours d’architecture des Ordinateurs. Dans certains ordinateurs, des
instructions permettent la redirection des données issues de l'UC, non vers la
mémoire, mais vers un périphérique (solution INTEL); ou bien un accès mémoire
à une adresse réservée particulière est interprétée comme demande d'accès à
un périphérique (solution Motorola). Trois solutions sont utilisées pour faire
communiquer l'UC et les périphériques :
• Les contrôleurs
• Le DMA
• Les bus Le S.E comm

a. Contrôleurs
P a g e | 58

Chaque périphérique est connecté à l'ordinateur par l'intermédiaire d'une carte


électronique appelée interface ou adaptateur ou contrôleur de périphérique, qui
transforme les signaux du périphérique en signaux adaptés à l'UC et vice-versa.
Un contrôleur peut gérer un ou plusieurs périphériques. Le système
d’exploitation communique donc avec le contrôleur et non avec le périphérique
lui-même. Les petits ordinateurs utilisent des liaisons à bus entre les contrôleurs,
la mémoire et l'UC.

Toutes les données transitent par l'UC qui gère toutes les phases de la
transmission, du contrôle et de la synchronisation. Par exemple citons
l’imprimante, le clavier ou l’écran sur PC.
b. DMA (Direct Access Memory)

Pour éviter le ralentissement de l'UC par ces tâches de bas niveau, on utilise
parfois l'accès direct à la mémoire (DMA). Cette méthode utilise le transfert
direct entre le périphérique et la mémoire sous contrôle DMA, pour réaliser les
opérations d’E/S avec un périphérique rapide. Les paramètres suivants sont
utilisés :

- l’adresse bloc de données du départ


- l’adresse bloc arrivée
- le nombre de mots à transférer

BUSREG
MEMOIRE DMA P1 P2 Pn
BUSGR

DATA
Logique
décodage

Micro -
Processeur

Control
P a g e | 59

Il suffit de donner au contrôleur l'adresse où il doit accéder en mémoire,


l'opération (lecture ou écriture), le nombre d'octets à transférer entre la
mémoire principale et le tampon du contrôleur. Le contrôleur utilise les "temps
morts" du bus (vol de cycle ou cycle stealing).

L'UC conserve la responsabilité des fonctions de commande, de contrôle et une


partie de la synchronisation. En fin de transfert, le contrôleur émet une
interruption. Le système à microprocesseur utilise la méthode DMA pour les
opérations d’E/S. Par exemple le disque sur PC. Il est à noter que BUSREG et
BUSGR sont des bus de contrôle.

c. Canal

Sur les gros ordinateurs, des canaux d'E/S allègent le travail du processeur
principal pour sa communication avec les contrôleurs (contrôle et
synchronisation). Un canal d'E/S est un processeur spécialisé qui gère soit un seul
périphérique rapide, soit plusieurs périphériques multiplexés. Un canal utilise le
DMA. L'UC envoie au canal l'adresse en mémoire centrale du début du
programme de transfert à exécuter (programme canal). L'UC peut interrompre
l'exécution, scruter l'état d'avancement par consultation de registres du canal.
Un canal est une solution adaptée aux périphériques rapides des mini- et gros
ordinateurs.
D’autres canaux tels que les canaux multiplexés sont utilisés pour gérer plusieurs
échanges avec des périphériques à faible vitesse de transfert (ex : terminaux).
Voici le schéma des canaux d’entrées/sorties, processeurs spécialisés pour les
entrées/sorties:
P a g e | 60

MEMOIRE
PRINCIPALE

PROCESSEU
R

Canal E/S Canal E/S


multiplexe Spécialisé

Contrôleur Imprima Disqu Disqu Disqu


des nte e e e

2.3.2. Périphériques virtuels d'entrée-sortie

a. Mécanisme des périphériques virtuels

L'objectif est de rendre tout programme utilisateur indépendant des types de


périphériques, nombreux et en évolution constante, et des contrôles qui en
découlent. D'où la création de périphériques virtuels ou flots d'E/S ou fichiers
d'E/S. Sous UNIX, par exemple, une console, un disque ou un fichier ont la même
interface d'accès.
Les opérations possibles sur un flot sont :
• ouverture et association physique (open en C)
• fermeture et dissociation (close en C)
• lecture (read en C)
• écriture (write en C)
• paramétrage et contrôle (ioctl , seek en C)

La concordance entre un périphérique virtuel et un périphérique physique


associé est assurée par un pilote de périphérique (device driver) : soit un type de
pilote par type de périphérique, soit un seul type de pilotes configurable par des
descripteurs de périphériques. Un pilote est la seule partie du système
P a g e | 61

d’exploitation à connaître les registres du contrôleur, les secteurs et leur facteur


d'entrelacement, les pistes, les cylindres, les têtes, les déplacements des bras,
les moteurs, le temps de positionnement des têtes, etc..., ainsi que le traitement
des erreurs.

b. Fonctionnement d'un périphérique virtuel

Un processus P demande une E/S avec un périphérique. La correspondance


périphérique virtuel-périphérique physique est ainsi résolue :
• Appel système : les paramètres de l'appel sont empilés et un appel système
(Supervisor Call = requête SVC) est généré
• Action du superviseur : il identifie la nature de l'appel et récupère les
paramètres (nom du flot, nombre d'octets,
adresse de transfert); puis il identifie le pilote concerné et le périphérique
physique. Enfin, il appelle le pilote
• Pilote : le contexte du processus actif est commuté après sauvegarde. La
procédure de traitement des E/S est exécutée. Ensuite, le pilote envoie
une interruption pour le signaler. Le processus initial est rechargé et
réactivé. Comme il doit y avoir possibilité d'E/S simultanées, un pilote doit
être réentrant. En outre, chaque pilote gère une table des processus en
attente.

c. Problèmes d'interblocage des périphériques

Avec des périphériques partagés (disques,...), des problèmes d'interblocage


peuvent survenir. Nous pouvons citer deux exemples :

• un processus A demande le dérouleur et un processus B demande le


traceur de courbe. Les deux demandes sont prises en compte. Puis A
demande le traceur sans libérer le dérouleur et B demande le dérouleur
sans libérer le traceur ;
• un processus A verrouille l'enregistrement R1 d'une BD pour éviter les
conflits d'accès et un processus B verrouille l'enregistrement R2. Puis
chacun essaie de verrouiller l'enregistrement verrouillé par l'autre
P a g e | 62

COFFMAN, ELPHICK et SHOSHANI ont montré en 1971 qu'il faut réunir 4


conditions pour provoquer un interblocage :
• l'exclusion mutuelle : chaque ressource est soit disponible, soit attribuée à
un seul processus ;
• la détention et l'attente : les processus qui détiennent des ressources
peuvent en demander de nouvelles ;
• pas de réquisition : les ressources obtenues par un processus ne peuvent
pas lui être retirées, mais il doit les libérer explicitement ;
• l'attente circulaire : il doit y avoir au moins deux processus, chacun d'eux
attendant une ressource détenue par l'un des autres.

Il existe une solution à chacune des 4 conditions précédentes pour prévenir les
interblocages :
ü Exclusion mutuelle : usage d'un spoule :
Considérons une imprimante avec un fichier tampon associé. Un processus peut
ouvrir ce fichier et ne rien imprimer pendant des heures, bloquant tous les autres
processus voulant accéder à la ressource. On crée un processus particulier
appelé démon (daemon) et un répertoire spécial, le répertoire de spoule (spool).
Pour imprimer un fichier, un processus doit d'abord le lier au répertoire de
spoule. Le démon, seul processus à être autorisé à accéder au fichier spécial de
l'imprimante, imprime les fichiers du répertoire de spoule.
Une technique identique peut être utilisée pour la transmission de fichiers à
travers un réseau (démon de réseau, répertoire de spoule de réseau). Mais le
spoule ne peut pas résoudre tous les problèmes d'exclusion mutuelle (par
exemple, spoule plein et processus inachevés), ni s'appliquer à tous les
périphériques. On se reportera donc aux algorithmes du chapitre précédent.

ü Détention et attente : demande préalable de ressources


Si l'on oblige tout processus à demander à l'avance les ressources nécessaires,
on n'activera le processus que lorsque toutes les ressources seront disponibles.
Cette condition est bien sûr difficile à mettre en pratique. Une alternative :
n'accorder une nouvelle ressource que s'il y a libération des anciennes
ressources.

ü Pas de réquisition : pas de solution.


P a g e | 63

ü Attente circulaire : l'ordonnancement numérique des ressources


On numérote toutes les ressources (exemple : 1 : imprimante, 2 : traceur, 3 :
dérouleur, etc...). Un processus peut demander toutes les ressources qu'il
souhaite à condition que les numéros des ressources soient croissants (variante
: un processus ne peut demander une ressource de numéro inférieur à la plus
haute ressource qu'il détient). Un interblocage se produirait si le processus A
demande la ressource i détenue par B et si B demande la ressource k détenue
par A. Si i > k, B ne pourra demander k et si i < k, A ne pourra demander i : il
n'y aura pas interblocage.

ü Attente circulaire : l'algorithme du banquier


En 1965, DIJKSTRA a proposé un algorithme qui permet d'éviter l'interblocage :
l'algorithme du banquier, qui reproduit le modèle de prêt à des clients par un
banquier. Considérons les deux tableaux suivants qui résument l'état d'un
ordinateur à l'instant t :

proc. P1 P2 P3 P4 pr oc. P1 P2 P3 P4

A 3 0 1 1 A 1 1 0 0

B 0 1 0 0 B 0 1 1 2

C 1 1 1 0 C 3 1 0 0

D 1 1 0 1 D 0 0 1 0

E 0 0 0 0 E 2 1 1 0

tota l 5 3 2 2

Ressources actuellement
r essou rces actuel lement a ttrib uéesattribués Ressources
r essou rces encor e demencore
andé es demandées
r essou rces existan tes : e xist = ( 6 3 4 2 )
r essou rces disp oni bl es : dispo = exist - total = (1 0 2 0)
5 processus sont actifs (A, B, C, D, E) et il existe 4 catégories de périphériques P1
à P4 (exemple : P4 = imprimante). Le tableau de gauche donne les ressources
déjà allouées et le tableau de droite les ressources qui seront encore demandées
pour achever l'exécution.

Un état est dit sûr s'il existe une suite d'états ultérieurs qui permette à tous les
processus d'obtenir toutes leurs ressources et de se terminer. L'algorithme
suivant détermine si un état est sûr :
P a g e | 64

Etape 1. Trouver dans le tableau de droite une ligne L dont les ressources
demandées sont toutes inférieures à celles de dispo ( Li £ dispoi, "i). S'il n'existe
pas L vérifiant cette condition, il y a interblocage
Etape 2. Supposer que le processus associé à L obtient les ressources et se
termine. Supprimer sa ligne et actualiser dispo
Etape 3. Répéter étape 1 et étape 2 jusqu'à ce que tous les processus soient
terminés (l'état initial était donc sûr) ou jusqu'à un interblocage (l'état initial
n'était pas sûr)

Ici, par exemple, l'état actuel est sûr car :


• on allouera à D les ressources demandées et il s'achèvera
• puis on allouera à A ou E les ressources demandées et A ou E s'achèvera
• enfin les autres

L'inconvénient de cet algorithme est le caractère irréaliste de la connaissance


préalable des ressources nécessaires à l'achèvement d'un processus. Dans bien
des systèmes, ce besoin évolue dynamiquement.

2.3.3. Les disques

a. Caractéristiques physiques

Un disque est logiquement organisé en cylindres. Un cylindre contient autant de


pistes qu'il y a de têtes. Chaque piste est divisée en secteurs (un nombre
constant et de taille constante quelque soit le rayon de la piste). Un contrôleur
de disques peut effectuer des recherches simultanées sur plusieurs disques, ou
bien lire ou écrire sur un disque et attendre des données d'un ou plusieurs autres
disques. Pour le système, une adresse sur disque est formée du triplet : (n° de
cylindre, n° de piste, n° de secteur). Le temps moyen de lecture/écriture sur un
secteur est égal à la somme de trois durées élémentaires :
• le temps de recherche : positionnement de la tête sur le bon cylindre
• le temps de latence ou délai rotationnel : pour atteindre le bon secteur (en
moyenne 1/2 tour de rotation)
• le temps de transfert réel de l'information

b. Ordonnancement des accès


P a g e | 65

• Algorithme FCFS (FIFO)

La gestion la plus simple du mouvement du bras du disque consiste à satisfaire


les requêtes d'accès dans l'ordre où elles surviennent. Bien entendu, cet
algorithme donne généralement de mauvais temps de réponse. Ainsi, si une
suite de requêtes concerne les pistes : 1, 36, 16, 34, 9, 12, alors que les têtes sont
sur le cylindre 11, il faudra se déplacer au total de 111 cylindres. Il s'agit de
l'algorithme First Come First Served.

• Algorithme SSF (ou PCD)

Ici, le pilote choisit la requête la plus proche de sa position actuelle (Shortest


Seek First, plus courte d'abord, variante du PCTR déjà étudié au chapitre 3, § 3).
Avec l'exemple ci-dessus, les cylindres seront traités dans l'ordre : 12, 9, 16, 1,
34, 36. On se sera déplacé de 61 cylindres seulement. Mais les requêtes portant
sur des cylindres éloignés peuvent être durablement différées, si d'autres
requêtes surviennent pendant le traitement de la liste : l'équitabilité peut
souffrir de la réduction du temps de réponse.

• Algorithme de l'ascenseur (Look)

Pour éviter cet inconvénient, on déplace la tête dans une direction donnée en
traitant toutes les requêtes rencontrées, puis le sens du balayage s'inverse et on
traite les requêtes rencontrées, etc... Dans l'exemple traité, on obtiendrait
l'ordre : 12, 16, 34, 36, 9, 1 et un parcours total de 60 cylindres. Une variante a
été proposée par T.J. TEOREY en 1972 (C-Look, C pour circulaire) : la dernière
piste est considérée comme adjacente à la première. La tête, lorsqu'elle est
arrivée à une extrémité, retourne immédiatement à l'autre sans traiter de
requête. On obtiendrait ici l'ordre : 12, 16, 34, 36, 1, 9, soit 68 cylindres
parcourus.

• Algorithme PCTL

Lorsqu'un disque est fortement sollicité, on trouve fréquemment plusieurs


références à une même piste ou à un même cylindre. Les requêtes doivent être
ordonnées selon le secteur recherché pour réduire le temps de latence.
P a g e | 66

L'algorithme PCTL (plus court temps de latence) traite les requêtes dans l'ordre
de défilement des secteurs concernés sous la tête, pour une piste donnée, quel
que soit leur ordre d'arrivée. Par exemple, si la tête se trouve au-dessus du
secteur n° 2 et que des requêtes concernent les secteurs 11, 5, 8 et 7, on traitera
dans l'ordre les secteurs 5, 7, 8, 11ce qui évitera d'attendre plus d'un tour pour
traiter les secteurs 5, 8, 7. On peut parfois gagner en efficacité en entrelaçant les
secteurs sur les pistes.

Souvent, les modèles probabilistes sont plus réalistes que les modèles
déterministes. Dans les problèmes d'ordonnancement, en particulier, les
modèles des files d'attente sont souvent performants.

c. Mémoire cache pour les pistes du disque

En général, le temps de recherche est très supérieur au temps de transfert. Il


importe donc peu de lire un secteur ou bien une piste complète pour simplifier
le fonctionnement du contrôleur. On utilise une mémoire cache pour stocker
une piste : mémoire à accès rapide, à accès direct par le contrôleur et par l'UC. Il
est préférable d'implanter cette antémémoire dans le contrôleur, plutôt que
dans le pilote, pour que le transfert puisse se faire par DMA.

d. Traitement des erreurs

Le fonctionnement des disques est soumis à de nombreuses sources d'erreurs :


• erreur de programmation (par exemple : accès à un secteur inexistant)
nécessitant un arrêt de la requête,
• erreur du contrôle de parité (checksum) : on déclare le secteur
endommagé si l'erreur persiste au bout de plusieurs essais. On tient à jour
un fichier des secteurs endommagés à ne jamais allouer et à ne jamais
copier lors d'une sauvegarde
• erreur de positionnement du bras : un programme de recalibrage est lancé
• erreur de contrôleur
P a g e | 67

e. Disque virtuel

Un disque virtuel utilise une portion de la mémoire centrale pour sauvegarder


des secteurs. Il convient bien pour stocker programmes et données
fréquemment utilisées, qui seront ainsi accessibles très rapidement.

2.3.4. Les terminaux

Il existe de très nombreuses variétés de terminaux. C'est donc au pilote de


terminal de masquer ces différences pour qu'un programme soit le plus possible
indépendant du terminal utilisé.

a. Caractéristiques physiques
Du point de vue du système d’exploitation, on distingue deux catégories de
terminaux :

• Les terminaux à interface RS-232 standard


Ils communiquent avec une interface série et son dotés d'un connecteur à 25
broches (une broche pour transmettre les données, une pour en recevoir, une
pour la masse et quelques autres pour les contrôles). Généralement un UART
(Universal Asynchronous Receiver Transmitter) assure la conversion parrallèle-
série des signaux et série-parallèle. Le pilote envoie octet par octet à l'UART et
se bloque entre deux transferts (jusqu'à 19200 bits/s).

Les terminaux intelligents actuels possèdent un processeur puissant, une


mémoire de grande capacité et peuvent télécharger des programmes à partir de
l'ordinateur.

• Les terminaux mappés en mémoire (memory-mapped terminals)


Ces terminaux ne communiquent pas avec l'ordinateur par une liaison série, mais
font partie de l'ordinateur. Ils sont interfacés par une mémoire particulière (RAM
vidéo) qui fait partie de la mémoire de l'ordinateur et est adressée par le
processeur comme n'importe quelle partie de la mémoire. Cette solution est plus
rapide que la précédente. Un autre composant, le contrôleur vidéo, retire des
P a g e | 68

octets de la RAM vidéo et génère le signal vidéo qui contrôle l'affichage à l'écran.
Dans le cas des terminaux bitmap, chaque bit de la RAM vidéo contrôle un pixel
de l'écran. Le clavier est interfacé par une liaison parallèle, voire une liaison série.
A chaque frappe de touche et à chaque relâchement, une interruption est
déclenchée et le code de l'emplacement de la touche est placé dans un tampon.
2.3.5. Le logiciel du clavier

Deux types de pilotes sont envisageables :


• le pilote lit chaque octet du tampon, le convertit en code ASCII à l'aide de
tables internes, et le transmet sans interprétation, ou plus souvent le
stocke dans un tampon : il s'agit d'une approche caractère (mode raw)
• le pilote prend en compte tout ce qui se rapporte à l'édition de ce qui
précède la validation (par RC ou NL) : BS, etc... et ne transmet que les
lignes corrigées : il s'agit d'une approche ligne (mode cooked)

Sous UNIX, le mode cbreak est un compromis entre les modes raw et cooked :
les caractères sont transmis au processus sans attendre la validation (comme en
mode raw), mais DEL, CTRL-S, CTRL-Q et CTRL-\ sont traités comme en mode
cooked. La fonction ioctl permet de changer de mode.

Il existe deux façons de gérer les tampons des claviers :


• le pilote réserve un ensemble de tampons de taille standard. A chaque
terminal est associé un pointeur sur le premier tampon utilisé; l'ensemble
des tampons associés à un terminal est organisé en une liste chaînée.
Cette méthode est utilisée sur les grosses machines possédant beaucoup
de terminaux
• au sein de la structure de données associée à chaque terminal dans la
mémoire, on implante un tampon propre au terminal. Le pilote est plus
simple. Cette solution convient bien aux petits systèmes ou aux PC.

Les pilotes de claviers doivent également s'acquitter de bien d'autres tâches :


gérer la présence ou l'absence d'écho à l'écran, gérer les lignes de longueur
supérieure à une ligne d'écran, gérer les caractères de tabulation, produire les
caractères RC et NL lors d'une validation avec une convention donnée, gérer les
caractères spéciaux (CTRL-D, CTRL-Q, CTRL-S, DEL, etc....). Sous UNIX, ces
P a g e | 69

caractères peuvent être redéfinis par l'utilisateur (association d'un caractère ou


ensemble de caractères à un nom symbolique).

2.3.6. Le logiciel de l'écran

Dans le cas d'un terminal RS-232, le programme ou la fonction d'écho de la


frappe envoie dans le tampon de l'écran la suite des octets à afficher. Si le
tampon est plein ou bien si toutes les données sont transmises, le premier
caractère est envoyé au terminal, le pilote est endormi. Une interruption
provoque la transmission du caractère suivant, etc..
Dans le cas de terminaux mappés en mémoire, les caractères à afficher sont
retirés un à un de l'espace utilisateur et placés dans la RAM vidéo (avec
traitement particulier pour certains caractères, comme BELL ou les séquences
classiques d'échappement). Le pilote gère la position courante dans la RAM
vidéo, en tenant compte des caractères tels que RC, NL, BS; il gère aussi le
défilement (scrolling) lorsqu'un passage à la ligne en bas d'écran survient. Pour
cela, il met à jour un pointeur, géré par le contrôleur vidéo, sur le premier
caractère de la première ligne à l'écran. Le pilote gère aussi le curseur en tenant
à jour un pointeur sur sa position.
P a g e | 70

CHAPITRE III. ETUDES THEORIQUE ET PRATIQUE DES SYSTEMES MS-


DOS, WINDOWS ET LINUX/UNIX
1. MS-DOS

a. Introduction

Cette partie reprend les commandes MS-DOS. Certaines commandes ne


fonctionnent plus ou on changé d'options avec les Windows actuels (Windows 8
ou Windows 10). Actuellement, DOS n'est quasiment plus utilisé que pour les
commandes réseaux, voire la console de récupération, c'est principalement dans
ce but que nous verrons ces commandes.

b. Un peu d’histoire

Le DOS a été conçu pour les premiers XT d'IBM (processeurs X86 compatibles).
Contrairement aux systèmes d'exploitation de l'époque, il n'est pas intégré en
mémoire ROM, mais sur une disquette ou installé sur le disque dur. Il travaille en
mode texte en utilisant un prompt: les commandes doivent être connues de
l'utilisateur (elles ne sont pas très complexes et reprises des mots anglais
associés). L'interface graphique utilisant la souris est arrivée plus tard avec une
couche supplémentaire (Windows 2.0, 3.0, 3.1 et 3.11 - Workgroups).

DOS est au départ conçu pour gérer les disques durs et disquettes, ainsi que leur
utilisation pour la sauvegarde et la récupération de fichiers (données,
programmes, ...), compris leur organisation dans des répertoires (depuis
Windows 95 ou dit dossiers). Différentes commandes permettent également de
préparer les supports comme la commande FDISK ou la commande FORMAT. En
gérant directement le BIOS couplé au setup, ce système d'exploitation va servir
d'interface entre l'utilisateur et l'électronique du PC

Le DOS (Disk Operating System) est le premier système d'exploitation utilisé avec
les PC. Il a été développé par Microsoft pour la firme IBM et l'ordinateur de type
XT. Il a été développé en parallèle sous 3 appellations suivant le vendeur: PC-DOS
pour IBM, DR-DOS pour Novell et MS-DOS pour toutes les autres firmes
(commercialisé par Microsoft). Ils sont équivalents, seuls quelques petites
différences dans les options de commandes sont présentes.
P a g e | 71

Comme tous les systèmes d'exploitation, DOS est développé pour servir
d'interface entre l'électronique d'une part et l'utilisateur d'autre part. Il n'inclut
pas d'interface graphique, c'est un système d'exploitation en mode texte.
Microsoft a contourné le problème en développant les Windows 2.0, 3.0, 3.1 et
3.11, une sorte de rajoute.

• La version 1.0 n'a jamais été réellement utilisée.


• La version 2.0 est la première version pour XT.
• La première version majeure est le DOS 3.0 (et son upgrade, le 3.3.). Ces
versions utilisaient (tout comme les versions inférieures) des partitions
FAT de type 12 bits.
• La version 4.0 utilisait une partition 16 bits (incompatible avec les
partitions 12 bits précédentes). Ce type d'encodage disque dur est utilisé
dans les versions suivantes. Il est connu sous le terme FAT 16. La FAT 16
limite la taille des partitions à 2 GB. Les versions 4.0 et 4.1 sont
particulièrement instables.
• La version 5.0 est la dernière version réellement développée. C'est la
version la plus stable.
• La 6.0 reprenait des utilitaires comme scandisk et un programme de
compression de disque dur. Les versions 6.2 et 6.22 sont des modifications
de ces utilitaires pour des questions de stabilités des outils ou de
copyright.

c. Les périphériques

Certaines commandes reconnaissent le nom des ports de communication sur les


quels des périphériques peuvent être connectés:

• COM: console formée de l'écran et du clavier


• LPT1: sortie parallèle numéro 1 (adresse $378)
• PRN: égal à lpt1
• COM1: port série numéro 1 (adresse $3F8)
• COM2: port série numéro 2 (adresse $3E8)
P a g e | 72

d. Démarrage de l'ordinateur

Lors du démarrage de l'ordinateur, le processeur lit d'abord les instructions


inclues dans le BIOS. Ensuite, il lit les instructions présentes sur la disquette/CD-
ROM (si une disquette ou un CD est insérée) ou sur le disque dur. Il va d'abord
lire 3 fichiers systèmes cachés: command.com, io.sys et ms.sys (dans le cas d'un
DOS Microsoft).

Ci-dessous, voici une fenêtre de MS-DOS version Microsoft Windows [version


6.1.7600], exécuté sur une machine Windows 7. Pour le lancer, nous appuyons
la touche Windows + R et dans la fenêtre qui apparait, nous notons cmd puis
cliquer sur OK.

Viennent ensuite la lecture de 2 fichiers de commandes optionnels:

• config.sys est réservés aux pilotes hardwares


• autoexec.bat reprend généralement des commandes utilisateurs.

e. Les fichiers dans DOS

1. Introduction.

Un fichier (File en anglais) est un ensemble d'informations regroupé sous un


même nom. Ce peut être une liste d'adresse, un ensemble de recettes de
cuisines ou même un programme exécutable.

Sous Dos, une fichier stocké sur le disque dur (ou sur une disquette/CD-ROM)
est désigné par un nom composé de 1 à 8 caractères numériques -
alphanumériques ou caractères spéciaux suivants: $&#@!%'()-<>_
P a g e | 73

Le DOS connaît implicitement quelques extensions:

• com: programme exécutable


• exe: programme exécutable issus d'un langage de programmation
(compilé)
• bak: fichier de sauvegarde
• $$$: fichier temporaire créé par un programme
• bas: fichier en langage basic
• bat: fichier batch, un ensemble de lignes de commandes DOS
• sys: fichier système réservé au DOS, configuration pour périphériques

D'autres sont utilisées par convention:

• pas: programme écrit en pascal, non exécutable


• c: programme écrit en C, non exécutable
• doc: document texte (documentation)
• txt: fichier texte
• ini: utilisé pour les fichiers d'initiation de certains programmes (selon la
syntaxe du programmeur)

2. Disques durs, disquettes et CD-ROM

DOS reconnaît automatiquement les disques durs et lecteurs de disquette s'ils


sont détectés par le BIOS. Un lecteur de CD-Rom nécessite des pilotes
additionnels pour les vieilles versions de DOS. Un disque dur ou une disquette
doit au préalable être préparé par la commande DOS Format. Actuellement, les
disquettes ne sont plus d’actualités.

Les capacités sont exprimées en Byte (octet en Français). Pour 1024 bytes, on
parle de Kilo (KB ou KO), pour 1024 Kilos, on parle de Mega (MB ou Mo). Les
lecteurs de disquettes prennent les lettres "A:" et "B:". La première partition du
disque dur se nomme "C:", les autres partitions prennent les lettres suivantes.
Pour passer d'un disque à l'autre, tapez simplement la lettre suivie de 2 points
(:).

L'organisation des données sur le disque dur (dans une moindre mesure la
disquette) se fait par répertoires (directory en anglais) et sous-répertoires. Ces
P a g e | 74

répertoires (depuis Windows 95 ou parle de dossiers et sous-dossiers)


permettent de rassembler les données dans des boîtes spécifiques. Lorsque vous
lisez des données sur un disque dur, vous commencez par la ROOT, c'est le
répertoire supérieur du disque. Celui-ci contient des données et des répertoires.
La commande pour afficher les fichiers contenus dans le répertoire courant est
DIR

Par exemple, le disque C: contient:

• autoexec.bat: fichier batch Dos de démarrage


• config.sys: fichier de configuration système lu au démarrage
• Dos<DIR>: répertoire contenant les fichiers spécifiques au système
d'exploitation.

f. Les commandes DOS

Les commandes DOS sont séparées en deux types:

• les commandes internes: directement exécutables, font partie du noyau


du système d'exploitation.
• les commandes externes: séparées du programme original, sont des
programmes supplémentaires. Pour exécuter une commande externe, il
faudra également signaler son emplacement sur le disque dur ou la
disquette (éventuellement via la commande PATH).

Le DOS fonctionne aussi avec des touches et caractères particulières. Il existe


alors quelques commandes particulières que DOS utilise. Nous pouvons par
exemple énumérer :

• <ALT> + 94 donne le caractère '^', cette combinaison est basé sur le code
ascii.
• <ALT>+<CTRL>+SUPP>: redémarre l'ordinateur
• <CTRL>+<C>: arrête l'exécution d'une commande
• <CTRL>+<S>: arrête momentanément une instruction DOS, elle reprend
en appuyant sur n'importe quelle touche, utilisée par exemple avec la
commande DIR
P a g e | 75

• <ALT>+<CTRL>+<F1> met le clavier en Qwerty si le clavier a été définit


comme azerty (belge, français, ...)
• <ALT>+<CTRL>+<F2> remet le clavier en AZERTY

Pour la majorité des commandes, le nom de la commande suivi de /? affiche une


aide.

1. Commandes de directory (répertoires)

Sans rentrer dans tous les détails de ces commandes, nous allons nous déplacer
d'un répertoire à l'autre, en créer et en supprimer, visualiser le contenu.

• DIR (commande interne).

> DIR affiche le contenu du répertoire en cours.

Exemple, nous sommes dans le répertoire principal du disque dur C: (ce que nous
montre le prompt DOS en affichant C:\>). Nous considérons que l’utilisateur
connecté s’appelle pc. Etant dans le répertoire de l’utilisateur pc, nous tapon la
commande DIR et nous appuyons sur la touche « Entrée ». Cette capture d’écran
montre le résultat que nous obtenons.
P a g e | 76

Les informations affichées sont pour le fichier: le nom et l'extension, la taille en


Byte (octet), la date et l'heure de modification. Pour les répertoires, le type
(<DIR> en anglais et <REP> en Français) et la date de modification.

Lorsque le nombre de fichiers à afficher est trop grand, une partie des
informations défile sans être visible pour l'utilisateur. Deux options sont
utilisables:

> DIR /P: affiche le contenu du répertoire par page. Pour afficher la page
suivante, appuyez sur n'importe quelle touche.

> DIR /W: affiche le contenu du répertoire, mais uniquement les noms et
extensions en colonnes. En Win 2000 et récentes versions, cette commande est
remplacée par DIR /D. L'espace entre la commande et les caractères optionnels
peut être omis.

Il est également possible d'afficher uniquement les fichiers répondant à certains


critères en utilisant les caractères de masquage et de remplacement. Le signe
point d’interrogation (?) remplace un seul caractère et le signe star (*) remplace
un ensemble de caractères.

Par exemple (1), étant dans C:\Windows\System32>, nous tapons la commande


DIR *.sys, elle affiche uniquement les fichiers dont l'extension est sys. Voici le
résultat sur la capture d’écran ci-dessous :

Par exemple (2), C:\Windows>DIR sys*.* affiche tous les fichiers se trouvant
dans le répertoire Windows dont le nom commence par sys, quelque soit
l'extension.
P a g e | 77

Par exemple (3), C:\Windows>DIR *.?xe affiche tous les fichiers dont l'extension
termine par xe, par exemple les fichiers exe.

• CHDIR ou CD en abrégé: commande interne

La commande CD permet de se déplacer dans le répertoire indiqué. La syntaxe


est C:>CD répertoire <entrée> ou CHDIR répertoire <entrée>

Par exemple (1), vous êtes dans le répertoire principal de C: (le root). Vous voulez
vous déplacer dans le répertoire sous-adjacent Users, tapez: C:>CD Users
P a g e | 78

La commande CD .. permet de remonter d'un niveau de répertoire. La


commande CD \ revient au répertoire principal (root) quelque soit le sous-
répertoire courant (en cours).

La commande CD \<sous-répertoire1>\<sous-répertoire2> positionne le


curseur sur le répertoire <sous-répertoire2>, inclus dans le <sous-répertoire1>
lui-même inclus dans le répertoire en cours.

• MKDIR (MD en abrégé), commande interne.

La commande >MKDIR <Sous-répertoire> ou MD <sous-répertoire> permet de


créer un sous répertoire dans le répertoire en cours suivant le nom spécifié.

Par exemple (1), la commande C:>MD rien crée le répertoire rien dans la root
de C:

• RMDIR (RD en abrégé), commande interne.

La commande >RMDIR <sous-répertoire> ou RD <sous-répertoire> permet de


supprimer le répertoire s'il est vide. Si le dossier à supprimer n'est pas vide, la
commande est refusée. DOS affiche un message pour le signaler.

L’option /S permet de supprimer tous les répertoires et les fichiers dans le


répertoire spécifié en plus du répertoire lui-même. MKDIR /S permet de
supprimer une arborescence.
P a g e | 79

• Tree: commande externe

La commande tree permet d’afficher un arbre des répertoires.


> TREE: affiche tous les répertoires contenus dans le répertoire courant
> TREE /F: affiche les répertoires et les fichiers contenus dans ces répertoires
> TREE /F |more: affiche les répertoires et leur contenu par page.

L'affichage se fait sous forme d'arbre

• Exécution
> Programme1: exécute le programme dont le nom est programme1.
L'extension n'est pas nécessaire. DOS reconnaît 3 types de fichiers exécutables
directement suivant l'extension:
1. .bat: ce sont des listes de commandes DOS
2. .exe
3. .com

Si le logiciel n'est pas dans le répertoire courant, on peut lancer en tapant: nom-
du-lecteur:\répertoire\sous-répertoire\programme.
P a g e | 80

• Copy: commande interne


La commande > COPY fichier1 fichier2 permet de copie le fichier1 vers un fichier
dont le nom est fichier2

Le changement d'emplacement est accepté, de même que les caractères de


remplacement point d’interrogation (?) et le caractère star (*).

Par exemple :

• > COPY autoexec.bat autoexec.sav


• > COPY *.bat *.sav : copie tous les fichier avec une extension .bat vers des
fichiers de même nom avec l'extension .sav dans le répertoire courant.
• > COPY c:\DOS\*.exe A:\*.exe : copie tous les fichiers exécutables .exe du
répertoire DOS vers la disquette A:.

Il est à noter que la commande XCOPY copie également les répertoires

• RENAME (REN en abrégé): commande interne

La commande RENAME fichier1 fichier2 permet de renommer le fichier1 en


fichier2. L'autorisation de caractères de remplacements est autorisée. Tous les
principes de la commande COPY sont également d'application.

• DEL ou ERASE: commandes internes.

La commande DEL fichier1 permet d’effacer le fichier spécifié. Les caractères de


remplacement sont autorisé mais non souhaitable. Les commandes DEL et
ERASE ne proposent aucune confirmation.

• UNDELETE: commande externe (à partir DOS 5.0)

Attention, nous devons noter que cette commande n'est pas aussi puissante que
la corbeille de Windows. L'emplacement d'un fichier effacé est laissé libre pour
d'autres fichiers. Elle doit être exécutée immédiatement après la suppression.

La commande UNDELET fichier 1 permet de récupère sous certaines conditions


les fichiers effacés par une commande DEL ou ERASE. L'utilisation des caractères
de remplacement ? et * est autorisée.
P a g e | 81

• COMP: commande externe

La commande COMP fichier1 fichier2 permet de comparer les 2 fichiers et


affiche les 10 premières erreurs.

• XCOPY: commande externe

Cette commande est comparable à la commande COPY mais transfère


également les dossiers inclus dans les répertoires. Elle est toujours utilisée dans
des fichiers batch.

La commande XCOPY source [destination] permet de copier le dossier source


et ses sous dossier vers le dossier de destination. Les options ci-après peuvent
être utilisées.

• /A: uniquement les fichiers non sauvegardés, ne met pas le d'archive à


1
• /M: uniquement les fichiers non sauvegardés, met le bit d'archive à 1
• /P: demande avant de créer de nouveau dossiers
• /V: vérifie les fichiers copiés
• /H: copie également les fichiers cachés.
• /Y: ne demande plus la confirmation pour écraser un fichier existant.

Cette commande utilise différentes options qui diffèrent d'une version à l'autre,
notamment pour les versions 2000, XP, Windows 7 et plus. Cette commande
remplace dans les DOS actuels la commande BACKUP.

2. Commandes pour fichiers textes

• TYPE: commande interne.

La commande TYPE fichier1 permet d’affiche le contenu d'un fichier ASCI à


l'écran. Cette commande affiche le contenu d'un fichier texte sur l'écran,
notamment les fichiers d'extension TXT, BAT, ...

• PRINT: commande externe


P a g e | 82

La commande PRINT fichier1 permet d’imprime un fichier texte. Cette


commande a comme syntaxe : PRINT [/D:périphérique]
[[lecteur:][chemin]nom_de_fichier[...]] avec /D:périphérique qui spécifie un
périphérique d'impression.

3. Commandes systèmes

• TIME, commande interne

Deux commandes sont utilisées, pour modifier la date et l'heure. Elles gèrent
directement le BIOS du système. Les XT ne possédaient pas de circuits RTC (Real
Time Clock), l'horloge n'était pas mise à jour si l'ordinateur n'était pas sous
tension. Ce n'est plus le cas depuis le 286. L'utilisation de ces 2 commandes dans
une fenêtre DOS est parfaitement identique au paramétrage sous Windows par
le panneau de configuration ou directement dans le BIOS.

La commande TIME permet d’affiche et de permet de mettre à jour l'heure du


système

En appuyant directement sur entrée, l'heure est conservée. Pour mettre l'heure
à jour, tapez l'heure actuelle heure : minutes

• DATE, commande interne


La commande DATE permet d’afficher et mettre à jour la date du système
P a g e | 83

En appuyant directement sur entrée, la date est conservée. Pour mettre la date
à jour, tapez la date actuelle. Le format diffère de la langue du système
d'exploitation.

4. Utilitaires disque dur et disquette

• CHKDSK, commande externe

Cette commande est Utilitaires disque dur et disquette, elle n'est apparue qu'à
partir du DOS 5.0. Les options sont modifiées dans les DOS sous Windows
actuels.

La commande CHKDSK <Drive> permet de vérifier le disque spécifié.

Le rapport contient:

• le volume de stockage sur le disque


• le nombre de fichiers et dossiers sur le disque dur
• la place disponible restante
• le nombre de secteurs du disque dur inutilisables
• la taille de la mémoire et l'espace encore disponible

Le nombre de secteurs (clusters) inutilisable résulte des différentes écritures de


fichiers sur le disque, ces secteurs sont repris dans la table de matière (FAT) de
manière incorrecte et récupérable par programmes en règle générale. Un
secteur peut également être défectueux par panne sur le disque dur et
inutilisable. La commande CHKDSK / F réorganise les clusters et récupère les
fragments de fichiers dans des fichiers textes (*.chk). Ces fichiers peuvent être
effacés. Cette commande est exécutée (en mode graphique) par Windows 95 et
suivants (partitions FAT) si le système n'a pas été fermé correctement (panne de
courant).

• FORMAT, commande externe

Cette commande permet de formater (préparer) la surface d'un disque dur ou


d'une disquette.
P a g e | 84

La commande FORMAT <Drive> est formate le disque <drive>. Les information


contenue sur le disque dur ou la disquette sont perdues, excepté en DOS 6.0,
6.0, 6.2 et 6.22 dans certains cas avec la commande Unformat

FORMAT /S <drive> formate le disque et insère les fichiers systèmes de


démarrage. Le DOS jusque 6.22 n'accepte que les partitions FAT d'une taille
maximum de 2 GB. Le clavier par défaut est QUERTY, il faut également inséré les
fichiers config.sys et autoexec.bat avec les fichiers adéquats.

FORMAT /U <drive> formate le disque et garantit une meilleure récupération


en cas de commande Unformat (versions 5.0 à 6.22)

FORMAT /V:<label> <disque> formate le disque et lui donne comme nom label.

Le nom du volume peut également être inscrit en utilisant la commande VOL ci-
dessous. DOS n'accepte ni les caractères accentués, ni les espaces.

FORMAT /F:<size> <nom de la disquette> formate la disquette suivant un


format défini. Par défaut, le formatage utilise le format par défaut. <Size> peut
prendre les valeurs suivantes:

• 360: disquette simple face, simple densité 5"1/4


• 720: disquette simple face, double densité 3"1/2
• 1200: disquette double face, double densité 5"1/4
• 1440: disquette double face, double densité 3"1/2
• 2880: disquette 3"1/2 2.88 MB

FORMAT /B:<nom de la disquette> formate la disquette et réserve la place pour


insérer les fichiers systèmes ultérieurement

• Unformat, commande externe

Cette commande n'est reconnue qu'à partir du DOS 5.0. Un format /U permet
une meilleure récupération. Ceci ne fonctionne que si les clusters de la disquette
ou du disque dur n'ont pas été utilisés par un nouveau fichier depuis. Elle n'existe
plus sous Windows.
P a g e | 85

La commande UNFORMAT <nom du disque> permet de remettre l'ancien


formatage, fichiers compris sous certaines conditions.

• Label, commande externe

LABEL <disque><nom du disque>: donne un label (nom) au disque spécifié.

• VOL, commande externe

La commande VOL <disque> permet d’afficher le label du disque créé par la


commande LABEL

• FDISK, commande externe

La commande FDISK permet de créer, modifier ou supprimer des partitions sur


les disques durs.

• Diskcopy, commande externe

La commande DISKCOPY <disquette source> <disquette destination> permet


de copier le contenu de la disquette source (y compris le formatage) vers la
disquette de destination.
La commande DISKCOPY <disquette source> <disquette destination> /V: vérifie
en plus les données copiées.
La commande diskcopy a: a: est également acceptée si vous n'utilisez qu'un seul
lecteur de disquette.

• Backup, commande externe

La commande >BACKUP <chemin><nom du fichier><lecteur>


/A/S/M/D:<date>: sauvegarde sur disquette le(s) fichier(s) spécifié(s) dans un
seul fichier (backup.001) et utilise un fichier de contrôle (control.001). Si la
sauvegarde utilise plusieurs disquettes, la deuxième prendra l'extension 002, ...

• Chemin: chemin d'accès du répertoire où se trouve le fichier à sauvegarder


(omis si c'est dans le répertoire courant).
• nom du fichier à sauver. Les caractères de remplacement sont autorisés.
S'il n'est pas spécifié, tous les fichiers du dossier sont sauvegardés.
P a g e | 86

• lecteur: nom du disque ou de la disquette où vous désirez sauver les


fichiers.
• /A: ajoute les fichiers sauvegardés au lien d'effacer la disquette (A pour
APPEND).
• /S: sauve également les fichiers inclus dans les sous-répertoires.
• /M: uniquement les fichiers modifiés depuis la dernière sauvegarde
• /D:<date> sauvegarde les fichiers modifiés depuis la date suivant la
dernière sauvegarde. La date prend le format jj/mm/aa pour une version
française.

La date de création est celle à la quelle le fichier a été effectivement créé, pas
celle d'inscription sur le disque dur. Si la taille des fichiers est trop importante,
DOS demande d'insérer une nouvelle et modifie l'extension du fichier sur la
disquette suivante.

Exemple (1): C:\>backup a:/s sauvegarde tous les fichiers contenus sur le disque
dur C: (y compris dans les sous-dossiers) sur la disquette A:

Exemple (2): backup c:\DOS A: /A /M sauvegarde tous les fichiers du dossier


DOS modifié depuis la dernière sauvegarde.

Exemple3: backup d:\*.exe b:/S /D:01/07/16 sauvegarde tous les fichiers du


disque dur D: (y compris les sous-répertoires) dont l'extension est EXE et dont la
date de création est supérieure au 01/07/95.

• Restore: commande externe

Cette commande (jusque DOS 5.0) permet de récupérer les fichiers sauvegardés
avec la commande BACKUP. Pour les versions supérieures, MS-backup permet la
restauration.

La commande C:\>RESTORE <lecteur><disque><chemin><nom-fichier-a-


restorer> /S /P /N /M

- <lecteur>: disque contenant le fichier de sauvegarde


- <disque>: disque de destination des fichiers
- <chemin>: répertoire de destination
P a g e | 87

- <nom-fichier>: fichiers à récupérer de la sauvegarde, tous si omis,


caractères de remplacement acceptés.
- /S: récupère également les répertoires
- /P: demande la permission pour remplacer les fichiers dont la date de
modification est postérieure au backup
- /N: uniquement les fichiers qui n'existent pas dans le dossier de
destination
- /M: uniquement les fichiers modifiés depuis le dernier backup.

• La commande Attrib

La commande C:\>ATTRIB [-/+R] [-/+S] [-/+H] [-/+A] /D /S


[Lecteur:][Chemin]fichier. Les caractères génériques * et ? sont acceptés dans le
nom du fichier.

• +r: Définit l'attribut de fichier Lecture seule.


• -r: Supprime l'attribut de fichier Lecture seule.
• +a: Définit l'attribut de fichier archive.
• -a: Supprime l'attribut de fichier archive.
• +s: Définit l'attribut Fichier système.
• -s: Supprime l'attribut Fichier système.
• +h: Définit l'attribut Fichier caché.
• -h: Supprime l'attribut Fichier caché.
• /s: Applique attrib et ses options aux fichiers correspondants du
répertoire en cours et des sous-répertoires.
• /d: Applique attrib et ses options aux répertoires.

Cette commande permet par exemple d'afficher pour modification le fichier


caché de boot.ini dans la root d'un Windows 2000, XP, ... (sauf Vista).

5. Autres commandes

• VER, commande interne

La commande C:\>VER affiche la version du DOS en cours.


P a g e | 88

Cette commande est surtout utilisée par des logiciels externes, pour des
questions de compatibilité. Elle est connue par toutes les versions.

• SYS, commande externe

La commande C:\>sys [lecteur 1] [path 1] [lecteur 2] permet de transférer les


fichiers systèmes à partir du lecteur 1 vers le lecteur2. Cette commande permet
de rendre système un disque dur ou une disquette.

Par exemple la commande sys a: c: transfère les fichiers systèmes (rend


bootable) sur le disque dur. La disquette de départ A: doit être bootable. La
version du système d'exploitation transféré est celle de la disquette.

g. Le DOS : Config.sys et autoexec.bat

1. Introduction

Sous DOS, lorsque l'ordinateur démarre, il lit d'abord les informations inclues
dans le BIOS (paramétrable à partir des 80286 par le setup). Ce firmware permet
de configurer l'hardware du PC, notamment de déterminer l'ordre de bootage
(démarrage) des disques (lecteur de disquette, disque dur, CD-ROM, USB, Via
Réseau).

Une fois le périphérique de démarrage déterminé, le PC va lire les fichiers


systèmes sur le disque pour déterminer s'il est effectivement bootable et
démarrer le système d'exploitation: command.com, io.sys et ms.sys (dans le cas
d'un DOS Microsoft)

Dans le cas du DOS, il va lire deux fichiers de configuration de type texte l'un à la
suite de l'autre:
P a g e | 89

• Config.sys reprend les configurations matérielles de la machine


(configuration mémoire par exemple)
• autoexec.bat reprend les paramètres utilisateurs (clavier, souris, ...).

Ces deux fichiers sont optionnels et doivent se trouver à la racine du disque de


démarrage. Pour modifier ces fichiers, vous pouvez utiliser la commande DOS
EDIT (y compris sous XP et plus). C'est un petit éditeur de texte sous DOS
implanté comme fichier externe.

Il existe les commandes standards du config.sys. Toutes les commandes reprises


ci-dessous ne sont pas forcément installées. Ce tableau présente un résumé des
commandes:

Break Spécifie au DOS de vérifier


régulièrement la combinaison de touches
<ctrl>+<c> (arrêter) ou <ctrl>+<Pause>
suspendre temporairement le
fonctionnement des lignes de commandes,
programmes sous DOS
Buffers détermine la quantité de buffers disques
(tampon) à réserver pour les transferts
de données mémoire - disques durs: 1 à
99.
Country Permet de définir le pays
Device Permet de charger un pilote de
périphérique
Devicehigh Permet de charger un pilote de
périphérique en mémoire haute (entre
640Kb et 1 MB), depuis la version 5.0
DOS spécifie si DOS peut être chargé en
mémoire supérieure
DRIVPARM Permet de définir les caractéristiques
d'un disque, quasiment pas utilisé
FILES Spécifie le nombre de fichiers maximum
que le système d'exploitation peut
ouvrir simultanément
P a g e | 90

INSTALL Charge un programme résident en mémoire,


les programmes peuvent également être
démarrés par l'autoexec.bat
LASTDRIVE Définit la lettre maximum autorisée pour
les disques.
NUMLOCK Définit si le pavé numérique est activé
au lancement, peut être paramétré par le
BIOS.
REM (ou ;) Remarque
SET Permet de définir des variables
d'environnement.
SHELL Permet de définir un autre interpréteur
de commande COMMAND.COM
STACKS Définit la quantité de mémoire pour les
interruptions matérielles
SWITCHES Permet de sélectionner des lignes de
commandes dans un menu suivant le choix
utilisateur, à partir de DOS 5.0

Quelques commandes spécifiques de périphériques sont également définies par


MS-DOS. Ce sont des fichiers externes (inclus généralement dans le répertoire
DOS). D'autres sont fournies directement par le constructeur du périphérique. Il
se chargent par device=[emplacement]\commande ou si la mémoire haute est
gérée par device=[emplacement]\commande

ANSI.SYS Crée une émulation de terminal ANSI


DISPLAY.SYS Gère la commutation de pages de code
pour l'écran
DRIVER.SYS Crée une unité logique renvoyant à un
lecteur disquettes physique
EMM386.EXE Stimule la mémoire supérieure pour les
ordinateurs à base de 386 et supérieurs
utilisant la mémoire étendue.
Certaines options ne sont accessibles
qu'à partir de la version 5.0
HIMEM.SYS Gère l'utilisation de la mémoire
étendue (supérieure au 1 MB) pour les
ordinateurs à base de 286 ou supérieurs
P a g e | 91

RAMDRIVE.SYS Crée une zone mémoire reprenant le


contenu d'un disque dur.
SETVER.SYS Charge la table des versions en
mémoire, utilisé pour la compatibilité
avec les anciens programmes.
SMARTDRV.SYS Crée un tampon mémoire pour les accès
disques durs.

L'ordre des commandes n'a pas réellement d'importance, sauf dans le cas de la
gestion de la mémoire haute.

• Device= [emplacement] himem.sys


• Dos = high
• Device = [emplacement] Emm386.exe Noems
(RAM)
• DOS=UMB

Il existe aussi des commandes du fichier AUTOEXEC.BAT.

Le fichier autoexec.bat est un fichier texte qui reprend les commandes


utilisateurs. Quelques unes sont préprogrammées pas le système d'exploitation
mais vous pouvez également démarrer vos propres programmes par ce fichier
de commande (en fin de listes).

PROMPT Permet de modifier le prompt, l'invite de


commandes. Le plus courant est Prompt $p$g
qui affiche la lettre du disque dur et le
répertoire courant.
MODE Permet de définir les caractéristiques des
ports de communications (COM et PRN)
PATH Spécifie les répertoires de recherche et
l'ordre dans lequel ils sont analysés.
ECHO Permet de n’a pas afficher les commandes du
fichier
OFF autoexec.bat lors de l'exécution
SET Définit des variables d'environnement pour
certains programmes
CLS n'affiche pas les commandes exécutées
P a g e | 92

h. Introduction à la gestion de la mémoire sous DOS

Le système MS-DOS dispose d’un modèle de mémoire nettement plus compliqué


que celui d’Unix. Il faut interpréter cette complexité comme un défaut : la
simplicité d’Unix n’est en aucune façon synonyme de médiocrité, bien au
contraire.

Par la conception des premiers XT, la mémoire d'un PC est constituée de 3 zones:

• la mémoire de base (de 0 à 640KB), aussi appelée


conventionnelle.
• la mémoire haute réservée au départ pour les périphériques
comme la carte écran
• la mémoire supplémentaire supérieure à 1 MB. Cette partie
n'existe que pour les 286 et supérieurs. Elle est configurée en 2 parties:
la mémoire paginée qui n'est utilisable que sous DOS et la mémoire
étendue, utilisable sous Windows.

La gestion de mémoire du DOS est, par ailleurs, très dépendante du matériel


sous-jacent – Intel 8086 – qu’elle exploite jusqu’à la corde. L’architecture
originale sur laquelle le DOS a été développé disposait d’un bus d’adresses de 16
bits, permettant d’adresser jusqu’à 64 ko de mémoire. Ultérieurement,
l’adressage s’est fait à partir d’une base dont la valeur est contenue dans des
registres spécifiques de 16 bits. Ces registres correspondent généralement à des
fonctions de pile (SS), de données (DS) et de code (CS). Les registres contiennent
les bits de poids forts d’une adresse de 20 bits, ce qui correspond à un intervalle
de 1 Mo.
P a g e | 93

L’adressage du DOS est en fait restreint à 640 ko, la partie supérieure (Upper
Memory Area) étant réservée à divers programmes de pilotage d’entrées-
sorties. Le modèle de mémoire du DOS permet des adresses au delà de 1 Mo. En
prenant comme base, la valeur 0xFFFF, il est possible d’aller jusqu’à 1 Mo + 64
ko. Ceci correspond à la zone de mémoire haute (High Memory Area).
L’exploitation de cette mémoire dépend de la manière – variable – dont est
câblée la ligne d’adresse 21.

Si nous considérons que le dossier où est installé le DOS est C:\DOS.

Device=c:\dos\hymem.sys

C'est la première commande à insérer dans le config.sys. Ce programme assure


la coordination de la mémoire étendue et s'assure que 2 applications n'utilisent
pas la même zone. Différentes options existent mais ne sont pas utilisées.

DOS=HIGH: cette commande est liée à hymem.sys et permet de transférer le


DOS vers la mémoire haute, libérant de l'espace dans la mémoire
conventionnelle pour les programmes.
P a g e | 94

DEVICE=c:\DOS\emm386.exe permet la gestion de mémoire supérieure. La


quantité de mémoire utilisable peut être renseignée, mais ce n'est pas
nécessaire. Par contre on retrouve 2 options: RAM et NOEMS. RAM permet
d'utiliser la mémoire supérieure pour les programmes DOS, NOEMS permet
d'utiliser la mémoire supérieure également mais pas pour les programmes DOS
(uniquement Windows 3.0, 3.1 et 3.11). En gros, les joueurs utiliseront
DEVICE=c:\DOS\emm386.exe RAM, les applications bureautiques sous
Windows: DEVICE=c:\DOS\emm386.exe NOEMS. Une dernière remarque, les
286 ne permettent pas d'utiliser Noems, Windows 3.X ne fonctionne pas en
mode étendu avec ce processeur, uniquement à partir des 386.

DOS=UMB permet aux programmes d'utiliser la mémoire supérieure.

Si emm386.exe est démarré, vous pouvez transférer les pilotes et programmes


démarrés par config. sys et autoexec.bat vers la mémoire haute. Dans
config.sys, la commande DEVICE est remplacée par DEVICEHIGH. Pour
l'autoexec.bat, insérez devant les commandes LOADHIGH (LH en abrégé).

SMARTDRV.exe est une commande du fichier autoexec.bat. Elle permet de


créer un tampon mémoire du disque dur. Ceci accélère les échanges mais peut
poser quelques problèmes si vous éteignez votre ordinateur. Pour cela, on crée
un double tampon (à la fois en mémoire et sur le disque dur) en ajoutant l'option
/c. Smartdrv /c.

L'utilitaire MEMMAKER est apparu avec la version 6.0. C'est un utilitaire qui va
modifier les fichiers config.sys et autoexec.bat pour libérer le maximum de
mémoire Ram.

2. MICROSOFT WINDOWS

a. Introduction

Windows est le système d'exploitation de Microsoft. Il s'agit du système


d'exploitation le plus répandu au monde. Il équipe les ordinateurs de la gamme
PC. Ce système d'exploitation doit son nom au principe de « fenêtres » qu'il a
introduit dès sa première version. À chaque nouvelle version, Microsoft apporte
des améliorations et fonctionnalités supplémentaires à l'ordinateur Windows,
P a g e | 95

avec à chaque fois un nouvel environnement graphique. Les différentes versions


de Windows ont également suivi les évolutions des ordinateurs.

b. Les différentes versions de Microsoft Windows

Microsoft a sorti sa première version de Windows en 1985 : à partir de là, il a


proposé de nouveaux systèmes d'exploitation presque tous les ans, avec des
modifications plus ou moins importantes d'un système d'exploitation à l'autre.

Certains systèmes d'exploitation ont connu un succès sans précédent comme


Windows 95, Windows XP ou Windows 7, d'autres ont très vite été abandonnés
par les utilisateurs comme Windows Me.

• Windows 1.0 : 1985 ;


• Windows 2/ Windows 2.10 / Windows 2.11 : 1987 ;
• Windows 3. 0 : 1990 ;
• Windows 3.1 : 1992 ;
• Windows NT 3.1 : 1993 ;
• Windows NT 3.5 : 1994 ;
• Windows 95 : 1995 ;
• Windows NT 3.51 : 1995 ;
• Windows NT 4.0 : 1996 ;
• Windows 98 : 1998 ;
• Windows 98 SE : 1999 ;
• Windows 2000 : 2000 ;
• Windows Me : 2000 ;
• Windows 2000 SP2 : 2001 ;
• Windows XP : 2001 ;
• Windows 2000 SP3 : 2002 ;
• Windows XP Media Center : 2002 ;
• Windows XP SP3 : 2008 ;
• Windows Vista : 2008 ;
• Windows Vista SP2 : 2009 ;
• Windows 7 : 2009 ;
• Windows 8 : 2012 ;
• Windows 8.1 : 2013 ;
• Windows 8.1 Update : 2014.
P a g e | 96

• Windows 10

Windows 7 a apporté, outre une nouvelle interface graphique, de nombreuses


améliorations et fonctionnalités par rapport aux précédentes versions de
l'ordinateur Windows :

• Nouvelle barre des tâches plus performante avec des boutons plus gros
et prévisualisation d'écran améliorée.
• Les programmes sont plus rapidement accessibles.
• Recherche simplifiée depuis le menu démarrer.
• Simplification du partage de fichiers et périphériques.
• Performances améliorées : exécution plus rapide des programmes et
utilisation réduite de la mémoire.
• Connexion aux réseaux sans fil simplifiée et rapidement accessible.
• Prise en charge des écrans tactiles grâce à une interface tactile.
• Personnalisation des thèmes, arrières plans et diaporama plus facile.
• Plus de souplesse dans la gestion des messages de sécurité.
• Lecture des fichiers multimédia sur d'autres ordinateurs, diffusion à
distance.

La configuration minimum requise de Windows 7 est reprise dans le tableau ci-


dessous:

Version 32 bits Version 64 bits


Processeur 1 GHz 1 GHz
Mémoire 1 Go 2 Go
Espace disque 16 Go 20 Go
Carte graphique Direct X 9, lecteur WDDM Direct X 9, lecteur WDDM
1.0 1.0
P a g e | 97

c. Présentation de Windows 7 et 8

• Bureau de Windows 7

• Bureau de Windows 8
P a g e | 98

L’utilisation de Windows a été largement enseignée en deuxième graduat


informatique. Ce point est juste une présentation basique.

3. UNIX / LINUX

a. Introduction

De nos jours, les systèmes les plus puissants sont basés sur un design vieux de
plus de 35 ans! La philosophie d’UNIX est basé sur :

• La simplicité, ce qui est simple est beau


• Faire que chaque programme fasse une seule chose et bien
• Préférer la portabilité à l'efficacité
• Éviter les interfaces captives
• Abstraction du système
• Noyau: niveau matériel
• Shell: niveau texte
• X Window: niveau graphique

Au départ, Unix à été créé pour les ordinateurs multi-utilisateurs. Les principales
caractéristiques sont donc :

• Multiutilisateur et sécurisé: par défaut, les utilisateurs ordinaires ne


peuvent pas toucher aux fichiers d'autres utilisateurs. En particulier, ils ne
peuvent ni modifier les paramètres du système, ni supprimer des
P a g e | 99

programmes, etc. Le root est l’utilisateur administrateur qui possède tous


les privilèges ou tous les droits.
• Multitâches
• Capable de supporte plusieurs processeurs
• Extrêmement flexible
• Prise en charge du réseau
• Portable
• Scalable

b. Architecture UNIX

L’architecture du système UNIX peut être résumée sur la figure ci-dessous :

Applications graphique des utilisateurs


navigateur web, Office, Multimédia,

Application en ligne de commande
ls, mkdir, wget, gcc, …
Librairies partagées
Libjpeg, libstdc++, libxml, …
Librarie C
GNU Library, uClibc, …
Noyau système
Matériel et péripherique

c. Linux

Linux est constitué d’un noyau libre semblable à un noyau Unix. Il a été conçu
par Linus Torvalds en 1991. Le système complet se repose sur les outils GNU:
bibliothèque C, gcc, binutils, fileutils, make, emacs... Le système complet est
donc appelé “GNU / Linux”.

Linux a été très tôt partagé comme Logiciel Libre (Licence GPL), ce qui attira des
contributeurs et des utilisateurs de plus en plus nombreux. Depuis 1991, Linux
connaît une croissance supérieure à tout autre système d'exploitation (pas
seulement Unix).
P a g e | 100

Sous Linux, il ya une notion de « distributions ». Elles se chargent de publier un


ensemble cohérent de versions compatibles du noyau, de la bibliothèque C, des
compilateurs, des outils... Cela représente un travail très conséquent. Les outils
sont disponibles sous forme de paquetages qui peuvent facilement être installés,
supprimés ou mis à jour. Les dépendances entre outils sont gérées
automatiquement. On trouve deux catégories de distributions :

• Distributions commerciales : qui incluent de l'assistance technique. Le


code source est libre, mais les binaires ne sont pas libres d'accès.
o Red Hat: http://www.redhat.com La plus populaire. Fiable, sûre,
conviviale et facile à installer, prise en charge par tous les
fournisseurs de logiciel et de matériel.
o Suse (Novell): http://www.suse.com L'alternative principale. Face à
installer, conviviale et stable. Vous pouvez obtienir le support des
fournisseurs de logiciel et de matériel.
o Mandriva (anciennement Mandrake): http://mandrivalinux.com
Conviviale, facile à installer, plus innovante, mais moins stable.
Cette distribution cible principalement les utilisateurs individuels.
Peu pris en charge par les fournisseurs de logiciel et de matériel.
• Distributions communautaires: sources et binaires sont librement
disponibles. Fourni sans assistance technique obligatoire.
o Fedora Core: http://fedora.redhat.com Stable, sûre, conviviale,
facile à installer. Sortie fréquente de nouvelles versions complètes.
o Ubuntu Linux: http://ubuntulinux.org La distribution
communautaire qui progresse le plus. Basé sur Debian mais avec
une version stable tout les 6 mois. Conviviale pour les utilisateurs.
Bonne pour les débutants.
o Debian: http://debian.org Très stable et sûre, mais plus difficile à
configurer et à installer. Conviviale pour les développeurs mais pas
encore pour les utilisateurs. Version stables pas assez fréquentes
(tous les 2 ou 3 ans). La meilleure pour les serveurs, mais pas pour
les débutants.
o Mandriva Community: http://mandrivalinux.com Facile à installer,
sûre, conviviale, sortie fréquente de versions complètes, mais
moins stable (pas assez de tests et de prise en compte des retours
des utilisateurs et testeurs).
P a g e | 101

• Distributions live : des distributeur où Linux s'amorce à partir d'un


périphérique de stockage (cdrom,dvdrom ou usb) et démarre tout à partir
de ce périphérique. Idéal pour essayer GNU / Linux et les applications des
logiciels libres sans avoir à installer quoi que ce soit sur le disque dur. Le
système est prêt et démarre en 2 à 3 minutes. Plus rapide qu'installer et
configurer GNU / Linux. Ce système est aussi efficace pour récupérer des
données lorsque le système d'origine ne démarre plus. Les distributions
live Utilisent un système de compression pour mettre en mémoire 3 à 4
fois la capacité de stockage. La liste des distributions live peut être trouvée
sur le lien : http://frozentech.com/content/livecd.php
o Knoppix: http://knoppix.net/ La plus populaire. Disponible en CD et
DVD. Idéale pour l'auto configuration de votre matériel.
o Ubuntu: http://ubuntulinux.org Distribue un CD live avec chaque
version (tous les 6 mois).

Il est à noter qu’il ne faut pas confondre la version de distribution avec celle du
noyau!

d. Les fichiers sous Linux / UNIX

Sous Linux/UNIX (presque) tout est fichier. On trouve les fichiers ordinaires, les
répertoires qui ne sont juste que des fichiers listant plusieurs fichiers, les liens
symboliques ceux qui font référence au nom d'un autre fichier, les périphériques
et dispositifs, la lecture et l'écriture à partir d'un dispositif se fait comme un
fichier.

Depuis le début d'Unix, les noms de fichiers ont les caractéristiques suivantes:
• Sensibles aux majuscules / minuscules
• Pas de longueur limite évidente
• Peuvent contenir tous caractères (incluant l'espace, à l'exception de /). Les
types de fichiers sont stockés dans un fichier (“nombre magique”). Les
extensions d'un nom de fichier n'ont pas besoin et ne sont pas interprétés.
Ils sont justes utilisés pour les utilisateurs.

Par exemple, les fichiers peuvent être nommés comme suit :


P a g e | 102

README, .bashrc, Windows, Buglistindex.htm,


index.html, index.html.old

Les fichiers sont localisés par un chemin, un chemin est une séquence de
répertoires emboîtés avec un fichier ou un répertoire à la fin, séparés par le
caractère /. Un exemple d’un chemin relatif:
documents/fun/microsoft_jokes.html (Relatif au répertoire courant). Un
exemple d’un chemin absolu: /home/bill/bugs/crash9402031614568. Le
répertoire / représente le répertoire racine («root»). Il représente le début des
chemins absolus pour tous les fichiers du système de fichiers (même pour les
fichiers sur des périphériques externes ou de partage réseau).

Dans GNU/Linux rien n’est imposé par le système en ce qui concerne la structure
de fichiers. Elle peut varier d’un système à l’autre, même entre deux installations
de GNU / Linux.

/ Répertoire racine
/bin/ Commandes de base du système
/boot/ Images, initrd et fichiers de
configuration du noyau
/dev/ Fichiers représentant des
périphériques
/dev/hda: premier disque dur IDE
/etc/ Fichiers de configuration du système
/home/ Répertoires utilisateur
/lib/ Bibliothèques de base du système
(partagées)
/lost+found Fichiers détériorés que le système a
essayé
de récupérer.
/mnt/ Systèmes de fichiers montés
/mnt/usbdisk/, /mnt/windows/ ...
/opt/ Outils spécifiques installés par
l’administrateur.
Souvent remplacé par /usr/local/
P a g e | 103

/proc/ Accès aux informations du système


/proc/cpuinfo, /proc/version ...
/root/ Répertoire utilisateur de
l’administrateur
/sbin/ Commandes réservées à
l’administrateur.
/sys/ Contrôle du système et des
périphériques
(fréquence du processeur, gestion de
l’alimentation des périphériques,
etc.)
/tmp/ Fichiers temporaires
/usr/ Programmes utilisateurs ordinaires,
non essentiels au système.
/usr/bin/, /usr/lib/, /usr/sbin...
/usr/local/ Outils spécifiques installés par
l’administrateur.
(souvent préféré à /opt/)
/var/ Données utilisées par le système ou
ses serveurs /var/log/,
/var/spool/mail (courrier entrant),
/var/spool/lpd (travaux
d’impression)...

e. Interpréteur de commandes et interpréteur de fichiers

Les interpréteurs de commandes sont des outils pour exécuter des commandes
tapées par un utilisateur. Appelés “shells” (coquilles) parce qu’elles masquent
sous leur surface les détails du système d’exploitation sous-jacent.
Les commandes sont tapées dans un terminal en mode texte, constitué soit par
une fenêtre dans un environnement graphique, soit par une console sur un écran
en texte seul. Les résultats sont aussi affichés sur le terminal. Aucun graphique
n’est nécessaire. Les interpréteurs de commandes peuvent être programmables:
ils fournissent toutes les ressources nécessaires pour l’écriture de programmes
complexes (variables, conditions, boucles...).
P a g e | 104

Les interpréteurs de commandes les plus connus et les plus populaires sont les
suivants :
• sh: Le Bourne shell (obsolète). C’est le shell de base qu’on trouve
traditionnellement dans les systèmes Unix, par Steve Bourne.
• csh: Le C shell (obsolète). C’est le chell avec une syntaxe à la C, qui a connu
son heure de gloire.
• tcsh: Le TC shell (toujours très populaire). C’est une implémentation
compatible avec le C shell, avec des fonctionnalités avancées (complète
les noms de commandes, rappel de commandes antérieures et bien
d’autres...)
• bash: Le Bourne Again shell (le plus populaire). C’est une version
améliorée de sh avec de nombreuses fonctions nouvelles.

f. Les commandes de base Linux/UNIX

• La commande ls

Cette commande affiche la liste des fichiers dans le répertoire courant, en ordre
alphanumérique, sauf ceux qui commencent par le caractère “.”.

ls –a («all»: tous) : Affiche tous les fichiers (y compris les fichiers .*)
ls –l (long) : Affichage en format long (type, date, taille, propriétaire,
permissions)
ls –t (temps) : Affiche les fichiers les plus récents en premier
ls –S (“size”: taille) : Affiche les fichiers les gros en premier
ls –r («reverse»: inversé) : Affiche en ordre inverse
ls –ltr (les options peuvent être combinées) : Format long, les fichiers les plus
récents à la fin
ls *txt : l’interpréteur remplace d’abord *txt par tous les noms de fichiers et de
répertoires finissant par txt (y compris .txt), sauf ceux commençant par ., et enfin
exécute la ligne de commande ls.
ls –d .* : Affiche tous les fichiers et les répertoires commençant par . –d indique
à ls de ne pas afficher le contenu des dossiers .*
cat ?.log : Affiche le contenu de tous les fichiers dont le nom commence par 1
caractère et finit par .log
P a g e | 105

• Les commandes cd et pwd

La commande cd <dir> permet de change le répertoire courant en <dir>. La


commande pwd Affiche le répertoire courant ("répertoire de travail").

• La commande cp

cp <fichier_orig> <fichier_dest> : permet de crée une copie d’un fichier d’origine


cp fich1 fich2 fich3 ... rep permet de copie tous les fichiers vers le répertoire de
destination (dernier argument)
cp –i (interactif) : Demande confirmation à l’utilisateur dans le cas où le fichier
de destination existe déjà.
cp –r <rep_orig> <rep_dest> (récursive) permet de copie du répertoire tout
entier

• Les commandes mv et rm

mv <ancien_nom> <nouveau_nom> (“move”: déplacer) : permet de change le


nom du fichier ou du répertoire donné
mv –i (interactif) : si le fichier existe déjà, demander confirmation à l’utilisateur
rm fich1 fich2 fich3 ... (“remove”: supprimer): permet de supprime les fichiers
donnés
rm –i (interactif) : demande toujours à l’utilisateur de confirmer les suppressions
rm –r rep1 rep2 rep3 (récursif): permet de suppression des répertoires donnés
et de tout leur contenu.

• La commande mkdir

mkdir rep1 rep2 rep3 ... (“make dir”: créer rép.): permet de crée des répertoires
avec les noms spécifiés
rmdir rep1 rep2 rep3 ... (“remove dir”: supprimer répertoire) : permet de
supprime les répertoires spécifiés. Pour raison de sécurité, cette commande ne
fonctionne que quand les répertoires sont vides.
La commande alternative est rm –r

• Afficher le contenu de fichiers

Il exite plusieurs façons d’afficher le contenu de fichiers sous Linux et UNIX


P a g e | 106

cat fich1 fich2 fich3 ... (concaténer): permet de mettre de bout à bout et affiche
le contenu des fichiers donnés

more fich1 fich2 ... (plus de détails) : à chaque page, demande à l’utilisateur
d’appuyer sur une touche pour continuer. Peut aussi aller directement à la
première apparition d’un mot clé (commande "/")

less fich1 fich2 fich3 ... (moins): cette commande fait plus que more avec moins.
Cette commande ne lit pas le fichier entier avant de commencer à afficher. Elle
permet de remonter en arrière dans le fichier (commande "?")

• Les commandes head et tail

head [-<n>] <fichier> (tête) permet d’affiche les <n> premières lignes (ou 10 par
défaut) du fichier donné. Cette commande n’a pas besoin d’ouvrir le fichier en
entier pour s’exécuter.

tail [-<n>] <fichier> (queue) permet d’affiche les <n> dernières lignes (ou 10 par
défaut) du fichier donné. Ne charge pas tout le fichier en mémoire. Cette
commande est très utile pour les gros fichiers.

tail –f <fichier> (follow: suivre) permet d’affiche les 10 dernières lignes du fichier
donné et continue à afficher les nouvelles lignes au fur et à mesure qu’elles sont
rajoutées en fin de fichier. Très pratique pour suivre les rajouts à un fichier de
journal (“log”)

• La commande grep

grep <motif> <fichiers> permet de parcourt les fichiers donnés et affiche les
lignes qui correspondent au motif spécifié.

grep erreur *.log permet d’affiche toutes les lignes contenant erreur dans les
fichiers *.log

grep v info *.log permet d’affiche toutes les lignes des fichiers, sauf celles qui
contiennent info

• La commande sort
P a g e | 107

sort <fichier> (trier) permet de trie les lignes du fichier selon l’ordre des
caractères et les affiche.

sort –r <fichier> (“reverse”: inverse) permet de trie les lignes du fichier en ordre
inverse

sort –ru <fichier> l’option -u signifie unique. La commande permet de trier les
lignes du fichier, mais ne sort qu’une seule fois les lignes identiques.

• Liens symboliques et liens physiques

Un lien symbolique est un fichier spécial qui est juste une référence au nom d’un
autre (fichier ou répertoire). Cette commande est utile pour simplifier et réduire
l’utilisation du disque quand deux fichiers ont le même contenu.

Pour créer un lien symbolique (même ordre que dans cp): ln –s nom_fichier
nom_lien. La commande ln –s fich1 fich2 fich3 ... rep permet de créer plusieurs
liens d’un coup dans un dossier donné.
Pour supprimer un lien, nous utilisons la commande rm nom_lien. Notons que
cela ne supprime pas le fichier référencé par le lien.

Par défaut, la commande ln crée des liens physiques. Un lien physique vers un
fichier est un fichier ordinaire, avec exactement le même contenu physique. Bien
qu’ils économisent toujours de la place, les liens physiques sont indiscernables
des fichiers d’origine. Si vous supprimez le fichier d’origine, cela n’affecte pas le
contenu du lien physique.

Le contenu est supprimé quand il n’y a plus aucun fichier (lien physique) qui y
fait référence.
P a g e | 108

• Droits d’accès aux fichiers

Utiliser ls –l pour consulter les droits d’accès aux fichiers se trouvant dans le
répertoire courant.

Trois (3) types de droits d’accès peuvent être trouvés :


- Accès en lecture (r: read)
- Accès en écriture (w: write)
- Droits d’exécution (x)

Trois (3) types de niveaux d’accès:


- Utilisateur (u): pour le propriétaire du fichier
- Groupe (g): tout fichier a un attribut “groupe”, qui correspond à une liste
d’utilisateurs
- Autres (o: others): pour tous les autres (propriétaire et groupe exclus)

Notons que x sans r est autorisé mais est sans valeur. Vous devez donc pouvoir
lire un fichier pour l’exécuter. Les répertoires requièrent à la fois les droits r et
x: x pour entrer, r pour accéder au contenu. Vous ne pouvez pas renommer,
supprimer ou copier des fichiers dans un répertoire si vous n’avez pas accès en
écriture à ce répertoire.

Si vous avez accès en écriture à un répertoire, vous POUVEZ supprimer un fichier


même si vous ne disposez pas de droits d’écriture pour ce fichier (souvenez-vous
P a g e | 109

qu’un répertoire est juste un fichier décrivant une liste de fichiers). Cela permet
même de modifier un fichier (le supprimer et le recréer) même protégé en
écriture.

Quelques exemples :
-rw-r- -r - - signifie que le fichier est lisible et modifiable pour le propriétaire,
seulement lisible pour les autres.
-wr-r- - - - - signifie que le fichier est lisible et modifiable pour le propriétaire,
seulement lisible pour les utilisateurs appartenant au groupe du fichier.

drwx - - - - - - signifie que le répertoire est seulement accessible par son


propriétaire
- - - - - - - r-x signifie que le fichier exécutable seulement par les autres, mais ni
par vos amis ni par vous même.

Pour modifier les permissions sur chmod. La syntaxe est la suivante : chmod
<permissions> <fichiers>

Nous distinguons 2 formats pour les droits d’accès:

- Format en base 8 (abc): a,b,c = r*4+w*2+x (r, w, x: booléens)


Exemple 1: chmod 644 <fichier> cette commande permet de donner les droit rw
pour u (propriétaire), r pour g (groupe) et o (autres) sur le fichier nommé
<fichier>.
En effet, le droit pour le propriétaire est de 6 = 110 en binaire, le droit pour le
groupe est de 4 = 100 en binaire, le droit pour les autres est de 4 = 100 en binaire.

- Format symbolique. Facile à comprendre par des exemples:


chmod go+r: ajouter droit en lecture au groupe et aux autres
chmod u-w: supprimer droit d’écriture pour le propriétaire
chmod a-x: (a: all = tous). Enlever les droits d’exécution à tous les utilisateurs.
chmod -R a+rX <rep>: Rend le répertoire <rep> et tout ce qu’il contient
accessible à tout le monde. R permet d’appliquer les changements
récursivement. L’option X: x, mais seulement pour répertoires et fichiers déjà
P a g e | 110

exécutables. Très pratique pour ouvrir récursivement l’accès à des répertoires,


sans ajouter des droits d’exécution à tous les fichiers.

• Alias

Les shells vous permettent de définir des alias: des raccourcis pour des
commandes que vous utilisez très souvent. Par exemple, nous pouvons créer un
alias avec la commande :

alias ls='ls -la', desormais la commande ls donnera le résultat de la commande


ls –la. Cette commande est utile pour toujours lancer des commandes avec
certains paramètres

alias rm='rm -i' : Utile pour faire que rm demande toujours une confirmation
alias cia='. /home/sydney/env/cia.sh' Utile pour initialiser rapidement un
environnement. Le point (.) est une commande shell pour exécuter le contenu
d’un script shell. Le chapitre sur le scripting va présenter ces notions.

g. La gestion de processus sous UNIX

Rappelons qu’un processus peut être vu comme :


- Instance d'un programme en cours d'exécution,
- Plusieurs instances d'un même programme peuvent s'exécuter en même
temps,
- Données associées aux processus: ouvrir un fichier, mémoire allouée, pile,
id processus, parent, priorité, état...
En fait, sous Unix, l’exécution d’un processus se fait sous deux modes, le mode
utilisateur et le mode noyau. Le mode noyau correspond aux appels au code du
noyau : write, read, … Le mode utilisateur correspond aux autres
instructions. Un processus en mode noyau ne peut être suspendu par
l’ordonnanceur. Il passe à l’état préempté à la fin de son exécution dans ce
mode, à moins d’être bloqué ou détruit. Cet état est virtuellement le même que
prêt en mémoire.

Par ailleurs, lorsque la mémoire ne peut contenir tous les processus prêts, un
certain nombre d’entre eux sont déplacés sur le disque. Un processus peut alors
être prêt en mémoire ou prêt sur le disque. De la même manière, on a des
processus bloqués en mémoire ou bien bloqués sur disque.
P a g e | 111

Enfin, les processus terminés ne sont pas immédiatement éliminés de la table


des processus. Il est possible qu’ils soient éliminés par une instruction explicite
de leur père. Ceci correspond à l’état défunt. Les états d’un processus Unix sont
alors :

“Tout dans Unix est fichier


Tout dans Unix qui n'est pas un fichier est un processus”
Programmes en tâche de fond: le mode d’utilisation dans tous les shells est le
même. Utile pour les tâches en ligne de commande dont les résultats peuvent
être examinés plus tard, en particulier celles qui prennent beaucoup de temps.
Pour lancer des applications graphiques depuis la ligne de commande et les
utiliser ensuite à la souris. Pour démarrer une tâche : ajouter & au bout de votre
ligne

Contrôle des tâches de fond :


Jobs : fournit la liste des tâches de fond issues du même shell
fg %<n> : faire de la dernière / nième tâche de fond la tâche courante
[Ctrl] Z: mettre la tâche courante en arrière plan:
P a g e | 112

kill %<n> : Interrompt la nième tâche

Il y a des commandes de base UNIX/Linux qui permettent de gérer les processus.


Ce point va tenter de balayer ces commandes.

ps –ux : Affiche tous les processus appartenant à l’utilisateur courant.


ps –aux (remarque: ps –edf sur systèmes System V) : Affiche tous les processus
existant sur le système.
Le résultat d’une commande ps affiche les résultats sous forme d’un tableau, les
libellé sont les suivants :
PID: (Process ID) : Identifiant du processus
VSZ: (Virtual SiZe) : Taille virtuelle du processus (code + données + pile)
RSS: (ReSident Size) : Nombre de Ko occupés en mémoire
TTY: (TeleTYpe) : Terminal
STAT: Statut: R (Runnable: exécutable), S (Sleep: endormi), W (paging: en cours
de pagination), Z (Zombie) ...

La commande top : Affiche les processus les plus actifs, triés par utilisation du
processeur. L’ordre de tri peut être changé en tapant M: utilisation Mémoire, P:
%CPU, T: Temps d’exécution. On peut arrêter une tâche en tapant k (kill) et son
numéro.

Arrêt de processus
kill <pids> : Envoie un signal d’arrêt aux processus spécifiés. Cela permet aux
processus de sauvegarder leurs données et s’arrêter eux-mêmes. Par exemple :
kill 3039 3134 3190 3416
kill -9 <pids> : Envoie un signal d’arrêt immédiat. Le système lui-même se charge
d’arrêter les processus. Utile quand une tâche est vraiment bloquée (ne répond
pas à kill -1).
kill -9 -1 : Arrête tous les processus de l’utilisateur courant. -1: tous les processus.

killall [<-signal>] <command> : Arrête toutes les tâches exécutant


<commande>. Par exemple: killall bash
xkill : Vous laisse arrêter une application graphique en cliquant dessus. Cette
commande est très rapide et utile quand vous ne connaissez pas le nom de
commande de l'application.
P a g e | 113

h. Editeur de commande

Il existe plusieurs éditeurs de texte graphiques qui conviennent pour la plupart


des besoins. Nous pouvons citer nedit, Emacs, Xemacs, etc.
Mais il existe aussi des éditeurs en mode texte uniquement, qui sont souvent
indispensables aux administrateurs système et parfaits pour les utilisateurs
expérimentés. Nous pouvons citer les éditeurs comme vi et nano.

Dans le cadre de ce cours, nous allons nous intéresser aux éditeurs vi et nano.

a. L’éditeur vi
Éditeur de texte en mode texte disponible sur tous les systèmes Unix. Créé avant
même l’apparition de la souris. Cet éditeur est difficile à apprendre pour les
débutants habitués aux éditeurs graphiques.
Mais notons que qu’il est très productif pour les utilisateurs avancés. Cet éditeur
est souvent incontournable pour modifier des fichiers en administration de
système ou dans les systèmes embarqués, quand vous ne disposez que d’une
console texte.

Implémentation de vi maintenant disponible sur la plupart des stations de travail


GNU / Linux. Il apporte de nombreuses fonctionnalités des éditeurs modernes:
mise en évidence de la syntaxe, historique de commandes, aide, annulation sans
limite et bien d’autres. Un exemple de fonctionnalité sympa est que vi: peut
ouvrir directement les fichiers compressés. Actuellement il existe vim
accompagné d’une interface graphique GTK (gvim). Mais nous devons noter que
ce logiciel libre (à cause d’une petite restriction à la liberté d’effectuer des
changements).

L’éditeur vi est extrêmement puissant, il contient 30 commandes facile à


apprendre et suffisante pour 99% des besoins quotidiens. Vous pouvez aussi
suivre le tutoriel rapide en lançant la commande vimtutor sur votre consol.

L’éditeur vi fonctionne sous deux modes : mode commande et mode insertion.


Le mode éditeur permet de saisir les textes.
Voici les commandes usuelles de vi :
P a g e | 114

Commande Description
0 Aller en début de ligne
$ Aller en fin de ligne
K Ligne précédente
J Ligne suivante
H Caractère précédent
L Caractère suivant
B Mot précédent
W Mot suivant
Ctrl-B Page précédente
Ctrl-F Page suivante
Aller à la ligne n. Exemple: 1G va sur la première
nG
ligne
G Aller à la dernière ligne
X Supprime le caractère sous le curseur
Supprime la ligne courante et la copie dans le
Dd
presse-papiers
Nd Idem avec n lignes
J Fusionne la ligne courante et la suivante
Yy Copie la ligne courante dans le presse-papiers
Ny Idem avec n lignes
P Colle le presse-papiers avant la position courante
P Colle le presse-papiers après la position courante
V Commence une sélection en mode caractères
V Commence une sélection en mode lignes
Ctrl-V Commence une sélection en mode "rectangulaire"
Supprime la sélection et la copie dans le presse-
D
papiers
Y Copie la sélection dans le presse-papiers
C Supprime la sélection et passe en mode insertion
P a g e | 115

Passe en mode insertion avant la position


I
courante
Passe en mode insertion après la position
A
courante
Passe en mode insertion sur une nouvelle ligne
O
sous la ligne courante
Esc Quitte le mode insertion
U Annule la dernière commande
Remplace le caractère sous le curseur par le
R
prochain caractère tapé
Convertit le caractère sous le curseur en
~
majuscule si c'est une minuscule et vice-versa
/texte Recherche en avant du texte indiqué
?texte Recherche en arrière du texte indiqué
N Recherche l'occurrence suivante
N Recherche l'occurrence précédente
:%s/chercher/remplacer Recherche avec remplacement dans tout le fichier
:w Sauvegarde le fichier courant
:wfichier Ecrit le document dans le fichier indiqué
Inclut le fichier indiqué à partir de la position
:rfichier
courante
:q! Quitter en annulant les modifications
ZZ (ou :wq) Quitter en enregistrant les modifications

b. L’éditeur nano
Un autre éditeur de texte léger en mode texte est nano. C’est un clone amélioré
de Pico (éditeur non libre dans Pine). Cet éditeur est convivial et plus facile à
prendre en main grâce à un résumé des commandes affiché à l’écran. Disponible
P a g e | 116

sous forme de paquetages binaires pour plusieurs plateformes. Cet éditeur est
une alternative à vi dans les systèmes embarqués.

Ci-dessous, voici une capture d’écran de nano :


P a g e | 117

CHAPITRE IV. PROGRAMMATION SHELL (SCRIPTING)


1. Introduction

Ce chapitre a pour but d’initier les étudiants à la programmation shell en utilisant


le bash (Linux) et le Batch (Windows). Ce chapitre est subdivisé en deux parties.
La première va balayer les notions sur la programmation avec Batch et la
seconde sur la programmation shell avec bash.

2. Programmation Batch

a. Introduction
Batch est un langage de script, il permet d'exécuter une suite d'instructions ayant
un but précis et pouvant servir à l'automatisation de tâches (par exemple,
renommer tous les fichiers d'un dossier d'un coup). Cette suite d'instructions est
interprétée par l'interpréteur de commande Windows : la console (cmd.exe).

En Batch, il faut créer un fichier ayant pour extension : *.bat. Pour cela nous
devons nous munir d'un éditeur de code. Nous utiliserons bloc note ou
notepad++.

Au début de chaque fichier contenant du code batch, il est conseillé d'écrire la


commande :

@echo off

Cette ligne permet de cacher toutes les lignes de commande qui sont effectuées
lors de l'exécution du programme, ainsi que cette même ligne.

Le préfixe @, quand il est placé en début de ligne, sert à inverser l'état de


l'affichage standard (activé ou désactivé) pour l'exécution de la commande qui
le suit (pas seulement pour la commande echo)

La commande echo gère l'affichage dans l'interpréteur, elle peut :

b. modifier l'état de l'affichage standard ;


c. afficher l'état de l'affichage standard ;
d. afficher un message ou une ligne vide dans l'interpréteur.
P a g e | 118

Désactiver l'affichage standard peut être fait via la commande echo off dans ce
cas seuls les erreurs et les messages de la commande echo sont affichés.

Pour activer l'affichage standard peut être fait via la syntaxe echo on, ici tout est
affiché. La commande echo utilisée sans paramètre renvoie l'état de l'affichage
standard en cours.

b. Mon premier programme batch


Nous allons écrire et exécuter notre premier programme Batch. Notre fichier
texte est nommé test.bat

@echo off
cls
rem Ceci est une remarque
:: Ceci est un commentaire
echo Bonjour Monde !
echo.

Pour exécuter ce petit programme, nous cliquons deux fois de suite sur le
fichier test.bat soit nous tapons dans le consol MS-DOS la commande
start test.bat, attention : le fichier doit être dans le répertoire en cours.

La commande pause > nul permet d’effacer la ligne « Appuyer sur une
touche pour continuer… » dans le résultat de l’exécution du programme.

c. Les variables

Une variable est une partie du langage composée de deux éléments : un nom et
une valeur. Le nom pointe vers un emplacement précis de la mémoire ayant une
valeur qui lui a été attribué à sa création, et qui peut être modifiée. Les variables
P a g e | 119

sont utilisables n'importe où dans le programme et permettent de retenir des


informations précises. Elles permettent d'effectuer des opérations tout le long
du programme (calculs, conditions...).

La création de variables en programmation est plus souvent appelée déclaration


de variables.

Dans un script Batch, on différencie deux types de variables : les variables du


script, et les variables d'environnement.

Variables du script sont celles que nous créeront pendant l’écriture du


programme. Les variables d'environnement sont utiles lors de la création des
programmes ; elles ont des valeurs bien précises qui s'adaptent à l'ordinateur
sur lequel elles se trouvent. Il est conseillé de ne pas créer de variables portant
leurs noms.

Ce tableau montre quelques dizaines de variables d'environnement :

Variable Valeur

%COMPUTERNAME% Le nom de l'ordinateur

%ComSpec% Indique l'emplacement de la console

%HOMEDRIVE% Indique où se situe le lecteur


principal

%HOMEPATH% Indique où se trouve le dossier


personnel de l'utilisateur en cours

%LOGONSERVER% Donne l'adresse réseau de


l'ordinateur

%NUMBER_OF_PROCESSORS% Donne le nombre de processus en


cours

%OS% Donne le système d'exploitation


installé

%Path% Donne les adresses PATH


P a g e | 120

Variable Valeur

%PROCESSOR_ARCHITECTURE% Donne l'architecture du processeur

%PROCESSOR_IDENTIFIER% Donne l'identification du processeur

%ProgramFiles% Donne l'adresse du répertoire des


programmes

%SystemDrive% Donne le lecteur principal

%SystemRoot% Donne le répertoire où se situe le


système

%TEMP% Donne l'adresse du répertoire


temporaire

%TMP% Donne l'adresse du répertoire


temporaire

%USERNAME% Donne le nom de l'utilisateur

%USERPROFILE% Donne le répertoire personnel de


l'utilisateur en cours

%windir% Donne le répertoire où est installé


Windows

%DATE% Date de l'ordinateur

%TIME% L'heure de l'ordinateur

%CD% Donne l'emplacement actuel de la


console

%RANDOM% Nombre aléatoire

%CMDCMDLINE% Donne l'emplacement de la console.


P a g e | 121

Pour déclarer une variable, En Batch, on utilise la commande set. Cette


commande alloue un endroit dans la mémoire, et donne un nom à son
emplacement qui sera celui du mot qui suit, puis = indique que nous mettons
désormais une valeur à cet emplacement, celle qui suit le signe égal.

Exemple 1: set nom=Serge Kalubi

Les variables doivent respecter une certaine rigueur pour ne pas faire planter le
script :

• Elles doivent commencer par un caractère alphabétique.


• Elles ne doivent pas contenir d'espaces ni de caractères spéciaux.

Exemple 2:

set a=2
set b=5
set resultat=%a%+%b%

Les % autour du nom de chaque variables permettent de récupérer leurs valeurs,


sans quoi résultat aurais la valeur "a+b".

Pour afficher le résultat de ce petit calcul, il faut utiliser ce qu'on appelle un


commutateur : c'est un signe qui se place entre set et le nom de la variable. Afin
d'effectuer un calcul, il faut utiliser le commutateur /a, comme ceci:
@echo off
cls
set a=2
set b=5
set /a resultat=%a%+%b%
echo LE RESULTAT EST %resultat%
echo.
pause

Le résultat obtenu est :


P a g e | 122

Exemple 3 : le commutateur /p permet de récupérer les informations entrées


par l’utilisateur

@echo off
cls
set /p nom=Veuillez entrer votre nom:
echo Votre nom est %nom%
echo.
pause

Le résultat obtenu est :

Exemple 4 : Il est aussi possible de récupérer seulement une partie de la valeur


d'une variable.

set pseudo=BonjouR
set variable=%pseudo:~2,5%
echo %variable%
pause

Ce programme récupérera cinq (5) caractères en commençant par le troisième


(le "n").
P a g e | 123

d. Les conditions

La condition if. Notons qu’en Batch else if et switch n’existent pas. Voici la
syntaxe de la condition if.

if [COMPARE 1] [COMPARANT] [COMPARE 2] (


:: action si la condition est respectée
) else (
:: action si la condition n'est pas respectée
)

Voici maintenant un tableau des comparants.

Comparant Signification

equ (ou ==) égal à

neq différent de

lss inférieur à

leq inférieur ou égal à

gtr supérieur à

geq supérieur ou égal à

Exemple 1.

if %variable1% == 12 (
echo variable1 est egal a 12
) else (
P a g e | 124

echo variable1 n'est pas egal a 12


)

Pour les fichiers, la syntaxe se forme ainsi:

if not exist [FICHIER] (


:: action si la condition est respectée
) else (
:: action si la condition n'est pas respectée
)

Bien sur, n'écrivez not que lorsque vous voulez vérifiez que le fichier n'existe pas.

Exemples 2.

:: Affiche les choix de l'utilisateur

echo 1. Continuer - 2. Quitter

:: a prend pour valeur la saisie de l'utilisateur


set /p a=Que voulez-vous faire ?

:: Si l'utilisateur a écrit 2, on quitte le programme


avec la commande exit
if %a%==2 (exit)

:: Sinon on continue et on marque une pause afin que la


console ne se ferme pas
echo Bienvenue
pause > nul
:: On crée le fichier pseudo.txt contenant ABCDE si
celui-ci n'existe pas
if not exist pseudo.txt ( echo ABCDE > pseudo.txt )

e. Etiquettes et boucles

• Etiquettes
P a g e | 125

Les étiquettes sont des instructions qui permettent (à l'aide de l'instruction goto)
de répéter le programme, ou une partie de celui-ci. Créer une étiquette est
encore plus facile que d'afficher un message à la fenêtre. Il suffit de mettre le
signe deux points (:) puis de rajouter le nom de l'étiquette.

GOTO est une fonction très utile pour des jeux avec répétitions. Elle sert à
renvoyer l'utilisateur à un endroit précis, comme le début. Elle est utilisée
généralement comme des boucles.

• Boucle for
La boucle for permet d'exécuter un nombre de fois défini une action. Le principe
de la boucle for est de monter de x une variable à chaque tour de boucle en
répétant des instructions. Pour la boucle, les variables s'écrivent avec
%%nom_de_variable.

Par exemple:

For %%v in (5 4 3 2 1) do (

echo %%v
)

Le code ci-dessus affichera :

Exemple 2 : Et si l'on veut aller jusqu'à 50. Pour faire cela, on utilise une
commande avec la syntaxe suivante :

For /l %%v in (0, 1, 50) do (

echo %%v
P a g e | 126

)
1. Le premier paramètre est la valeur de départ de la variable %%v.
2. Le second paramètre est le pas, il ajoute 1 à %%v à chaque fois qu'il
passe dans la boucle.
3. Le troisième paramètre arrête la boucle lorsque %%v est égal à 50.
Une fois exécuté, ce code affiche : de 0 à 50

Exercices :

1. Ecrire un petit script batch qui permet de choisir un nombre aléatoire.


2. Ecrire un petit script batch qui permet de demander un nombre à
l'utilisateur.
3. Ecrire un petit script batch qui permet de dire à l'ordinateur de comparer
un nombre quelconque et celui qu'a rentré l'utilisateur. Le programme
devra permettre de demande ensuite si ce nombre est plus petit ou plus
grand.
4. Refaire les 2 dernières étapes jusqu'à ce que l'utilisateur trouve.

3. Programmation shell

Le Shell (coquille en anglais) est le composant du système d'exploitation qui


permet d Interpréter les commandes tapées au clavier (on l'appelle aussi
interpréteur de commandes). Aujourd'hui le Shell est en grande partie remplacé
par les programmes fonctionnant avec une interface graphique mais on s'en sert
surtout pour automatiser des tâches gràce à la programmation.

Parmi les Shells les plus connus, il y a sous Windows 9X command.com, sous NT
et suivants cmd.exe et pour la partie graphique explorer.exe. Sous Unix il en
existe un certain nombre, dont les plus connus sont les suivants : Bourne Shell,
Bourne Again Shell, Z Shell, CShell, Korn Shell, ... A l'heure actuelle, des langages
comme Perl, Ruby ou Python prennent la relève des Shells sans toutefois les
remplacer totalement.

Dans le cadre de ce cours, nous allons apprendre le Bash. Ce dernier reprend le


shell originel de Linux (Bourne Shell) et y intègre des améliorations provenant
P a g e | 127

d'autres Shells comme le Ksh et le Csh. Ce programme est libre (licence GPL) et
a été porté sur Windows (Cygwin).

a. Premiers scripts Shell

Syntaxe des scripts Shell : Un script Shell n'est rien d'autre qu'un fichier texte
dans lequel sont inscrites un certain nombre de commandes compréhensibles
par votre interpréteur de commandes. Etant donné que Linux ne prend pas en
compte les extensions des fichiers, nous pouvons nommer nos fichiers comme
nous voulons.

Pour indiquer qu'il s'agit bien d'un script et non pas d'un fichier texte classique,
la première ligne doit toujours commencer par le nom de l'interpréteur de
commandes. Comme dans le cadre de ce cours nous utiliserons le Bash, la
première ligne sera donc :

#!/bin/bash

Vous pouvez écrire autant de lignes de commentaires que vous voulez, pour cela,
faites débuter votre ligne ou votre fin de ligne par #.

Pour créer notre premier script bash qui affichera « Bonjour Monde » à l'écran,
nous allons éditer un fichier que vous, que nous nommons script1.sh par
exemple, avec l’éditeur vi ou Nano comme suit :

#!/bin/bash
echo Bonjour Monde

Pour exécuter le script que nous venons de créer, nous devrons d'abord vérifier
que nous avons le droit d'exécuter ce fichier. Pour cela nous devons taper la
commande ls -l du répertoire dans lequel se trouve le fichier pour vérifier.

Il faut avoir le droit x sur le fichier pour avoir le droit d'exécution, si ce n'est pas
le cas, donnez au fichier le droit d'être exécuté en tapant la commande Linux:

chmod +x script1.sh
P a g e | 128

Le fichier peut alors être exécuté en tapant la commande:

./script1.sh

Essayez maintenant d’ajouter d’autres codes à la suite du script basique


script1.sh. Par exemple :

#!/bin/sh
clear
echo -n Vous utilisez le système
uname
echo
echo -n La version de votre noyau est
uname -r

Exécutez le résultat et observez le résulta que ce code affiche.

b. Les variables

Dans Bash il n'y a pas besoin de déclarer les variables comme dans la plupart de
langages de programmation (langage C par exemple). On peut directement
affecter une valeur à une variable sans se faire de souci. Par exemple

nom=Selain

Pour utiliser les variables qui ont été affectées, on utilise le signe $. Par exemple
pour utiliser la variable nom ci-dessous, nous devons utiliser la ligne de code :

echo $nom #Ceci affichera Selain à l'écran

Il existe des variables prédéfinies par le Bash. Notons que le bash et le système
Linux d'une manière générale utilise ses propres variables pour fonctionner, par
exemple le nom de l'utilisateur courant est stocké dans une variable nommée
$USER. Taper en consol echo $USER pour voir ce qu'elle contient.
P a g e | 129

Les variables système sont nommées en majuscules pour éviter d'entrer en


conflit avec les variables que vous pourriez créer. C’est pourquoi il est conseillé
de toujours nommer les variables en minuscule.

Les principales variables prédéfinies sont :

- HOME (équivaut à ~) répertoire de l'utilisateur


- PATH répertoires contenant des fichiers exécutables
- MAIL chemin d'accès aux mails de l'utilisateur
- MAILCHECK temps au bout duquel un mail est traité
- IFS caractère de séparation des arguments
- TERM nom du type de terminal
- PS1 invite principale du shell en mode interpréteur
- PS2 invite secondaire du shell en mode programmation

c. Opérations et opérateurs arithmétiques

Pour faire des opérations sur des variables, vous pouvez utiliser la commande
expr. Cette commande s'utilise avec des variables de type numérique, par
exemple :

expr 35 «+» 20 #Affichera 55 à l'écran


a=35
b=20
expr $a «*» $b #Affichera 55 à l'écran

Elle peut aussi s'utiliser avec des chaînes de caractères :

expr index $email @ #cherche s'il y a un @ dans $email


# et renvoie l'emplacement de ce caractère

expr length $nom #renvoie le nombre de caractères de


$nom

expr substr $nom 1 5 #donne les 5 premiers caractères


de $nom
P a g e | 130

d. Saisir une information et la stocker dans une variable

Pour créer un programme qui soit interactif, vous pouvez demander à


l'utilisateur de saisir des informations et les utiliser par la suite grâce à des
variables. Pour cela, vous pouvez utiliser la commande read suivie du nom de la
variable dans laquelle vous voulez stocker l'information.

Par exemple :
echo Veuillez entrer votre nom :
read nom
echo Votre nom est $nom

Il est aussi possible de Vous pouvez aussi demander à l'utilisateur d'entrer


plusieurs valeurs en une seule fois,

Par exemple :
echo Veuillez entrer votre nom et votre prenom:
read nom, prenom
echo Votre nom complet est $prenom $nom

e. Structures conditionnelles

- Tests avec if :
Pour vérifier qu'une ou plusieurs conditions sont remplies avant d'effectuer un
traitement, on utilise souvent la clause if.
Par exepmle:

if [$age -ge 18];


then echo Vous etes majeur
fi

La clause if sert à imposer une condition pour effectuer un traitement. Le else


(en français sinon) permet de compléter le if pour effectuer un traitement dans
le cas ou la condition n'est pas remplie.

Par exemple:
P a g e | 131

if [$age -ge 18];


then echo Vous etes majeur
else echo Vous etes mineur
fi

La clause elif (else if) permet d'imbriquer plusieurs if les uns dans les autres pour
pouvoir traiter tous les cas possibles :

if [$feu=«rouge»];
then echo N'avancez pas
elif [$feu=«orange»];
then echo Ralentissez
else echo Allez-y
fi

Exercice : Utiliser cette structure pour écrire un programme bash qui permet de
demander à l’utilisateur d’entrer son mon puis son âge. Le programme devra lui
dire s’il est mineur (0 à 17 ans), majeur (18 à 45 ans) et vieux (46 à plus).

Il est aussi possible de combiner un certain nombre de conditions les unes après
les autres. Par exemple pour vérifier que l'âge entré par l'utilisateur est situé
entre 0 et 100. On peut écrire un code du genre :

if [$age -le 0] || [$age -ge 100];


then echo l\'age entré n\'est pas correct
fi

Pour combiner plusieurs conditions, vous pouvez utiliser soit OU (||), soit ET
(&&). Il s'agit des opérateurs logiques.
P a g e | 132

Exemple :

Si ce répertoire nommé repertoire n'existe pas on le


crée :
if [! -d repertoire];
then mkdir repertoire;
fi

- La structure case

La structure case permet de faire un traitement différent en fonction de la valeur


d'une variable. Par exemple, ce programme qui permet de laisser l’utilisateur
faire le choix de son système d’exploitation préféré.
P a g e | 133

#!/bin/bash
echo Quel est votre OS préféré ?
Echo 1- Windows 2- Linux 3- Mac OS 4- Autre
read $choix
case « $choix » in
1) echo «Vous préférez Windows» ;;
2) echo «Vous préférez Linux»;;
3) echo «Vous préférez Mac OS»;;
4) echo «Vous préférez un autre OS»;;
else ) echo « Vous devez taper un nombre entre 1 et 4
!»;;
esac

- Select

Le select est une extension du case. La liste des choix possibles est faite au début
et on utilise le choix de l'utilisateur pour effectuer un même traitement.

Par exemple :
select systeme in "Windows" "Linux" "BSD" "Mac OS" "MS
DOS"
do
echo "Votre système favori est $systeme."
break
done

Ce qui créera automatiquement un menu et donnera à l'écran (si vous choisissez


4):

1) Windows
2) Linux
3) BSD
4) Mac OS
5) MS DOS
#? 4
Votre système favori est Mac OS.
P a g e | 134

f. Les boules

Les boucles servent en général à deux choses :

- Vérifier qu'une information saisie par l'utilisateur est correcte et lui faire
recommencer la saisie tant que ce n'est pas correct
- Recommencer un certain nombre de fois la même suite de commandes

D'autre part elles fonctionnent toujours avec ces trois critères :


- Une valeur de départ
- Une condition d'entrée ou de sortie
- Une incrémentation
Les boucles While et Until testent une condition avant d'effectuer le traitement,
ce qui veut dire qu'il se peut qu'on n'entre jamais dans la boucle.

• La boucle while (en français Tant que …)

While signifie tant que, ce qui veut dire que la boucle sera exécutée tant que la
condition est respectée.

Par exemples :

i=1 # Valeur de départ 1


while [ $i -le 5 ]; do # Condition de sortie : i > 5
echo tour de boucle numero $i
i = `expr i «+» 1` # Incrément de 1 par tour de
boucle
done

continuer=o # Valeur de départ «o»


while [$continuer=«o»]; do # condition de sortie :
pas o
echo Voulez-vous recommencer ? o/n
read continuer # Nouvelle valeur de continuer
done # (qui remplace l'incrément)

Cette boucle continuera, Cette boucle continue tant que l'utilisateur entre o au
clavier.
P a g e | 135

• La boucle until ( en français jusqu'à …)

Until signifie jusqu'à, ce qui veut dire que la boucle sera exécutée jusqu'à ce que
la condition soit respectée.

Par exemples :

i=1 # Valeur de départ 1


until [$i -gt 5]; do # Condition de sortie : i > 5
echo tour de boucle numero $i
i = `expr i «+» 1` # Incrément de 1 par tour de
boucle
done
continuer=o # Valeur de départ «o»
until [$continuer=«n»]; do # condition de sortie :
n
echo Voulez-vous recommencer ? o/n
read continuer # Nouvelle valeur de continuer
done # (qui remplace l'incrément)

Cette boucle continue jusqu'à ce que l'utilisateur entre n.

• La boucle for :

D’une manière générale, la boucle for est utilisée quand on veut exécuter un
ensemble de commandes un nombre précis de fois.

Par exemple :
echo Combien voulez-vous d\'étoiles ?
read nombre
for i in `seq $nombre`
do
echo -n \*
done

Il existe aussi une commande qui permet d’afficher une séquence de nombre. La
commande seq, elle permet donc d’afficher une liste de nombre :
Par exemple :
P a g e | 136

seq 3 #affichera à l'écran 1 2 3


seq 3 5 #affichera à l'écran 3 4 5
seq 1 2 7 #affichera à l'écran 1 3 5 7

En shell la boucle for est beaucoup utilisée pour traiter les fichiers, par exemple
:

echo Renommer tous les fichiers en y ajoutant votre nom


for fichier in `ls`
do
if [! -d $fichier]; then
fichierdest=$USER--$fichier
mv $fichier $fichierdest
fi
done

g. Passage de paramètres

En général pour utiliser une commande, on l'appelle par son nom, suivi d'un
certain nombre de paramètres, par exemple pour déplacer un fichier.

Par exemple, la commande mv fichier répertoire/, dans cette ligne nous avons
en premier la commande, en deuxième lieu le paramètre 1 et en troisième lieu
le paramètre 2.

L'avantage d'utiliser des paramètres est que lorsqu'on lance le programme, il n'y
a pas à faire intervenir l'utilisateur donc le script peut s'exécuter sans que
personne ne tape quoi que ce soit au clavier. Pour passer un paramètre à votre
programme, il vous faut faire comme avec n'importe quelle commande :
nom_de_votre_script paramètre1 paramètre2

Quand un utilisateur appelle votre programme en y ajoutant des paramètres,


vous devez les récupérer dans des variables. Pour cela il existe des variables
spéciales :

$1 à $9 : contienne le Xième paramètre passé


P a g e | 137

$* : contient tous les paramètres qui ont été passés


$# : contient ne nombre de paramètres qui ont été passés
$0 : contient le nom du script lui-même
$$ : contient le numéro de processus du shell lui-même

Voici un exemple de script utilisant des paramètres :

#!/bin/sh
echo Vous avez passé les $# paramètres suivant :
echo paramètre 1 : $1
echo paramètre 2 : $2
echo paramètre 3 : $3
echo paramètre 4 : $4
echo On peut aussi les afficher tous d\'un coup : $*

En appelant ce programme comme ceci, on obtient :

# mon_script 10 abc toto 91


Vous avez passé les 4 paramètres suivant :
paramètre 1 : 10
paramètre 2 : abc
paramètre 3 : toto
paramètre 4 : 91
On peut aussi les afficher tous d'un coup : 10 abc toto 91

h. Redirections

La sortie standard de la réponse d'une commande est l'écran par defaut. Dans
certains cas, on a besoin d'utiliser la réponse d'une commande comme
paramètre d'une autre commande. Pour cela, il faut utiliser des redirections.

Syntaxe : commande1| commande2

Le pipe noté (|) permet de renvoyer le résultat d'une commande à une seconde
commande le cas le plus fréquent de son utilisation est pour rechercher un texte
dans le résultat d'une commande qui nous est fourni.
P a g e | 138

Par exemple : La commande ps ax liste tous les processus qui tournent. La liste
étant longue, on limite l'affichage en passant le résultat de cette commande à
grep qui ne va sortir que les lignes contenant le texte apache par exemple.

# ps ax | grep apache
1892 ? S 0:00 /usr/sbin/apache
1893 ? S 0:00 /usr/sbin/apache

Une autre redirection commande1 ‘commande2’ est une redirection qui permet
de passer la commande de droite comme paramètre de la commande de gauche.
C'est donc l'inverse de la redirection |. Par exemple pour regarder le contenu de
tous les fichiers du répertoire courant : On envoie la liste des fichiers (ls) à la
commande cat, comme suit :

cat `ls`

Redirection vers une autre sortie >

La sortie par défaut étant l'écran, il se peut que vous vouliez récupérer les sorties
pour les écrire soit dans un fichier, soit vers une autre sortie. D'une manière
générale on indique la sortie que l'on veut grâce au signe >.

Par exemple, nous voulons écrire la sortie de la commande ls –l dans un fichier :

ls –l > /home/selain/resultat.txt

Attention, le signe > remplace ce qu'il y avait dans le fichier par la sortie de la
commande. S'il s'agit d'un nouveau fichier il le crée. Pour écrire à la suite d'un
fichier existant, il faut doubler le signe : >>

Redirection des erreurs 2> :

D'autre part, si on veut éviter d'afficher les erreurs sur la sortie standard, on peut
les rediriger vers un périphérique inexistant (/dev/null), par exemple : ls -l 2>
/dev/null
P a g e | 139

2> signifie « les messages d'erreur sont redirigés vers ... »

Redirection des entrées < :

A l'inverse, l'entrée standard étant le clavier, vous pouvez récupérer le contenu


d'un fichier en entrée. Dans ce cas le signe est inversé : <

Exemple avec le fichier noms.txt qui contient ceci : Selain

read $nom < noms.txt

La ligne ci-dessus récupère la ligne de noms.txt dans la variable $nom

i. Fonctions

Comme pour les autres langages de programmation, les scripts Bash peuvent
faire appel à des fonctions.

La déclaration de fonction se fait comme suit :

function nom () {
commandes ;
}

L'appel d'une fonction se fait en écrivant son nom. On peut lui passer des
paramètres comme on le fait pour une commande. Attention on ne peut appeler
une fonction que si elle a été déclarée avant. Voici l’exemple de fonction et de
son appel :

#!/bin/sh
# Déclaration de la fonction :
function multiplier()
{
resultat=`expr $1 "*" $2`
echo $resultat
}
echo Veuillez entrer deux nombres
P a g e | 140

read nb1
read nb2
# Appel de la fonction :
multiplier $nb1 $nb2
P a g e | 141

CHAPITRE V. INTODUCTION AUX SYSTEMES TEMPS REELS


1. Définition

Un système temps réel est un système dans lequel l'exactitude des applications
ne dépend pas seulement de l'exactitude des résultats mais aussi du temps
auquel ce résultat est produit. Si les contraintes temporelles de l'application ne
sont pas respectées, on parle de défaillance du système. Il est donc essentiel de
garantir le respect des contraintes temporelles du système.

En informatique industrielle, on parle d'un système temps réel lorsque ce


système informatique contrôle ou pilote un procédé à une vitesse adaptée à
l'évolution du procédé contrôlé.
- Interaction avec l’environnement
o Capteurs, senseurs (acquisition de mesures)
o Actuateurs (régulation, pilotage)
- Système généralement dédicacé (bien souvent embarqué), où
l’informatique logicielle n’est qu’un composant.
Les systèmes temps réel sont très souvent embarqués dans un équipement
spécialisé, leur but étant de contrôler l’équipement et/ou son environnement.
Cette figure donne un exemple.

Il est à noter que le système temps réel et différent du système embarqué. Un


système embarqué est un système électronique, piloté par un logiciel, qui est
complètement intégré au système qu'il contrôle. Un système embarqué a des
contraintes fortes de coût, taille, poids, consommation énergétique, etc. Ces
genre des systèmes sont bien souvent temps-réels (mais pas nécessairement).
P a g e | 142

Notons que plus de 95% des processeurs produits dans le monde sont dédiés aux
systèmes embarqués. Voici le lien entre un système temps-réel et un système
embarqué :

Quelques exemples de systèmes T.R.

- Commande et contrôle de chaînes de production


- Guidage de systèmes mobiles (robotique…)
- Systèmes embarqués TR (avionique, ferroviaire, auto, etc)
- Surveillance de réactions ou phénomènes physiques (nucléaire,
chimie,…)
- Contrôle de malades et assistance d'opérations médicales
- Systèmes de communication et multimédia
- Systèmes de conduite d'expériences scientifiques
- Systèmes de traitement du signal

Exemple des systèmes temps réel


P a g e | 143

2. Caractéristiques Temps-Réel

Un système temps-réel reçoit et émet des signaux de et vers le procédé à


contrôler. Ces signaux peuvent être périodiques ou non.

- Le système doit normalement réagir avant un délai ou une date fixée.


- Aucun évènement ne doit en principe être raté par le système.
- Ne pas réagir à temps est considéré comme une défaillance.
- Un système temps-réel est souvent critique et doit donc être fiable à 100%
(duplication matérielle, vérifications formelles, rigueur dans la conception
et le développement, etc).

Si une information arrivant en retard peut provoquer une erreur fatale au


système, on parlera de temps réel strict (hard real time). Sinon, on parlera de
temps réel souple, ou lâche (soft real time).
Il est a noter que dans un système donné, des tâches temps réel strictes et
souples peuvent cohabiter, éventuellement avec des tâches sans contraintes
temporelles.

3. Caractéristiques nécessaires à un système T.R.

Les caractéristiques nécessaires à un STR sont les suivantes :

• Fiabilité (systèmes critiques)

Un système T.R. est souvent un système critique (devant être valide à presque
100%). approche-qualité par l’utilisation systématique de méthodologies
rigoureuses pour la conception, réalisation, validation, évolution et maintenance
des systèmes logiciels
- Méthodes de spécification (formelles ou semi-formelles) : Utilisant des
langages comme B, Z
- Méthodes de conception et de développement : UML–Marte, SART–
DARTS
P a g e | 144

• Prédictibilité (pour garantir le respect des contraintes temporelles)

C’est la qualité d’un système qui, à partir de la connaissance de son état présent,
permet d’assurer la connaissance de son comportement dans le futur et garantit
la maîtrise de son fonctionnement en cas de défaillance potentielle La
prédictibilité doit permettre de déterminer à l'avance si un système va respecter
ses contraintes temporelles. Elle nécessite La connaissance des paramètres liés
aux calculs des activités et des défaillances potentielles
- Assurer qu’il n’y aura pas de défaillance
- Pouvoir estimer le temps de réponse au pire (WorstCase ExcutionTime,
WCET)

• Préemptibilité des tâches (nécessaire pour la prédictibilité)

La préemptibilité est la réquisition possible des ressources par une tâche. Pour
ce faire une tâche doit pouvoir être interrompue par une tâche de plus haute
priorité. Il est donc a noter que le retrait des ressources (processeur, mémoire)
d’une tâche pour les affecter à une autre tâche est possible (reprise ultérieure
quand les circonstances le permettront)

• Gestion évoluée des communications inter-tâches

Les tâches concourent à contrôler/commander un environnement. Elles


interagissent entre elles (émission/réception de signaux de synchronisation +
informations). Il est alors nécessaire de :

- Prise en compte des délais de communication (latence et transfert)


- Assurer l’intégrité et la cohérence des données
- synchroniser
• Prise en compte du non-déterminisme d’ordre d’exécution des tâches.

On considère souvent le «worst-case » (cas au pire) pour déterminer un temps


maximal de réaction. Le problème du non-déterminisme: imprévisibilité de
l’ordre d’exécution de tâches dû à des séquences d’actions interrompues par des
évènements externes asynchrones, arrivant à des instants et dans un ordre
imprévisibles. Cette imprévisibilité rend complexe la maîtrise du comportement
P a g e | 145

du système (et donc le respect des contraintes temporelles). Il faut donc


ordonnancer strictement pour réduire le non-déterminisme

4. Les systèmes TR par rapport à d’autres systèmes informatique

Nous avons :
- Système Transformationnel : Activité de calcul, qui lit ses données et ses
entrées lors de son démarrage, les traite, puis fournit ses sorties et meurt.
- Système Interactif : Système en interaction forte avec son environnement.
La réaction du système est déterminée par les événements reçus et par
l'état courant. Le rythme de l'interaction est déterminé par le système et
non par l'environnement.
- Système Réactif ou Temps Réel : Système en interaction permanente avec
son environnement. La réaction du système est déterminée par les
évènements reçus et par l'état courant. Le rythme de l'interaction est
déterminé par l'environnement et non par le système.

5. Principe général d’un STR

Quelles que soient la nature et la complexité du système, on décompose un


système temps réel en un système contrôlé et un système de contrôle.
- Le système contrôlé : Dans ce système nous avons un environnement
équipé d'une instrumentation qui réalise l'interface avec le système de
contrôle.
- Le système de contrôle : C’est donc le système informatique (hardware et
software) dont la mission est d'agir sur l’environnement en fonction de
son état, de manière à le contrôler.
La figure ci-dessous illustre ces composants s’un système temps-réel
P a g e | 146

Il est à noter que Le système de contrôle peut être varié, suivant les
circonstances et nécessités. Il peut par exemple être un automate
programmable, un système électronique ou un système informatique (hardware
et logiciel).

6. Organisation générale d’un système d’exploitation TR

Noyau d’un système d’exploitation (kernel en anglais est la partie fondamentale


du système d’exploitation qui gère les ressources de l’ordinateur et permet aux
différents composants matériels et logiciels de communiquer entre eux.

Il fournit (le noyau) des mécanismes d’abstraction du matériel, notamment de la


mémoire, du (ou des) processeur(s), et des échanges d’informations entre
logiciels et périphériques matériel.

7. Conception de RTOS (Real Time Operating System)


P a g e | 147

Nous pouvons considérer 2 approches:

La première approches est de faire une extension de systèmes d’exploitation


généraux par des fonctionnalités temps réel (notamment ordonnanceurs
adaptés, timers, …). Par exemple Linux-rt, RTX Real-Time Extension for Windows.
L’avantage de cette approche est la compatibilité avec l’existant et le fait que le
terrain connu d’avance. Exemple de Linux-rt.

La deuxième approche est de mettre en place de système d’exploitation


spécialisé. Ce système possède de noyaux rapides, petits et adaptés. Par
exemple QNX, VxWORKS. Cette approche a comme avantages la performance
et l’adaptation aux besoins.
P a g e | 148

TABLE DES MATIERES

PRELUDE............................................................................................................... 2
PRESENTATION DU COURS .................................................................................. 3
1. OBJECTIFS.................................................................................................... 3
2. CONTENU DU COURS .................................................................................. 3
3. CONTEXTE DE REALISATION DES OBJECTIFS OU MODE D’INTERVENTION . 4
4. MODE D’EVALUATION ................................................................................ 4
5. PREREQUIS .................................................................................................. 4
6. QUELQUES REFERENCES BIBLIOPGRAPHIQUES .......................................... 4
CHAPITRE I. RAPPELS SUR LE SYSTEME D’EXPLOITATION .................................. 6
1. Notions de base et mots clés ...................................................................... 6
a. Informatique ............................................................................................ 6
b. Modèle de VON NEUMAN ...................................................................... 9
c. Système à microprocesseurs ................................................................. 10
2. Eléments de base d'un système d'exploitation .................................... 11
3. Les différentes classes de systèmes d'exploitation................................... 11
4. Différents types de noyaux des systèmes d’exploitation.......................... 14
a. Les noyaux monolithiques ..................................................................... 15
• Noyaux monolithiques non modulaires ................................................. 15
• Noyaux monolithiques modulaires ........................................................ 16
b. Systèmes à micro-noyaux ...................................................................... 17
c. Noyaux hybrides .................................................................................... 20
d. Exo-noyaux............................................................................................. 20
e. Méta-noyaux .......................................................................................... 21
f. Noyaux temps réel ................................................................................. 21
CHAPITRE II. FONCTIONS D’UN SYSTEME D’EXPLOITATION ............................. 23
1. INTRODUCTION ......................................................................................... 23
2. DIFFERENTES FONCTIONNALITE ............................................................... 24
3.1. La gestion des processus .................................................................... 24
2.2. Gestion de la mémoire ....................................................................... 42
2.3. Gestion des entrées – sorties ............................................................. 57
P a g e | 149

CHAPITRE III. ETUDES THEORIQUE ET PRATIQUE DES SYSTEMES MS-DOS,


WINDOWS ET LINUX/UNIX ................................................................................ 70
1. MS-DOS ..................................................................................................... 70
a. Introduction ........................................................................................... 70
b. Un peu d’histoire ................................................................................... 70
c. Les périphériques................................................................................... 71
d. Démarrage de l'ordinateur .................................................................... 72
e. Les fichiers dans DOS ............................................................................. 72
f. Les commandes DOS.............................................................................. 74
1. Commandes de directory (répertoires) .................................................... 75
• DIR (commande interne). ...................................................................... 75
• CHDIR ou CD en abrégé: commande interne ......................................... 77
• MKDIR (MD en abrégé), commande interne. ........................................ 78
• RMDIR (RD en abrégé), commande interne. ......................................... 78
• Tree: commande externe ...................................................................... 79
• Exécution ............................................................................................... 79
• Copy: commande interne ...................................................................... 80
• RENAME (REN en abrégé): commande interne ..................................... 80
• DEL ou ERASE: commandes internes. .................................................... 80
• UNDELETE: commande externe (à partir DOS 5.0) ................................ 80
• COMP: commande externe.................................................................... 81
• XCOPY: commande externe ................................................................... 81
2. Commandes pour fichiers textes .............................................................. 81
• TYPE: commande interne....................................................................... 81
• PRINT: commande externe .................................................................... 81
3. Commandes systèmes .............................................................................. 82
• TIME, commande interne ...................................................................... 82
• DATE, commande interne ...................................................................... 82
4. Utilitaires disque dur et disquette ............................................................ 83
• CHKDSK, commande externe ................................................................. 83
• FORMAT, commande externe................................................................ 83
P a g e | 150

• Unformat, commande externe .............................................................. 84


• Label, commande externe ..................................................................... 85
• VOL, commande externe ....................................................................... 85
• FDISK, commande externe ..................................................................... 85
• Diskcopy, commande externe ............................................................... 85
• Backup, commande externe .................................................................. 85
• Restore: commande externe ................................................................. 86
• La commande Attrib .............................................................................. 87
5. Autres commandes ................................................................................... 87
• VER, commande interne ........................................................................ 87
• SYS, commande externe ........................................................................ 88
g. Le DOS : Config.sys et autoexec.bat....................................................... 88
h. Introduction à la gestion de la mémoire sous DOS ................................ 92
2. MICROSOFT WINDOWS ............................................................................ 94
a. Introduction ........................................................................................... 94
b. Les différentes versions de Microsoft Windows .................................... 95
c. Présentation de Windows 7 et 8............................................................ 97
3. UNIX / LINUX ............................................................................................. 98
a. Introduction ........................................................................................... 98
b. Architecture UNIX .................................................................................. 99
c. Linux ....................................................................................................... 99
d. Les fichiers sous Linux / UNIX .............................................................. 101
e. Interpréteur de commandes et interpréteur de fichiers ..................... 103
f. Les commandes de base Linux/UNIX ................................................... 104
g. La gestion de processus sous UNIX ...................................................... 110
h. Editeur de commande ......................................................................... 113
CHAPITRE IV. PROGRAMMATION SHELL (SCRIPTING) .................................... 117
1. Introduction ............................................................................................ 117
2. Programmation Batch ............................................................................. 117
a. Introduction ......................................................................................... 117
b. Mon premier programme batch .......................................................... 118
P a g e | 151

c. Les variables ......................................................................................... 118


d. Les conditions ...................................................................................... 123
e. Etiquettes et boucles ........................................................................... 124
3. Programmation shell ............................................................................... 126
a. Premiers scripts Shell ........................................................................... 127
b. Les variables ......................................................................................... 128
c. Opérations et opérateurs arithmétiques ............................................. 129
d. Saisir une information et la stocker dans une variable ........................ 130
e. Structures conditionnelles ................................................................... 130
f. Les boules ............................................................................................ 134
g. Passage de paramètres ........................................................................ 136
h. Redirections ......................................................................................... 137
i. Fonctions ............................................................................................. 139
CHAPITRE V. INTODUCTION AUX SYSTEMES TEMPS REELS.............................. 141
1. Définition ................................................................................................ 141
2. Caractéristiques Temps-Réel .................................................................. 143
3. Caractéristiques nécessaires à un système T.R. ...................................... 143
4. Les systèmes TR par rapport à d’autres systèmes informatique ............ 145
5. Principe général d’un STR ....................................................................... 145
6. Organisation générale d’un système d’exploitation TR .......................... 146
7. Conception de RTOS (Real Time Operating System) ............................... 146

Vous aimerez peut-être aussi