Cours Se GL2 Prepa2
Cours Se GL2 Prepa2
Cours Se GL2 Prepa2
PLAN
Chapitre I : Généralités sur les Systèmes d’Exploitation
Il fournit aux programmes applicatifs des points d'entrée génériques pour les périphériques.
En Effet,
Le système d’exploitation (Operating System ou OS ou SE): c’est le plus important des programmes systèmes :
Introduction
• Gérer les ressources de l'installation matérielle en assurant leurs partages entre un ensemble
plus ou moins grand d'utilisateurs ;
• Assurer un ensemble de services en présentant aux utilisateurs une interface mieux adaptée à
leurs besoins que celle de la machine physique.
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 :
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 système d'exploitation :
Pilote les organes de l’ordinateur (écran, clavier, disque...)
Lance en exécution les divers programmes…
Il gère l'ensemble des échanges entre le microprocesseur, la mémoire centrale et les unités
périphériques
Le chargement
C'est la phase de démarrage de l'ordinateur appelé également "Boot Sequence". A la mise sous
tension, un programme du BIOS recherche à un endroit défini (disque, lecteur...), un programme
"Boot loader" qu'il charge en mémoire et qui va s'exécuter.
Ce programme est déjà une partie du SE qui va charger différentes couches du SE qui vont ensuite
s'exécuter. L'ensemble du système d'exploitation est ainsi chargé et exécuté.
La communication Homme-Machine
Dès que le système est chargé, l'utilisateur a normalement "la main" pour envoyer des ordres au SE
qui les exécutera. Ces ordres peuvent être envoyés soit en mode console (ligne de commande), soit
en mode graphique. Certains SE ne sont qu'en mode console (MS-DOS).
Les ordres peuvent également être lancés à travers l'exécution d'application ou de fichiers de
commande (fichiers "batch"). Dans certains cas, l'utilisateur devra au préalable s'identifier.
On n'utilise pas une machine pour son seul système d'exploitation mais pour les logiciels applicatifs
que l'on installe en complément du SE. Ces applications fournissent des services du SE pour lire ou
écrire un fichier sur le disque, pour connaître la date du jour...
Les services sont appelés les API (Application Programming Interface). Sous Windows, on parle de
l'API Win32. L'API est un ensemble de fonctions qu'il est possible d'appeler dans un programme
afin d'obtenir des services de la part du SE.
Processeurs
Mémoire centrale
Périphériques...
Elle consiste à distribuer le processeur entre les différents travaux à exécuter. Cette fonction est
simple dans le cas d'un système mono-tâche. En ce qui concerne un système multitâche, la
concurrence pour l'accès au processeur entre les différents travaux est gérée par l'attribution d'un
niveau de priorité et d'une portion de temps de l'unité centrale (TIMESHARE).
On parle dans le cas de systèmes multitâches de gestion des processus, les processus étant des
programmes ou des parties de programmes lancés par le SE en arrière-plan.
Quelques définitions :
THREAD : parties de programmes, c'est une unité d'exécution dans le processus
SYSTEME PREEMPTIF : un ordonnanceur gère l'attribution du temps CPU aux différents
processus (il choisit d'arrêter l'exécution d'un processus au profit d'une autre Ex : W2000, XP,
Vista.
SYSTEME COOPERATIF : "les systèmes s'arrangent entre eux". Un processus libère lui-même
le CPU lorsqu'il a fini de s'exécuter. Ex : W95,98, Dos...
La pagination : les programmes sont découpés en pages de longueur fixe correspondant aux
segments de mémoire alloués.
La segmentation : permet un découpage plus fin et adapté aux besoins. Les programmes ne sont
pas découpés en pages de taille fixe mais en segments dont la taille est adaptée au programme.
Les segments peuvent être implantés en mémoire centrale ou en mémoire virtuelle.
La mémoire peut également être gérée de façon mixte. Un des problèmes important est la
réallocation de la mémoire lorsque celle-ci est libérée ou la récupération de la mémoire non libérée
par des applications. Certains systèmes disposent d'un dispositif de ramasse miette (Garbage
Collector) qui récupère la mémoire non libérée.
FAT : petite zone qu'il y'a en début de disque dur qui permet au disque de savoir à quel fichier est
rattaché le cluster (implantation sur le disque).
Le système mono-tâche
Il ne gère qu'une seule tâche à la fois (un seul programme). Quand le programme est lancé, il utilise
seul les ressources de la machine et ne rend la main au système d'exploitation qu'en fin d'exécution,
ou en cas d'erreur.
Le système multitâche
Il gère simultanément plusieurs programmes sur une même machine. Il permet de partager le temps
du processeur pour plusieurs programmes, ainsi ceux-ci sembleront s'exécuter simultanément.
Le système multithreading ;
Le système multi-utilisateur
Ex : Windows 2000, 2003, XP, Unix (HP-UX, Solaris, AIX, Linux, FreeBSD...)
Gros systèmes
Les serveurs
Les postes de travail sont composés aujourd'hui en majorité de PC. Les systèmes utilisés sont donc
ceux fonctionnant sur cette plate-forme :
MS-DOS
Windows 95, 98, NT Work-station, Millennium, 2000 Pro, XP Pro, Seven Pro
Linux
MacOs
Système X
Sun-Os
FreeBSD
Le micro-ordinateur travaillant à l'état initiale en langage binaire, il est difficile pour les utilisateurs
de travaillé avec. Aussi, il a été créé des programmes pour que l'utilisateur moyen puisse
communiquer avec le micro-ordinateur. Il existe plusieurs système exploitation plus ou moins
complexe.
Le plus connu est le MS DOS mais aussi UNIX, OS2 WARP... et maintenant WINDOWS 95 et 98.
Problème : MSDOS ne permet pas le travail du microprocesseur en multitâche, c'est à dire lancé
plusieurs programmes simultanément.
WINDOWS :
Le système WINDOWS type 3.0, 3.1, 3.11 n'est pas un système d'exploitation. Il a besoin du
système MS DOS pour fonctionner. C'est un programme qui est un intermédiaire de type souris.
WINDOWS 9x :
En septembre 1995, sort le système d'exploitation Windows 95. A la différence de Windows 3.x, il
n'a pas besoin de MSDOS pour travailler, malgré qu'il garde une couche MSDOS en arrière-plan
(peu visible pour l’utilisateur). Il peut travailler en multitâche. L'avantage de Windows 95 est
multiple. Il a révolutionné le système d'exploitation par son interface visuelle et ses particularités
techniques. C'est un système d'exploitation utilisant la souris.
En septembre 1998, Microsoft sort une version améliorer de Windows 95 (Nommée WINDOWS
98) qui corrige certains défauts de la première mouture mais garde cependant la même interface
visuelle.
WINDOWS NT :
Système d'exploitation de type serveur client. La gamme NT en version 4 actuellement est prévue
pour faire fonctionner un réseau en se servant d'un serveur et de poste client. Il est prévu pour
permettre une sécurité accrue pour les données.
NOVELL :
Pas vraiment un système d'exploitation mais un logiciel uniquement prévu pour un serveur dans un
réseau. Les postes clients ont cependant besoin d'une couche pour accéder à celui−ci.
UNIX :
C'est également un système d'exploitation, multiposte, et multitâche. UNIX est développé par la
société USL (Unix Système Laboratories).
I- Notion de processus
Un processus est une entité dynamique qui matérialise un programme en cours d'exécution avec ses
propres ressources physiques (mémoire, processeur, entrée/sortie, …) et logiques (données,
variables, …). Contrairement à un programme (texte exécutable) qui a une existence statique. Le
système d’exploitation manipule deux types de processus :
- Processus système : processus lancé par le système (init processus père des tous les processus du
système)
- Processus utilisateur : processus lancée par l’utilisateur (commande utilisateur) Dès sa création,
un processus reçoit les paramètres suivants :
PID : identificateur du processus (numéro unique)
PPID : identificateur du processus père
UID : identificateur de l’utilisateur qui a lancé le processus
GID : identificateur du groupe de l’utilisateur qui a lancé le processus
Processus père P1
11
Processus fils 1 P2
P3
P4 P5 P6
Processus fils n P7
- Un processus peut (père) créer d’autres processus (fils) qui hérite les descripteurs de son père. Ce
dernier à son tour crée d’autres processus. Un processus a un seul père mais peut avoir plusieurs fils
- Les processus peuvent se terminer ou ils peuvent être éliminés par d’autres processus (la
primitive kill). A la destruction d’un processus, on libère toutes les ressources qu’il avait.
- Dans certains cas, la destruction d’un processus entraîne l’élimination de ces descendants ; cette
opération n’affecte pas les processus qui peuvent continuer indépendamment de leur père
(processus orphelins)
1. Le Dispatcheur
Il s’occupe de l’allocation du processeur à un processus sélectionné par l’Ordonnanceur du
processeur. Une fois alloué, le processeur doit réaliser les tâches suivantes :
- Commutation de contexte : sauvegarder le contexte du processus qui doit relâcher le processeur et
charger le contexte de celui qui aura le prochain cycle processeur
- Commutation du mode d’exécution : basculer du mode Maître (mode d’exécution du dispatcheur)
en mode utilisateur (mode d’exécution du processeur utilisateur)
- Branchement : se brancher au bon emplacement dans le processus utilisateur pour le faire démarrer
2. L’Ordonnanceur
Certains systèmes d’exploitation utilisent une technique d’ordonnancement à deux niveaux qui
intègre deux types d’Ordonnanceurs :
ELU
2 1
3
4 PRET
BLOQUE
(3) : Blocage du processus élu dans l’attente d’un événement (E/S ou autre)
(4) : Réveil du processus bloqué après disponibilité de l’événement bloquant (Fin E/S, etc…)
Notons que nous avons omis les états Création et Terminaison de processus puisqu’ils
Caractéristiques de l’Ordonnanceur
Ordonnanceur sans réquisition
Ordonnanceur non adapté à un système temps partagé car dans un système pareil, chaque utilisateur
obtienne le processeur à des intervalles réguliers.
P1 P2 P3 P4 P1 P2 P3 P4
Diagramme de Gantt
2. Ordonnancement SJF (Shortest Job First) (Plus Cours temps d'Exécution en Premier)
SJF choisit de façon prioritaire les processus ayant le plus court temps d’exécution sans réellement
tenir compte de leur date d’arrivée. Dans cet algorithme les différents processus sont rangés dans la
file d'attente des processus prêts selon un ordre croissant de leur temps d'exécution (cycle de
calcul). Les règles régissant cet ordonnancement sont :
1. Quand un processus est prêt à s’exécuter, il est inséré dans la file d’attente des processus prêts à
sa position approprie.
2. Quand le processeur devient libre, il est assigné au processus se trouvant en tête de la file
d’attente des processus prêts (ce processus possède le plus petit cycle processeur.). Si deux
processus ont la même longueur de cycle, on applique dans ce cas l’algorithme FCFS.
3. Si le système ne met pas en oeuvre la réquisition, le processus élu relâche le processeur s’il se
termine ou s’il demande une entrée sortie. Dans le cas contraire, le processus élu perd le processeur
également. Quand un processus ayant un cycle d’exécution inférieur au temps processeur restant du
processus élu, vient d’entrer dans la file d’attente des prêts. Le processus élu dans ce cas sera mis
dans la file d’attente des éligibles, et le processeur est alloué au processus qui vient d’entrer.
Caractéristiques de l’Ordonnanceur
Cet Ordonnanceur peut être avec ou sans réquisition
Implémentation difficile, car il n’existe aucune manière pour connaître le cycle suivant du
processeur.
- 1. Un processus qui rentre dans l’état éligible est mis en queue de la file d'attente des prêts.
- 2. Si un processus élu se termine ou se bloque avant de consommer son quantum de temps, le
processeur est immédiatement alloué au prochain processus se trouvant en tête de la file
d'attente des prêts.
- 3. Si le processus élu continue de s'exécuter au bout de son quantum, dans ce cas le processus
sera interrompu et mis en queue de la file d'attente des prêts et le processeur est réquisitionné
pour être réalloué au prochain processus en tête de cette même file d’attente.
Caractéristiques de l’Ordonnanceur
- Avec réquisition
- Adapté aux systèmes temps partagé.
- La stratégie du tourniquet garantit que tous processus sont servis au bout d’un temps fini. Son
avantage est d’éviter la famine. On dit qu'un processus est en famine lorsqu'il est prêt à être
exécuté et se voit refuser l'accès à une ressource (ici le processeur) pendant un temps indéterminé
- L’efficacité de cet ordonnanceur dépend principalement de la valeur du quantum Q:
Le choix d'un Q assez petit augmente le nombre de commutation.
Le choix d'un Q assez grand augmente le temps de réponse du système
4. Ordonnancement SRTF (Shortest Remaining Time first) (plus court temps d’exécution
restant PCTER)
SRTF choisit le processus dont le temps d’exécution restant est le plus court. C’est une variante de
l’algorithme SJF Cet algorithme est non implantable parce qu’il suppose, entre autres, connu le
temps d’exécution réel de chaque processus pour pouvoir calculer le temps restant
- 1. Quand un pro*cessus est admis par le système, il est inséré dans la file d’attente des processus
prêts à sa position approprie (dépend de la valeur de priorité).
- 2. Quand le processeur devient libre, il est alloué au processus se trouvant en tête de file d’attente
des processus prêts (le plus prioritaire).
- 3. Un processus élu relâche le processeur s’il se termine ou se bloque (E/S ou autre).
Caractéristiques de l’Ordonnanceur
Les principales caractéristiques sont :
- Peut-être avec ou sans réquisition
- Un processus de priorité basse risque de ne pas être servi (problème de famine) d’où la nécessité
d’ajuster périodiquement les priorités des processus prêts. L’ajustement consiste à incrémenter
graduellement la priorité des processus de la file d’attente des
Éligibles (par exemple à chaque 15 mn on incrémente d’une unité la priorité des processus prêts)
• son propriétaire (l'utilisateur qui a lancé le processus) défini par son id,
• le pid du processus père : le ppid. Comme nous allons le voir, tout processus dans Unix/Linux naît
par duplication d'un processus père.
Chaque processus est normalement rattaché à un terminal de contrôle. C'est le terminal à partir
duquel ce processus a été lancé. Cela dit, Unix offre la possibilité de lancer un processus sans le
rattacher à un terminal. On dit alors que ce processus est lancé en mode tâche de fond. Si le
propriétaire de ce processus se déconnecte de la machine, les processus qui ont été lancés en mode
tâche de fond continuent à s'exécuter jusqu'à ce qu'ils se terminent.
KILL
Exemples :
kill 1780 : tue le processus dont le pid est 1780.
kill -INT 189 : interrompt l'exécution du processus de pid 189.
kill -CONT 189 : relance le processus de pid 189 interrompu avec le signal INT.
kill -HUP 95 : réinitialise le processus de pid 95.
kill % 1650 : termine en arrière plan le processus de pid 1650.
kill -SIG pid : Envoie au processus, dont le numéro identificateur est pid, le signal SIG.
Tuer un processus
Tuer un processus pour l'arrêter revient en fait à lui envoyer le signal KILL. Il suffit pour cela de
reconnaître le pid du processus à l'aide de la commande ps, puis defaire : kill pid (l'option -KILL est
implicite)
Par exemple, si le processus qu'on veut arrêter est celui qui a 799 comme pid, la commande :
kill 799 permettra de le tuer.
Remarque : La prise en compte d'un signal n'est pas forcément immédiate. Elle dépend de la
charge CPU de la machine. Ne vous étonnez donc pas qu'après avoir tué un processus, vous le
voyez encore traîner quelque temps dans la liste des processus.
Lancer un processus
Nohup
Permet d'exécuter une commande en ignorant les interruptions tels que les signaux d'arrêt imprévus
(CTRL-D ou coupure de ligne ou encore la déconnexion de l'utilisateur).
Remarque : lorsque l'on utilise le cshell (csh), une commande exécutée en tâche de fond (en
rajoutant le symbole & à la fin de la commande) appelle automatiquement l'option nohup
Nice
La syntaxe est : nice [ -n ] commande [ arguments ]
À chaque processus est associée une valeur du paramètre système nice, entre -20 et 19. Par défaut,
cette valeur est égale à 0. Plus cette valeur est faible, plus le processus est prioritaire pour accéder à
Exécute la commande à une heure donnée, éventuellement en précisant la date. Si la date n'est pas
précisée, elle est par défaut égale à la date du jour.
L'option -m est intéressante; elle provoque un envoi d'un mail électronique à la fin de la commande.
Exemple: at -m 0815am Jan 25 monscript
Lance le script "monscript" à 8h15 le 25 janvier et notifie par mail sa terminaison.
•Suspendre un processus : Sleep
sleep x
Exécute une commande après une attente de x secondes.
Exemple : (sleep 15 ; commande) & Exécute commande en arrière-plan après une attente de 15
secondes.
Int fork() :
- Crée un nouveau processus (processus fils) par duplication du processus courant (processus père).
- Copie les segments de données et de stack du processus père; le segment texte est partagé.
- les ``pid'' du père et du fils diffèrent
- le fils hérite en partie de l'environnement du père.
- retourne un entier:
en cas de succès: 0 dans le fils et pid du fils dans le père.
en cas d'échec : -1 dans le père, le fils n'est pas créé.
Suite à un fork, les processus père et fils poursuivent l'exécution du même programme. La valeur
retournée par fork permet de distinguer entre le père et le fils.
main()
{
extern int errno;
extern char *sys_errlist[];
pid_t pid;
pid = getpid();
fprintf(stdout,"Avant le fork, pid = %d\n",pid);
sleep(20);
pid = fork();
/* En cas de reussite du fork, le pere et le fils poursuivent leur
execution a partir d'ici. La valeur de pid permet de distinguer
le pere du fils.
*/
switch(pid) {
- Le nombre maximum de processus en exécution par l'utilisateur est atteint (variable suivant les
systèmes: 40 sous AIX, 50 sous ULTRIX, 997 sous Solaris
- Il ne reste pas suffisamment de mémoire système disponible pour dupliquer le processus.
- Il n'y a pas assez de swap space.
Un processus est l'entité d'exécution de tout programme sur une machine UNIX/LINUX. Il est
caractérisé par les attributs suivants :
son propriétaire (l'utilisateur qui a lancé le processus) défini par son uid,
le pid du processus père : le ppid. Comme nous allons le voir, tout processus dans Unix/Linux naît
par duplication d'un processus père.
Chaque processus est normalement rattaché à un terminal de contrôle. C'est le terminal à partir
duquel ce processus a été lancé. Cela dit, Unix offre la possibilité de lancer un processus sans le
rattacher à un terminal. On dit alors que ce processus est lancé en mode tâche de fond. Si le
propriétaire de ce processus se déconnecte de la machine, les processus qui ont été lancés en mode
tâche de fond continuent à s'exécuter jusqu'à ce qu'ils se terminent.
Un processus est créé par duplication d'un processus père, grâce à l'appel système fork(). À sa
création, le processus fils est en tout point identique au processus père, à la différence près qu'ils
n'ont pas le même pid ni le même ppid.
Le mode synchrone : le père se duplique pour créer le fils puis il attend la fin de l'exécution de
son fils avant de revenir au premier plan.
Le mode asynchrone : le père se duplique pour créer le fils. Ce dernier va s'exécuter en mode
tâche de fond et le père repasse immédiatement au premier plan.
Le mode différé : les commandes "at" et "batch" permettent de lancer un processus en mode
différé. Avec la commande "at", vous pouvez préciser la date et l'heure exacte de l'exécution du
processus. Quant à la commande "batch", elle met le processus dans une file d'attente FIFO (First
IN, First OUT).
Elle affiche tous les processus qui tournent sur la machine, y compris ceux des autres utilisateurs.
Exemples de signaux : HUP, INT, QUIT, ILL, TRAP, EMT, FPE, KILL, BUS, etc.
Exemples :
kill 1780 : tue le processus dont le pid est 1780.
kill -INT 189 : interrompt l'exécution du processus de pid 189.
kill -CONT 189 : relance le processus de pid 189 interrompu avec le signal INT.
kill -HUP 95 : réinitialise le processus de pid 95.
kill % 1650 : termine en arrière-plan le processus de pid 1650.
Par exemple, si le processus qu'on veut arrêter est celui qui a 799 comme pid, la commande : kill
799 permettra de le tuer.
Remarque : La prise en compte d'un signal n'est pas forcément immédiate. Elle dépend de la
charge CPU de la machine. Ne vous étonnez donc pas qu'après avoir tué un processus, vous le
voyez encore traîner quelque temps dans la liste des processus.
Remarque : lorsque l'on utilise le cshell (csh), une commande exécutée en tâche de fond (en
rajoutant le symbole & à la fin de la commande) appelle automatiquement l'option nohup.
L'option -m est intéressante; elle provoque un envoi d'un mail électronique à la fin de la commande.
sleep x
Exécute une commande après une attente de x secondes.
I-COMMUNICATION INTERPROCESSUS
L Es processus coopèrent souvent pour traiter un même problème. Ces processus s’exécutent en
parallèle sur un même ordinateur (monoprocesseur ou multiprocesseurs) ou bien sur des ordinateurs
différents. Ils doivent alors s’échanger des informations (communication interprocessus). Il existe
plusieurs moyens de communication interprocessus. Nous pouvons citer, entre autres, les variables
communes, les fichiers communs, les signaux, les messages et les tubes de communication
2. Les signaux
Les interruptions logicielles ou signaux sont utilisées par le système d’exploitation pour aviser les
processus utilisateurs de l’occurrence d’un événement important. De nombreuses erreurs détectées
par le matériel, comme l’exécution d’une instruction non autorisée (une division par 0, par exemple)
ou l’emploi d’une adresse non valide, sont converties en signaux qui sont envoyés au processus
fautif. Ce mécanisme permet à un processus de réagir à cet événement sans être obligé d’en tester
en permanence l’arrivée. Les processus peuvent indiquer au système ce qui doit se passer à la
réception d’un signal. On peut ainsi ignorer le signal, ou bien le prendre en compte, ou encore
laisser le système d’exploitation appliquer le comportement par défaut, qui en général consiste à
tuer le processus. Certains signaux ne peuvent être ni ignorés, ni capturés. Si un processus choisit de
prendre en compte les signaux qu’il reçoit, il doit alors spécifier la procédure de gestion de signal.
Quand un signal arrive, la procédure associée est exécutée. A la fin de l’exécution de la procédure,
le processus s’exécute à partir de l’instruction qui suit celle durant laquelle l’interruption a eu lieu.
En résumé, les signaux sont utilisés pour établir une communication minimale entre processus, une
communication avec le monde extérieur et faire la gestion des erreurs. Ainsi, un processus peut : –
Ignorer le signal. – Appeler une routine de traitement fournie par le noyau. Cette procédure
provoque normalement la mort du processus. Dans certains cas, elle provoque la création
d’un fichier coré, qui contient le contexte du processus avant de recevoir le signal. Ces fichiers
peuvent être examinés à l’aide d’un débogueur. – Appeler une procédure spécifique créée par
3. Les messages
La synchronisation entre processus peut être réalisée au moyen d’échange de messages, dans Unix
System V. Un processus peut attendre qu’un autre lui envoie un message.
L’avantage principal est qu’il n’y a pas de partage d’espace de données, et donc il n’y aura pas de
conflit d’accès. Comme problèmes, on peut signaler que les messages envoyés peuvent se perdre.
Lorsqu’un émetteur envoie un message, il attend pendant un certain délai la confirmation de
réception du message par le récepteur (un acquittement). Si, au bout de ce délai, il ne reçoit pas
l’acquittement, il renvoie le message. Il peut y avoir des messages en double en cas de perte du
message d’acquittement. Pour éviter cela, on associe à chaque message une identification unique.
L’authentification des messages se fait alors par l’utilisation des clés
Processus en parallèle reliés par un tube de communication. Communication pour l’envoi de
messages : les tubes de communication sans nom, nommés et les sockets.
PROCESSUS A
REPERTOIRE DE DEMON
SPOOLE
PROCESSUS B
Quand un processus veut imprimer un fichier, il doit placer le nom de ce Fichier dans un répertoire
spécial, appelé répertoire de spool. Un autre processus, Le démon d’impression, vérifie
périodiquement s’il y a des fichiers À imprimer. Si c’est le cas, il les imprime et retire leur nom du
répertoire.
Supposons que :
– Le répertoire d’impression ait un très grand nombre d’emplacements, Numérotés 0, 1, 2, ..., N.
Chaque emplacement peut contenir le nom d’un Fichier à imprimer.
– Tous les processus partagent la variable in qui pointe sur le prochain emplacement libre du
répertoire.
– Deux processus A et B veulent placer chacun un fichier dans la file d’impression et que la valeur
de in est 7.
– Le processus A met son fichier à la position in qui vaut 7. Une interruption d’horloge arrive
immédiatement après et le processus A est suspendu pour laisser place au processus B.
– Ce dernier place également son fichier à la position in qui vaut toujours
7 et met à jour in qui prend la valeur 8. Il efface ainsi le nom du fichier placé par le processus A.
– Lorsque le processus A sera relancé, il met à jour la valeur de in qui prend la valeur 9.
Sous ces conditions, deux problèmes peuvent se présenter :
– Le fichier du processus A ne sera jamais imprimé ;
– in ne pointe plus sur le prochain emplacement libre.
Comment éviter ces problèmes ? Le problème provient du fait que le processus
B a utilisé une variable partagée avant que A ait fini de s’en servir. Si l’on arrive à bien
synchroniser les processus, le problème peut être résolu.
Lorsqu’un processus accède à la variable in, les autres processus ne doivent ni la lire, ni la modifier
jusqu’à ce que le processus ait terminé de la mettre à jour. D’une manière générale, il faut empêcher
les autres processus d’accéder à un objet partagé si cet objet est en train d’être utilisé par un
processus, ce qu’on appelle d’assurer l’exclusion mutuelle. Les situations de ce type, où deux ou
La diminution du temps moyen de restitution : le temps mis par un processus pour aller de l'état
La diminution du temps moyen de réponse : dans un processus interactif, le temps entre une fin
d'entrée et le début d'une sortie de résultat (pas la fin). C'est une mesure de ``réactivité''.
L'équité.
IV-LES SEMAPHORES
Pour contrôler les accès à un objet partagé, E. W. Dijkstra suggéra en 1965 l’emploi d’un nouveau
type de variables appelées les sémaphores. Un sémaphore est un compteur entier qui désigne le
nombre d’autorisations d’accès à une section critique. Il a donc un nom et une valeur initiale, par
exemple sémaphore S = 10.
Les sémaphores sont manipulés au moyen des opérations P et V ou signal. L’opération P(S)
décrémente la valeur du sémaphore S si cette dernière est supérieure à 0. Sinon le processus
appelant est mis en attente. Le test du sémaphore, le changement de sa valeur et la mise en attente
éventuelle sont effectués en une seule opération atomique indivisible.
L’opération V(S) incrémente la valeur du sémaphore S, si aucun processus n’est bloqué par
l’opération P(S). Sinon, l’un d’entre eux sera choisi et redeviendra prêt. V est aussi une opération
indivisible.
INTRODUCTION
En informatique, le mécanisme de mémoire virtuel a été mis au point dans les années 1960. Il
repose sur l’utilisation de traduction à la volée des adresses (virtuelles) vue du logiciel, en adresse
physique de mémoire vive. Elle permet d’utiliser de la mémoire de masse comme extension de la
mémoire vive, d’augmenter le taux de multiprogrammation, de mettre en place des mécanismes de
protection de la mémoire et de partager la mémoire entre les processus.
Il serait trop coûteux d’attribuer à tout processus un espace d’adressage complet, surtout parce
que beaucoup n’utilisent qu’une petite partie de son espace d’adressage. En général, la mémoire
virtuelle et la mémoire physique sont structurées en unités d’allocations (pages pour la mémoire
virtuelle et cadres pour la mémoire physique). La taille d’une page est égale à celle d’un cadre.
Lorsqu’un processus est en cours d’exécution, seule une partie de son espace d’adressage est en
mémoire.
I. La partition contiguë
Une mémoire paginée est divisée en blocs de taille fixe, ou pages logiques, qui servent d’unités
d’allocation. La mémoire physique est elle-même divisée en blocs de même taille appelés pages
physiques.
La Figure représente le schéma général d’une mémoire contiguë paginée. Le rôle de la boîte
marquée. Fonction de pagination est d’´établir une correspondance entre les adresses de pages
logiques et les adresses de pages physiques de manière à` ce qu’une page logique puisse être rangée
dans une page physique quelconque. Les pages physiques deviennent ainsi des ressources
banalisées dont la gestion est plus simple que celle de partitions de taille variable.
Le nombre et la taille d’une page (physique ou logique) sont toujours des puissances de 2 (pour
une raison qui sera claire dans le paragraphe qui suit). Notons 2l la taille (nombre d’emplacements)
d’une page (logique ou physique) et 2n le nombre de pages. Il y a pour l’instant autant de pages
logiques que de pages physiques.
Le champ desc[npl] indique le mode d’accès autorisé à la page logique npl. Cette information
est utilisée par les mécanismes de protection et un accès non autorisé provoque un déroutement
pour violation de protection.
Notons qu’une table de pages représente le contenu d’une mémoire logique particulière. Si le
système d’exploitation permet à chaque processus, ou à chaque usager du système, de définir une
mémoire logique distincte, il doit gérer une table de pages distincte par processus ou par usager. Le
pointeur vers l’origine de cette table (RB) fait alors partie du contexte du processus ou de l’usager.
Les tables des pages se trouvent en mémoire physique, dans la partition réservée au système
d’exploitation.
La mémoire logique d’un processus n’est plus représentée d’une manière contiguë en mémoire
centrale. En effet, l’indirection des accès par la table de pages permet de loger les pages logiques
dans n’importe quelle page physique. De ce fait, la gestion de la mémoire physique revient
simplement à gérer une liste des pages physiques libres sans idée de regroupement. Les problèmes
liés a` la fragmentation externe disparaissent mais la fragmentation interne se fait plus présente
puisque la page devient l’unité élémentaire d’allocation et de libération (en pratique quelques
kibioctets).
L’accès `à une page logique nécessite maintenant deux références à la mémoire en raison de la
consultation de la table des pages. Cette augmentation du temps d’accès moyen est bien sur
intolérable. La réduction de ce coût passe par deux points :
observer le comportement des processus (vis à vis de la mémoire) ;
optimiser la transformation des adresses au moyen d’un circuit particulier : les mémoires
associatives.
Donc pour éviter l’accès à cette table (et donc réduire le temps d’accès moyen), on passe par un
circuit particulier : une mémoire associative. Avant de présenter cette mémoire, il faut discuter de
l’utilisation de la mémoire par les processus
II. La multiprogrammation
1. Définition
La multiprogrammation est la capacité d'un système d'exécuter à la suite plusieurs activités sans
l'intervention de l'utilisateur. C'est une des premières capacités fournies par les systèmes
d'exploitation dès la fin des années 1950.
Le taux de multiprogrammation est le nombre de processus présent dans la mémoire d’ordinateur a
un instant donné. Les premiers ordinateurs ne pouvaient exécuter qu’un seul programme à la fois,
ce taux était donc égale 1 au maximum. C’était aussi le cas pour les premiers systèmes
d’exploitation (MS-DOS ou CP/M par exemple) sur les premiers micro-ordinateurs.
Exemples :
2. Rôle
Le but de la mémoire virtuelle est de permettre l’exécution de programmes dont la taille excède
celle de la mémoire réelle. Les adresses virtuelles référencées par l’instruction en cours doivent être
traduites en adresses physiques. Cette conversion d’adresse est effectuée par des circuits matériels
de gestion. Si cette adresse correspond à une adresse en mémoire physique, on transmet sur le bus
l’adresse réelle, sinon il se produit un défaut de page. Par exemple, si la mémoire physique est de
32 Ko et l’adressage est codé sur 16 bits, l’espace d’adressage logique peut atteindre la taille soit 64
Ko. L’espace d’adressage est structuré en un ensemble d’unités appelées pages ou segments, qui
peuvent être chargées séparément en mémoire.
12K-16K D x 28K-32K
8K-12K C C 24K-28K
4K-8K B x 20K-24K
0K-4K A B 16K-20K
Disque
L’ensemble de son espace d’adressage (mémoire virtuelle) est stocké sur disque. Pour exécuter un
processus, le système d’exploitation charge en mémoire uniquement une ou quelques unités (pages
ou segments) y compris celle qui contient le début du programme. Lorsqu’un processus est en cours
d’exécution, seule une partie de son espace d’adressage est en mémoire principale. Cette partie est
dite résidante. Les parties de cet espace sont chargées en mémoire principale à la demande. Elles
peuvent être dispersées en mémoire centrale. Lorsqu’un processus référencie une partie qui ne
réside pas en mémoire, l’exécution du processus est suspendue, c’est à dire il passe à l’état bloqué
en attente d’une E/S. Le système d’exploitation reprend le contrôle, il modifie l’état du processus
(état bloqué), lance une demande d’E/S pour ramener la partie référencée, puis exécute d’autres
processus.
La mémoire virtuelle et la mémoire physique sont structurées en unités d’allocations (pages pour
la mémoire virtuelle et cases pour la mémoire physique). La taille d’une page est fixe et égale à
celle d’une case. Elle varie entre 512 octets et 8 Ko. Il n’y a pas de fragmentation externe car toutes
les pages sont de même taille. Par contre, il peut y avoir une fragmentation interne si la dernière
page de l’espace d’adressage logique n’est pas pleine.
Example:
Soit un programme de 64 Ko sur une machine 32 Ko de mémoire physique.
6
5
4
3
2
1
0
Mémoire physique
4
3
2
1
0
Le disque contient principalement des fichiers réguliers (contenant une séquence d’octets) et des
répertoires (contenant une séquence d’entrées). Souvent, les répertoires sont traités comme des
fichiers dont le contenu décrit les entrées du répertoire (selon un format fixe ou variable). Le
problème de l’allocation de l’espace disque est similaire à celui de l’allocation de la mémoire
principale. À cause de la lenteur des disques, leur grande capacité, et les différences de
manipulation des données, des algorithmes spécialisés sont utilisés. L’espace disque est
normalement alloué en blocs dont la taille est un multiple de secteurs ; il y a un espace inutilisé dans
les blocs qui ne sont pas pleins. Une méthode simple consiste à allouer tous les blocs de chaque
fichier dans un espace contigu. La représentation est compacte (à part l’entrée du répertoire, il faut
uniquement des blocs pour le contenu du fichier). Les accès séquentiels et aléatoires sont rapides
(étant donné la position d’un octet, il est facile de trouver le bloc qui contient cet octet). Pour
étendre un fichier, il faut possiblement le copier fragmentation de l’espace libre.
VI. Segmentation
La segmentation offre une vue de la mémoire plus cohérente avec celle de l’utilisateur. En effet,
celui-ci ne considère pas ou rarement la mémoire comme une suite de page mais plutôt comme des
espaces, ou des régions, destiner à une utilisation particulière par exemple : le code d’un
programme, les donnes, la pile, un ensemble de sous-programme, des modules, un tableau etc. la
segmentation reflète cette organisation.
Chaque objet logique sera désigné par un segment. Dans un segment l’adressage se fera à l’aide
d’un déplacement. Le couple (segment, déplacement) sera traduit en adresse mémoire par le biais
d’une table de segment contenant deux champs, limite et base. La base est l
Segment Octet
Mémoire
N
>
O
Trap
Adresse
Physique
Table de segments
PF = page physique
1. Principe de la segmentation
Dans les systèmes de mémoire paginée, la division en pages est arbitraire et ne tient pas compte du
mode d’organisation des données d’un processus. Notamment, il est fort probable que certaines
structures de données se trouvent à cheval sur plusieurs pages, ce qui peut être la cause de temps
d’accès plus importants.
L’objectif des mémoires segmentées est de mettre en rapport la structure logique de la mémoire
(vue des processus) et l’implantation physique de cette mémoire. Pour ce faire, la mémoire logique
segmentée d’un processus est définie comme un ensemble de segments numérotés à partir de zéro
Figure.
2. Segmentation paginée
La segmentation peut être combinée avec la pagination. Chaque segment est composé d’un
ensemble de pages. Les adresses générées par les compilateurs et les éditeurs de liens, dans ce cas,
sont alors des triplets : <Numéro du segment, numéro de page, déplacement dans la page>
Le schéma de traduction d’adresses par segmentation paginée est montré sur la figure.
Adresse logique PF = page physique
Segment Page Octet Mémoire
N
>
O
Trap
PF Octet
Limite TP + PF
Table de pages
Table de segments
Introduction
La gestion des périphériques représente peut-être le défi le plus considérable d’un système
d’exploitation. Ce dernier doit contrôler tout un ensemble de périphériques avec des différences
multidimensionnelles. Rapidité du périphérique, volume des informations, service proposé,
direction du flux d’informations et protocoles de communications sont autant de grandeurs aux
éventails très larges. Outre cette diversité, le système d’exploitation doit pouvoir traiter un grand
nombre de périphériques, ce traitement doit se dérouler dans un environnement parallélisé. Les
périphériques agissent en général indépendamment de l’UC, en fonction de leur propre fréquence et
synchronisation. Le système d’exploitation, qui la plupart du temps s’exécute sur une seule UC, doit
donc gérer des requêtes simultanées en provenance d’un grand nombre de périphérique.
Même si certains ordinateurs sont différents dans les détails, ils sont conçus autour de la même
philosophie. Les dispositifs d’E/S, le mémoire et l’UC communiquent par le biais d’un bus de
communication. Les machines les plus simples présentent un seul bus de communication. Mais les
communications ne peuvent avoir lieu qu’entre deux éléments à la fois. Un dispositif appelé «
Arbitre de bus » décide quel périphérique est autorisé à communiquer au prochain cycle. Celui-là
peut communiquer avec n’importe quel autre de son choix.
En principe, le bus est attribué à l’UC afin qu’elle puisse communiquer avec la mémoire. Des accès
fréquents à la mémoire et une vitesse relativement rapide de l’UC conduisent à une utilisation
élevée du bus par cette dernière. Bien que le bus leur soit fréquemment nécessaire, les E/S ont des
besoins en communication généralement plus urgents que les requêtes de l’UC. C’est pourquoi les
requêtes des périphériques d’E/S reçoivent souvent une priorité plus élevée. Le processus consistant
à retirer le bus de l’UC pour l’attribuer à un périphérique est appelé vol de cycle. On peut trouver
des bus multiples sur des machines pour des raisons de parallélisme et d’ajustement des
performances. Les bus multiples permettent à plusieurs communications de se dérouler
simultanément.
Dans le modèle le plus simple l’UC communique directement avec les périphériques dE/S et
prend en charge le contrôle des moindres détails de l’opération du périphérique. Ce type de
communication est de plus en plus rare (encore dans les systèmes embarqués). Les nouveaux
systèmes incorporent la notion de « contrôleur de périphériques ». Une commande classique de
l’UC au contrôleur peut être le lancement d’une opération de lecture pour un octet d’informations
depuis un appareil en série ou d’un secteur d’informations depuis un disque. Le contrôleur de
périphérique transmet au périphérique les commandes plus détaillées nécessaires à la réalisation de
l’opération requise. En déchargeant cette responsabilité sur le contrôleur, l’UC est libre d’accomplir
simultanément d’autres tâches. Chaque dispositif dE/S possède un contrôleur spécifique. La plupart
des contrôleurs peuvent servir plusieurs périphériques à la fois.
La scrutation : L’UC lance les opérations d’E/S puis retourne pour exécuter les processus du
système. Après des délais périodiques, l4UC fait une scrutation des périphériques d’E/S pour voir si
l’un d’eux a fini sa tâche ou non. Ce protocole est plus efficace que l’attente active, mais il est plus
couteux.
Accès direct à la mémoire : Les composants d’accès direct à la mémoire (DMA : Direct Memory
Access) permettent aux modules d’E/S de lire ou écrire des données directement depuis le mémoire.
Avec cette technique, les données ne doivent pas transiter par l’UC. Cet accès est utile pour des
dispositifs tels que les disques.
Les pilotes constituent la partie logicielle qui contrôle et interagit directement avec le périphérique
d’E/S.
Le SE peut exiger que pour chaque périphérique, il existe un ensemble de fonctions mises en
œuvre, telle que :
Open : réalise les tâches de démarrage avant l’accès au périphérique.
Close : fermer le périphérique après l’utilisation Schedule : ordonnance une requête d’E/S ou
plusieurs avant d’être passés au périphérique (pilote…).
Startio : vérifie si le périphérique est actif ; si ce n’est pas le cas, lance la prochaine opération d’E/S
sur la file d’ordonnancement du périphérique.
Interrupt : routine exécutée lorsque le périphérique envoie une interruption à l’UC.
Compte tenu des différents types de périphériques pouvant être connectés à certains ordinateurs, il
ne serait pas pratique d’inclure les pilotes de tous les périphériques éventuels dans le SE. Les SE
doivent être configurés en fonctions des périphériques. Ceci se fait par ajout ou suppression de
périphériques (modifier l’image du SE).
Les affichages monochromes de base n’ont besoin que d’un bit par pixel.
Les affichages par niveaux de gris (255 niveaux) ont besoin de 8 bits.
Les affichages couleurs réelles ont besoin de 24 bits : chaque pixel est généré par la combinaison
des trois couleurs primaires (rouge, vert et bleu : RGB ou RVB) ; 8 bits pour chacune de ces
couleurs. Avec un affichage couleurs réelles et pour un moniteur vidéo 1024×768, il nous faut 2,3
Mo pour stocker une valeur de 24 bits pour chaque pixel.
Pour modifier une image à l’écran, de nouvelles données doivent être écrites en mémoire vidéo.
Compte tenu du grand volume de données multimédia cela peut représenter une charge importante
sur le système. Par exemple, une animation vidéo qui nécessite 25 image/seconde et 2,3 Mo par
image réécrit 25 fois dans la mémoire vidéo par seconde donc un total de 58 Mo/seconde.
Cette exigence de transfert a poussé l’évolution des conceptions matérielles.
Les DVD et CD-ROM : les secteurs forment une longue spirale qui s’éloigne en tournant du centre
du disque.
Sur les disquettes et disques dans le support tourne à vitesse constante. Les secteurs sont organisés
en pistes. Les pistes sont des cercles concentriques autour du centre.
Certains disques stockent le même nombre de secteurs pour chaque piste. D’autres disques placent
plus de secteurs sur des pistes externes.
Les disques contiennent un ou plusieurs plateaux de support. Certain proposent d’utiliser les deux
faces du plateau et propose deux têtes de lecture/écriture par plateau.
Priorité : la requête venant du processus ayant la priorité la plus élevée est servi la première.
SSTF (Shortest Seek Time First): traduit plus court positionnement d’abord, répond à la requête
dont la position de la piste est la plus proche de celle en cours.
SCAN : avance et recule la tête de Lecture/écriture entre la piste la plus interne et la plus externe et
satisfait en route toutes les requêtes de la piste en suspens.
LOOK : le même que SCAN, mais s’il n’y a pas de requêtes dans un sens la tête ne fait pas le
déplacement de façon inutile.
C-SCAN et C-LOOK : une fois la dernière piste est atteinte, les algorithmes retournent sur la piste
de départ.
N-step SCAN : file de requête divisée en sous files de longueur N. Ces files sont ordonnancées en
FIFO. Au sein des files les requêtes sont ordonnancées en SCAN.
FSCAN : tel que le précédent, mais seulement deux sous files illimitées : Une en cours de
traitement et l’autre pour les nouvelles requêtes (celles qui viennent lors du traitement).
INTRODUCTION
MS=Microsoft
Avant Windows 95, les noms de fichiers étaient limités à 8 caractères à 3 pour les extensions sans
distinction de majuscules ou de minuscules
Le DOS ne gère pas les pilotes des périphériques et de ceux dont les soft ont besoin
C’est-à-dire, grosse installation des périphériques à chaque programme. Imaginez un peu avec des
disquettes de 160 ko
C’est tout simplement se problème, qui nous apparait aujourd’hui incroyable, qui a pousser à
développer windows10 sans oublier sur Windows la possibilité d’ouvrir plus d’un programme à la
fois.
Le MS-DOS était la fondation de Windows jusqu’à la Windows ME. A partir de Windows XP il est
possible d’obtenir une invite au commande c’est-à-dire il faut que Windows démarre pour accéder
au système DOS.
Le système d’exploitation qui était gérer par programme : commande.com (le .com était le .Exe
d’antan)
Dans le temps, il était plus facile de supprimer directement à partir du DOS virus, fichier corrompu
ou programme instable
1. Composants de base
Le système d'exploitation est formé de 6 modules, ce qui lui confère une importante flexibilité et
une grande souplesse d'utilisation.
1- La ROM BIOS est un élément de la carte mère qui exécute entre autres les premières instructions
dès la mise sous tension du micro-ordinateur. Il contient aussi les routines de gestion des organes de
la machine.
2- Le programme d'amorçage (BOOT SECTOR) se trouve sur le premier secteur de chaque disquette
ou disque dur et initialise le processus de chargement en mémoire des deux fichiers situés sur le
disque :
• BIOS = IO.SYS
• DOS = MSDOS.SYS
Il ne sert qu'à l'initialisation du système lors de la mise en marche du micro-ordinateur, d'un reset ou
d'un
CTRL+ALT+SUP.
3- LE MODULE BIOS fournit une interface de bas niveau avec la ROM−BIOS et gère les entrées
sorties des différents périphériques (clavier, écran, ...).
4- Le module DOS fournit une interface de haut niveau avec les programmes d'applications, il gère le
répertoire des fichiers ainsi que le blocage des enregistrements sur disque. C'est lui qui prend en
charge les appels des fonctions DOS.
6- Les commandes externes. Ce sont les autres commandes de MS−DOS qui ne sont pas dans
l'interpréteur de commande COMMAND.COM, soit parce qu'elles sont plus rarement utilisées, soit
parce que de par leur taille trop importante elles prendraient trop de place en mémoire.
Par extension, on appelle commandes externes tous les fichiers exécutables du disque (.COM et
.EXE).
Remarque:
• Le module BIOS qui est l'interface de bas niveau doit donc être réécrit pour chaque machine.
• Le module DOS, interface de haut niveau, sera le même pour toutes les machines. Donc, les
interfaces étant les mêmes (DOS identiques), les applications pourront alors être portable d'une
machine sur une autre.
A la mise sous tension du micro−ordinateur, dans la mémoire se trouve uniquement la ROM BIOS,
la RAM est encore vierge de toute information.
Exemple :
Un utilisateur demande la lecture d'un fichier sur le disque, laissant à la ROM−BIOS la charge de
préciser, par l'intermédiaire de sous−programme, les éléments nécessaires à l'accomplissement de la
requête, tel que la tailles des secteurs, le nombre de pistes…
L'accès aux sous−programmes de la ROM−BIOS est réalisé aux moyens d'interruptions (appel de
fonctions générées par le logiciel).
Vérification :
Le premier programme exécuté par la ROM−BIOS au lancement ( mise sous tension de l'ordinateur
ou réinitialisation du système ) est le mini auto test (Power−on self test). Celui−ci effectue :
En l'absence de ces informations ou si une erreur dans le programme est détectée, il y a affichage
d'un message système.
Ce programme se situe sur le secteur 0 de la piste 0, face 0 de toutes les disquettes système ou non,
formatées par la commande FORMAT (FORMAT/S pour avoir le système) ou DISKCOPY (qui
automatiquement formate avant de copier si cela n'a pas encore été effectué
Dans le cas du disque dur, il est situé sur le secteur 0, tête 0 du premier cylindre de la partition
DOS.
Ce programme n'occupant qu'un seul secteur, inutile de préciser qu'il est donc simplifié au
maximum. Par exemple, il n'ira pas chercher les modules BIOS et DOS ailleurs que dans les
premières entrées du répertoire. C'est pour cela qu'il faut insérer les fichiers systèmes tout au début
de la disquette, soit par un FORMAT/S qui après avoir formaté insère les fichiers systèmes (plus
l'interpréteur de commande), soit par la commande SYS (ce qui indique que la disquette a été
formatée sans l'option /S) qui les recopie sur le disque à la condition qu'il n'y ait pas eu d'autres
fichiers crés auparavant.
Module BIOS :
Appelé IBMBIO.COM chez IBM, IO.SYS chez MICROSOFT, il peut porter différents noms (à
base de IO).
Il est chargé en mémoire et constitue l'interface de bas niveau pour les programmes de la
ROM−BIOS.
Son rôle est de fournir des extensions variables au module de la ROM−BIOS. Conservé sur disque,
il peut en effet être modifié facilement.
Définition des vecteurs d'interruptions de numéros peu élevés ; • Attribution d'un nouvel
emplacement mémoire au module DOS ;
Module DOS :
Il est appelé IBMDOS.COM chez IBM et DOS.SYS chez MICROSOFT (nom à base de DOS).
C'est l'interface de haut niveau avec les programmes utilisateurs. Il contient un gestionnaire de
fichier
(Organisation du répertoire et des fichiers sur disque, blocage et déblocage des enregistrements...)
Il gère les appels de fonctions des entrées sorties, de la gestion des fichiers et de la mémoire, de la
date et de l'heure et des programmes en cours.
Lorsqu'un programme utilisateur exécute une opération d'entrées−sorties, celle−ci génère des
fonctions de haut niveau (appel de fonctions DOS). Ces fonctions engendrent à leur tour des appels
au module BIOS Ensuite, le DOS rend la main au module BIOS qui charge maintenant le fichier
COMMMAND.COM.
Rôle :
COMMAND.COM est un processeur de commande. C'est lui qui analyse les commandes que
l'utilisateur a saisies au clavier.
Il contient tous les modules correspondants aux commandes internes. Donc, après analyse d'une
commande, s'il s'agit d'une commande interne, il exécute le programme correspondant.
Sinon, il va chercher sur le lecteur courant, afin de le charger et de le faire exécuter, un fichier dont
le nom correspond à ce qui a été saisi au clavier, et dont l'extension est .COM ; s'il ne trouve pas, il
cherche un fichier .EXE et s'il ne trouve toujours pas, il le cherche avec l'extension .BAT (fichier
de procédure).
A ce moment−là, s'il n'a toujours pas trouvé, il affiche le message équivalent : NOM DE
COMMANDE OU FICHIER INCONNU
Constitution de COMMAND.COM :
2) Partie initialisation
Cette partie ne sert qu'à la phase démarrage du micro−ordinateur ; la place sera donc libérée après
son exécution (principe de recouvrement : overlay). Travail effectué :
3) Partie semi−résidente
Elle contient surtout les modules de gestion des fichiers de commande .BAT. Cette partie peut donc
être écrasée si le système d'exploitation a besoin de place, car si c'est un programme utilisateur qui
est en train de s'exécuter, ce ne peut donc être un fichier de commande. Elle sera rechargée lorsque
le processeur de commande reprendra la main (partie résidente de COMMAND.COM).
COMMAND.COM a la main ; c'est lui qui envoie à l'écran le "Prompt" : c'est le message montrant
qu'il est en attente d'une commande, en général A : > ou C : >.
2) Commande externe. Après ne pas l'avoir trouvé, il ira donc la chercher sur le lecteur courant. Il
s'occupe du chargement de ce programme (qui a obligatoirement une extension .COM ou .EXE) et,
une fois qu'il est en RAM, lui passe la main pour qu'il puisse s'exécuter. A ce moment−là,
COMMAND.COM n'est donc plus actif, c'est le programme utilisateur qui travaille avec le
système d'exploitation (en théorie directement avec le DOS par des appels de fonctions, qui
lui−même appelle des fonctions BIOS).
Une fois terminé, COMMAND.COM dirige à nouveau les opérations et sera en mesure d'attendre
une autre commande.
3) Recherche d'un fichier ayant l'extension .BAT. C'est un fichier spécial ne contenant
principalement que ces commandes internes ou externes (et bien sûr quelques autres commandes
propres aux fichiers de procédures .BAT).C'est la partie semi−résidente qui gère le bon déroulement
des commandes ; mêmes cas que 1 et 2.
Ouvrages de référence :
Principes fondamentaux des systèmes d’exploitation, Dominique Battisti, Christine Macon Nathan 2017.