Source de cours/systemes_exploitation.php

<?
  
require ("../page.inc");
  require (
"lessons.inc");

  
$currentPage = new LessonPage("systemes_exploitation");

  
$currentPage->setContent('');
  
$currentPage->addChapter('general''Généralités''
<p>Un ordinateur seul ne peut effectuer rien de très utile. Pour lui un disque dur n\'est qu\'un endroit pour stocker des 0 et des 1 et une carte graphique n\'est qu\'un module mis dans un emplacement.
</p><p>
Pour lui dire que faire de tout cela, il y a une première couche logicielle qui est le système d\'exploitation (sur un <acronym xml:lang="en" lang="en" title="Personal Computer">PC</acronym> il y a le <acronym xml:lang="en" lang="en" title="Basic Input Output System">BIOS</acronym> avant tout). On y trouve dedans tout ce qui est nécessaire pour gérer le matériel et fournir à l\'utilisateur les fonctions de base.
</p><p>
Certains systèmes d\'exploitation relativement récents rendent tout cela un peu confus en mélangeant toutes les couches. L\'interface graphique est fournie avec le système d\'exploitation comme c\'est le cas par exemple avec Windows depuis la version 95. Pour qui souhaite un peu mieux comprendre l\'architecture interne, il vaut mieux s\'intéresser à un système comme <acronym xml:lang="en" lang="en" title="GNU\'s Not Unix">GNU</acronym>/Linux qui met plus en évidence ce découpage.
</p>
'
);

  
$currentPage->addChapter('memory''Gestion de la mémoire''
<p>
Un des premiers rôles du système d\'exploitation est de gérer la mémoire disponible sur la machine. Par cela, il s\'agit de la <acronym xml:lang="en" lang="en" title="Random Access Memory">RAM</acronym> présente sur la machine, mais pas seulement, comme cela sera expliqué ci-après.
</p><p>
Sur une machine plusieurs programmes peuvent s\'exécuter simultanément comme expliqué dans la section suivante. Il ne faut pas que ceux-ci puissent interférer les uns avec les autres. Durant son déroulement, une application a besoin de sauvegarder des données temporairement. Quand vous utilisez un traitement de texte par exemple, il conserve la police actuellement utilisée. Cela se fait dans la mémoire. Et il ne faut pas que le jeu qui est en train d\'être utilisé en même temps puisse altérer cette valeur lorsqu\'il enregistre l\'emplacement actuel du joueur.
</p><p>
Pour réaliser cela, les programmes ne peuvent pas écrire directement dans la RAM de la machine. Pour eux tout se passe comme si c\'était le cas, mais le système d\'exploitation se charge d\'écrire dans certaines zones indépendantes les unes des autres. Le programme voit un espace de <strong>mémoire virtuelle</strong> dans lequel il peut faire ce qu\'il veut sans risquer de déranger les autres. Cet espace a une taille de 4 <acronym xml:lang="fr" title="Giga octets">Go</acronym> sur une machine 32 bits (il est divisé en plusieurs parties, mais en dire plus ne sera pas utile dans cet article).
</p><p>
Un PC standard actuel a 256 <acronym xml:lang="fr" title="Mega octets">Mo</acronym> de RAM. Il n\'est donc pas possible d\'y mettre les 4Go évoqués précédemment. D\'autant plus si cela doit être multiplié par le nombre de programmes.
</p><p>
Pour résoudre ce problème, il y a la notion de <strong>fichier d\'échange</strong> (ou <strong>swap</strong>). La place supplémentaire nécessaire est prise sur le disque dur. Si la mémoire est pleine et qu\'il faut y écrire de nouvelles données, les plus anciennes (ou les moins fréquemment utilisées) seront sauvegardées sur le disque pour libérer de l\'espace. Un programme ne peut travailler directement qu\'avec les données en mémoire vive. Donc si celles qui avaient été sauvegardées sont requises, elles suivront le chemin inverse pour revenir en mémoire depuis le disque.
</p><p>
Tout ce mécanisme est invisible pour l\'application. C\'est le système d\'exploitation qui se charge de ces opérations selon les besoins. Les temps d\'accès au disque dur sont coûteux. Donc si la mémoire est insuffisante par rapport aux applications utilisées, l\'utilisation du swap sera intensive et ralentira la machine.
</p>
'
);

  
$currentPage->addChapter('multi''Multitâche''
<p>
Sur un PC standard, on a un seul processeur. Celui-ci ne peut globalement exécuter qu\'une opération à la fois. Or lorsqu\'on l\'utilise, on peut en même temps regarder une vidéo, relever ses mails et graver un <acronym xml:lang="en" lang="en" title="Compact Disc - Read Only Memory">CD-ROM</acronym> par exemple. Vu de l\'utilisateur, c\'est comme si tous ces programmes s\'exécutaient simultanément.
</p><p>
En fait il n\'en est rien du fait des limitations matérielles. Le rôle du système d\'exploitation est de faire exécuter tour à tour ces applications. Chacune va à son tour disposer de l\'unité de calcul (le processeur) pour réaliser ce qu\'il désire. Cet intervalle de temps (<strong>time-slice</strong> en anglais) peut varier selon les systèmes de quelques millisecondes à plusieurs dizaines de millisecondes. Plus la valeur est faible, plus l\'impression de multitâche sera grande. Mais le passage d\'une application à une autre a un coût en termes de temps. Il faut restaurer le <strong>contexte</strong> dans lequel se trouvait l\'application avant que l\'accès au processeur lui ait été retiré. Il faut donc trouver le bon compromis pour que tout le temps ne soit pas passé à basculer.
</p><p>
Cette restauration de contexte comprend notamment le rétablissement de l\'espace de mémoire virtuelle évoqué ci-dessus. Il y a aussi le processeur qui doit être remis comme il était lorsque le programme a été interrompu.
</p><p>
Il faut noter qu\'une application ne sait pas quand elle ne sera plus exécutée pour laisser la place à une autre. On parle de <strong>multitâche préemptif</strong>. C\'est le système d\'exploitation qui prend la décision.
</p><p>
Sur d\'anciens systèmes on avait un <strong>multitâche coopératif</strong>, appelé parfois aussi pseudo-multitâche. Dans ce cas-là, c\'étaient les applications qui décidaient qu\'elles n\'avaient pendant un certains temps plus besoin du processeur (par exemple si elles attendent des données provenant du disque dur ou du réseau) et peuvent donc être mise en sommeil. Windows 3.1 rajoutait cette couche de multitâche coopératif sur <acronym xml:lang="en" lang="en" title="MicroSoft Disk Operating System">MS DOS</acronym> qui était monotâche.
</p>
'
);

  
$currentPage->addChapter('display''Interface graphique''
<p>
Comme dit précédemment, l\'interface graphique ne fait pas réellement partie du système d\'exploitation lui-même. L\'interface graphique vient se placer au-dessus de ce dernier et se divise encore en plusieurs parties.
</p><p>
Tout d\'abord la partie la plus proche du matériel qui comprend les pilotes des cartes graphiques (voir section suivante). Cette partie utilise les spécificités du matériel pour fournir des fonctions de base (afficher ou déplacer un rectangle par exemple) ou plus avancées (gestion de la 3D notamment). Sous GNU/Linux c\'est le plus souvent géré par <a rel="external" xml:lang="en" lang="en" href="http://www.xfree86.org/" hreflang="en">XFree86</a>.
</p><p>
Ensuite vient le <strong>gestionnaire de fenêtres</strong>. Il permet d\'avoir comme son nom l\'indique des fenêtres pour les applications. Celles-ci peuvent être agrandies, réduites,... Et le passage d\'une application à une autre est facilité. Sous GNU/Linux on peut citer <a xml:lang="en" lang="en" href="http://www.windowmaker.org/">Window Maker</a>, <a rel="external" xml:lang="en" lang="en" href="http://www.kde.org/" hreflang="en">KWM</a> ou <a rel="external" xml:lang="en" lang="en" href="http://sawmill.sourceforge.net/" hreflang="en">Sawfish</a> parmi de nombreux autres.
</p><p>
Et enfin on trouve la partie la plus optionnelle, le <strong>gestionnaire de bureau</strong>. Il permet d\'avoir un environnement de travail avec un ou plusieurs bureaux virtuels sur lesquels peuvent être placés des liens vers des programmes. Il y a aussi généralement d\'autres outils comme une barre des tâches ou des menus configurables. Les deux représentants les plus connus sous GNU/Linux sont <a rel="external" xml:lang="en" lang="en" href="http://www.kde.org/" hreflang="en">KDE</a> et <a rel="external" xml:lang="en" lang="en" href="http://www.gnome.org/" hreflang="en">GNOME</a>.
</p>
'
);

  
$currentPage->addChapter('driver''Rôle d\'un pilote de périphérique''
<p>
Appelé <strong>driver</strong> en anglais, le pilote de périphérique est l\'interface entre le matériel et le système d\'exploitation. Il permet de faire l\'abstraction de celui-ci (on parle de <strong>Hardware Abstraction Layer</strong>) en fournissant une interface toujours identique. Les différents matériels ne sont pas constitués des mêmes composants électroniques. Mais les fonctionnalités qu\'ils présentent sont les mêmes.
</p><p>
Comme exemple simple, on peut considérer les cartes graphiques. Pour faire afficher un point à l\'écran, différentes cartes ne procéderont pas de la même manière. Mais le pilote de périphérique va se charger de dialoguer avec la carte selon ses spécifications techniques. Le système d\'exploitation appelera une méthode toujours identique pour demander à voir apparaître ce point.
</p><p>
Ces différences matérielles peuvent être atténuées avec l\'apparition de normes. Pour en revenir aux cartes graphiques, la norme <acronym xml:lang="en" lang="en" title="Video Graphics Array">VGA</acronym> permet de standardiser l\'initialisation et l\'utilisation de la carte. Cette norme ne prévoit pas les hautes résolutions, ni les fonctions 3D. Pour ces dernières, on en revient à des spécificités pour chaque fabricant/modèle.
</p><p>
Les drivers sont considérés comme faisant partie du système d\'exploitation. Ils ne le sont pas forcément au sens logiciel, car ils peuvent être fournis séparément par le constructeur. Mais ils s\'exécutent dans un mode spécial, appelé <strong>mode réel</strong>. Ce mode leur permet de contourner les protections du système d\'exploitation du <strong>mode protégé</strong> (dont notamment le contrôle de la mémoire).
</p>
'
);

  
$currentPage->display();
?>