2

Rappels d'architecture matérielle

Pour comprendre le rôle et les fonctionnalités des systèmes d'exploitation, il est nécessaire d'appréhender ce qu'est une “machine nue”, c'est-à-dire quels sont les constituants matériels d'un ordinateur, et quels en sont les principes de fonctionnement.

2.1. Architecture générale

En première approche, un ordinateur est constitué d'un processeur qui effectue les traitements, d'une mémoire centrale où ce processeur range les données et les résultats de ces traitements et de périphériques permettant l'échange d'informations avec l'extérieur. Tous ces constituants sont reliés entre eux par l'intermédiaire d'un bus, qui est l'artère centrale et leur permet de s'échanger des données (figure 2.1.). Pratiquement tous les ordinateurs actuels ont cette architecture, que ce soient les micro-ordinateurs personnels ou les gros ordinateurs des entreprises. Les différences résident essentiellement dans les performances des constituants.

Fig. 2.1. Architecture générale d'un ordinateur.
La mémoire est un organe passif, qui répond à des ordres indiqués par les fils de contrôle du bus. En réponse à un ordre d'écriture, elle range la valeur représentée par les fils de données du bus dans un emplacement défini par les fils d'adresse du bus. En réponse à un ordre de lecture, elle fournit sur les fils de données du bus la valeur mémorisée à l'emplacement défini par les fils d'adresses. Le nombre de fils de données du bus définit le nombre de bits des emplacements mémoire. C'est une caractéristique importante pour les performances de l'ordinateur, puisqu'il détermine le nombre de bits pouvant être lus ou écrits en mémoire par une seule opération. Le nombre de fils d'adresse du bus définit la taille maximale de la mémoire centrale. Le bus est géré par un contrôleur, parfois intégré au processeur, qui empêche son utilisation simultanée par plusieurs organes.

2.2. Architecture du processeur

Le processeur est l'organe qui effectue les traitements suivant un “algorithme” défini par le programmeur. Il est constitué essentiellement de trois parties (figure 2.2):
Le principe de fonctionnement est assez simple. Le décodeur-séquenceur répète indéfiniment la séquence d'opérations suivante:

Fig. 2.2. Architecture générale d'un processeur.
Les instructions sont en général assez rudimentaires. Ce sont essentiellement des opérations de transfert de données entre les registres et l'extérieur du processeur (mémoire ou périphérique), ou des opérations arithmétiques ou logiques avec un ou deux opérandes. Pour ces dernières opérations, un registre particulier, l'accumulateur, est souvent utilisé implicitement comme l'un des opérandes et comme résultat. En général le déroulement de l'instruction entraîne l'incrémentation du compteur ordinal, et donc l'exécution de l'instruction qui suit. Notons que le transfert d'une valeur dans le compteur ordinal entraîne un “branchement” à l'adresse correspondant à cette valeur. La tendance naturelle a été de construire des processeurs avec un jeu d'instructions de plus en plus large; on pensait alors que le programmeur utiliserait les instructions ainsi disponibles pour améliorer l'efficacité de ses programmes. Ceci a conduit à ce que l'on a appelé l'architecture CISC (Complex Instruction Set Computer). Cependant on a constaté que les programmes contenaient toujours les mêmes instructions, une partie importante du jeu d'instructions n'étant utilisée que très rarement. Une nouvelle famille de processeurs a alors été construite, l'architecture RISC (Reduced Instruction Set Computer), qui offre un jeu réduit d'instructions simples mais très rapides.
La figure 2.3 donne un exemple de la représentation binaire d'une instruction en machine (cas 68000). Cette forme n'est pas très agréable pour l'homme, mais c'est le véritable langage de la machine. La forme mnémonique qui l'accompagne est déjà plus lisible, mais nécessite un programme (l'assembleur) pour pouvoir être interprêtée par la machine.

Fig. 2.3. Exemple d'instruction binaire et mnémonique.

2.3. Les entrées-sorties

Le principe élémentaire mis en œuvre pour l'échange de données entre deux constituants physiques est représenté en figure 2.4. En dehors des données proprement dites, deux liaisons supplémentaires sont nécessaires, pour permettre d'une part à l'émetteur de la donnée de signaler la présence effective de cette donnée sur les fils correspondants, et d'autre part au récepteur de signaler qu'il a lu la donnée. On peut comparer ceci au ping-pong: celui qui a la balle a le droit d'accéder aux fils de valeur pour lire ou écrire la donnée. Suivant la capacité de traitement que l'on place entre le processeur et le périphérique, c'est-à-dire suivant la complexité du dispositif qui va prendre en compte cet échange élémentaire et le transformer en des échanges sur le bus, on trouvera les dispositions évoquées dans la figure 2.1.

Fig. 2.4. Protocole élémentaire d'entrées-sorties.

2.3.1. Les entrées-sorties programmées

La façon la plus simple d'assurer la liaison entre le bus et un périphérique, est de faire une simple adaptation des signaux évoqués ci-dessus. On parle alors d'une interface. Le processeur adresse directement le périphérique soit par les instructions habituelles d'accès à la mémoire centrale, l'interface jouant alors le rôle d'un (ou de plusieurs) emplacement de mémoire, soit par des instructions spécialisées qui assurent le transfert d'une donnée élémentaire avec un registre ou un emplacement mémoire. Dans tous les cas, le programmeur doit assurer le protocole élémentaire d'échanges évoqué plus haut; c'est pourquoi on parle d'entrées-sorties programmées.
tantque il_y_a_des_données_à_lire faire
	tantque donnée_suivante_non_prête faire fait; { attente de la donnée}
	lire_la_donnée;
	traitement_de_la_donnée;
fait
Fig. 2.5. Exemple d'entrée-sortie programmée.
La figure 2.5 donne le schéma d'un tel programme de lecture. Noter la boucle d'attente de la donnée qui teste l'indicateur de donnée prête. Nous supposons ici que la lecture de la donnée entraîne le positionnement par l'interface de l'indicateur de donnée lue et sa remise à zéro par le positionnement de l'indicateur de donnée prête. Il est facile de constater qu'un tel échange a une vitesse (on dit encore un débit) limité par le nombre d'instructions machine qui constituent le corps de la boucle externe. Ce débit est souvent limité en conséquence à 50 Ko/s (Kilo-octets par seconde). Par ailleurs si le périphérique est lent, le processeur est monopolisé pendant toute la durée de l'échange. Dans ce cas, on ne lit que quelques octets à la fois pour éviter cette monopolisation. Comme il a été mentionné dans le précédent chapitre, cette forme d'échange était la seule possible dans les premières générations de machines.

2.3.2. Les entrées-sorties par accès direct à la mémoire

Pour accroître le débit potentiel des entrées-sorties, et diminuer la monopolisation du processeur dont nous avons parlé ci-dessus, la première solution a été de déporter un peu de fonctionnalité dans le dispositif qui relie le périphérique au bus, de façon à lui permettre de ranger directement les données provenant du périphérique en mémoire dans le cas d'une lecture, ou d'extraire directement ces données de la mémoire dans le cas d'une écriture. C'est ce que l'on appelle l'accès direct à la mémoire, ou encore le vol de cycle.
La figure 2.6 schématise le mécanisme d'accès direct à la mémoire. L'exécution d'un transfert se déroule de la façon suivante:

Fig. 2.6. Mécanisme d'accès direct à la mémoire.
Pendant toute la durée du transfert, le processeur est libre d'effectuer un traitement quelconque. La seule contrainte est une limitation de ses propres accès mémoire pendant toute la durée de l'opération, puisqu'il doit parfois retarder certains de ses accès pour permettre au dispositif d'accès direct à la mémoire d'effectuer les siens (d'où le terme de vol de cycle évoqué plus haut).
La limitation du débit inhérent au mécanisme est en général lié au débit potentiel de la mémoire elle-même, c'est-à-dire à la durée d'un cycle de lecture ou d'écriture en mémoire. Si cette durée est de 500 ns., on peut théoriquement atteindre 2 Mo/s. Si la mémoire est organisée en mots de 4 octets, il est possible de lire ou d'écrire 4 octets en un seul cycle, et de porter ainsi le débit à 8 Mo/s. Dans ce cas le dispositif d'accès direct à la mémoire assure le regroupement ou l'éclatement des données échangées avec le périphérique de façon à minimiser les accès mémoire.

2.3.3. Les entrées-sorties par processeur spécialisé

La troisième façon de relier un périphérique avec la mémoire est d'utiliser un processeur spécialisé d'entrées-sorties, c'est-à-dire de déléguer plus d'automatisme à ce niveau. Dans le schéma précédent, le processeur principal avait en charge la préparation de tous les dispositifs, accès direct à la mémoire, contrôleur, périphérique, etc..., pour la réalisation de l'opération. L'utilisation d'un processeur spécialisé a pour but de reporter dans ce processeur la prise en charge de cette préparation, mais aussi des opérations plus complexes, telles que par exemple le contrôle et la reprise d'erreurs. L'intérêt est de faire exécuter des tâches de bas niveau par un processeur moins performant, et donc moins coûteux à réaliser, tout en réservant le processeur principal à des tâches plus nobles.

2.4. Les interruptions

Nous avons déjà introduit ce mécanisme dans le chapitre précédent ainsi que dans le paragraphe ci-dessus. Ce mécanisme a été imaginé pour permettre à un dispositif extérieur d'interrompre le déroulement normal du processeur pour lui faire exécuter un traitement spécifique. Un programme en arrière plan peut ainsi être interrompu pour permettre d'activer un travail en avant plan; il sera ensuite poursuivi à la fin de ce dernier. Un périphérique peut signaler la fin de l'opération d'entrées-sorties demandée précédemment, permettant ainsi au système de temps partagé de reprendre l'exécution du programme qui avait demandé cette opération.
Le mécanisme est obtenu en modifiant légèrement le fonctionnement du décodeur-séquenceur du processeur, par introduction d'une troisième phase, et qui devient le suivant:
La prise en compte de l'interruption peut se faire de différentes façons. Puisqu'il s'agit d'interrompre le déroulement normal des instructions, il “suffit” de modifier le compteur ordinal. Cependant comme on désire reprendre ultérieurement le programme interrompu, il faut aussi “sauvegarder” la valeur de ce compteur. Dans la plupart des processeurs, ce n'est pas jugé tout à fait suffisant. En général, le constructeur définit un PSW (Program Status Word), ou mot d'état du programme, contenant en particulier le compteur ordinal ainsi que certains indicateurs sur l'état courant du processeur. La prise en compte d'une interruption par le processeur consiste alors à ranger en mémoire ce PSW dans un emplacement déterminé ou repéré par un registre particulier utilisé comme un pointeur de pile[1], et à charger un nouveau PSW soit fixe, soit obtenu depuis la mémoire.
Pour éviter de ranger inutilement en mémoire des registres, ce qui serait coûteux en temps, le processeur ne range que le minimum lors de la prise en compte de l'interruption. Si on désire pouvoir reprendre ultérieurement le programme interrompu, les instructions qui constituent le traitement de l'interruption que nous appellerons sous-programme d'interruption, doit ranger en mémoire le contenu de l'ensemble des registres du processeur qui ne l'ont pas été par la prise en compte de l'interruption, pour permettre cette reprise ultérieure. C'est ce que l'on appelle la sauvegarde du contexte. Dans certains cas, on pourra ne faire qu'une sauvegarde partielle des seuls registres modifiés par le sous-programme d'interruption. Lorsque le contexte est sauvegardé, le sous-programme analyse la cause de l'interruption, et effectue le traitement approprié. Il peut ensuite restituer le contexte du programme interrompu (ou celui d'un autre programme lorsque l'interruption correspond à la fin d'une opération d'entrées-sorties pour celui-ci). Il se termine par une instruction spéciale qui demande au processeur de restituer le PSW du programme interrompu, entraînant sa reprise effective (figure 2.7).

Fig. 2.7. Déroulement d'un sous-programme d'interruption.
Le schéma de fonctionnement du mécanisme d'interruption ainsi décrit met en avant une difficulté si une nouvelle interruption survient alors que le traitement de la précédente n'est pas terminée. Si on ne prend pas de précaution, le sous-programme d'interruption est de nouveau appellé avant sa fin, entraînant la sauvegarde du contexte du sous-programme d'interruption et la perte du contexte du programme initialement interrompu[2]. Ce problème est résolu par le biais du masquage des interruptions, qui interdit au processeur la prise en compte d'une interruption si elle est masquée. Cela n'annulle pas la demande d'interruption proprement dite, qui n'est pas considérée par le processeur. Lorsque, ultérieurement, une instruction sera exécutée par le processeur pour démasquer cette interruption, celui-ci pourra alors la prendre en compte. Cela permet ainsi au logiciel (en général le système d'exploitation) de contrôler les moments où une telle prise en compte pourrait perturber son bon fonctionnement. En particulier, le masquage automatique des interruptions par le processeur lors de la prise en compte d'une interruption évite de le réexécuter une nouvelle fois avant qu'il ne soit terminé, à moins que le programmeur n'ait lui-même demandé le démasquage des interruptions dans le sous-programme après avoir pris les précautions nécessaires à cette nouvelle interruption (sous-programme réentrant).
Certains processeurs ont plusieurs “fils d'interruption” qui sont masquables individuellement. Ils correspondent alors à des interruptions hiérarchisées, c'est-à-dire qu'à chaque fil est attribué un numéro appellé niveau de priorité d'interruption, permettant au processeur de savoir laquelle il y a lieu de prendre en compte si plusieurs sont présentes au même moment. Ce dispositif est complété par un registre spécialisé du processeur (qui fait partie du PSW) qui contient le niveau de priorité de l'interruption en cours de traitement. Le processeur ne prend en compte une interruption que si elle est non masquée, et de priorité supérieure au niveau de priorité courant. Cela permet de satisfaire les demandes plus urgentes que celle que l'on est en train de traiter tout en évitant les problèmes de réentrance évoqués plus haut.

2.5. Notion d’appel système

2.5.1. Mode maître-esclave

Le chapitre précédent a introduit la nécessité de contrôler les actions d’un programme vis à vis de son environnement direct. En général, il est nécessaire d’empêcher le programme d’un utilisateur de perturber le fonctionnement global du système ou les programmes des autres utilisateurs. Cela implique qu’il n’ait pas accès à l’ensemble des ressources de la machine, mais seulement à celles qui lui ont été allouées en propre. La solution la plus couramment adoptée est de distinguer deux modes de fonctionnement du processeur, le mode maître et le mode esclave. Dans le mode maître, le processeur a accès à toutes les ressources de la machine. Dans le mode esclave, certaines instructions lui sont interdites. Pour cela, le fonctionnement du décodeur-séquenceur du processeur est légèrement modifié, par introduction d'une phase de contrôle intermédiaire:
L’indicateur du mode de fonctionnement maître/esclave fait partie du mot d’état programme. De cette façon, ce mode est lié au programme en cours d’exécution. En particulier, la prise en compte d’une interruption chargeant un mot d’état programme spécifique à l’interruption, le sous programme correspondant s’exécutera dans le mode défini par ce mot d’état et non par celui du programme interrompu. La reprise de ce dernier restaurera le mode qui lui est attaché.

2.5.2. Déroutement

Si le programme d’un utilisateur fonctionne en mode esclave, sous un jeu d’instructions réduit, néanmoins, certaines actions nécessaires à son bon fonctionnement nécessitent de disposer du jeu complet, et doivent donc être exécutées en mode maître. Évidemment le changement de mode doit être contrôlé. En général, ceci se fait au moyen d’une instruction spéciale, qui va changer le mot d’état programme du processeur, selon un principe voisin de la prise en compte des interruptions, c’est-à-dire, rangement du mot d’état courant et chargement du mot d’état lié à la fonction demandée et restauration du mot d’état initial à la fin de la fonction. C’est pourquoi, ce mécanisme prend parfois la dénomination d’interruption programmée. On dit encore déroutement ou appel superviseur.
Un déroutement est aussi très voisin d’un appel de sous programme : sauvegarde du compteur ordinal, dont la valeur est remplacée par l’adresse du sous programme, et restauration de la valeur sauvegardée à la fin du sous programme. Il y a, cependant, deux différences essentielles :

2.6. Les caractéristiques des principaux périphériques

Les exemples suivants montrent la grande diversité des périphériques habituels.

2.6.1. Les périphériques de dialogue homme-machine

Trois types de périphériques principaux sont concernés par le dialogue entre l’homme et la machine.

2.6.1.1. Les écrans claviers distants

Il s'agit de terminaux relativement simples, qui ont vocations à être installés loin de l’ordianteur. La liaison doit donc être à faible coût, et on utilise 2 ou 4 fils, sur lesquels les bits sont “sérialisés”, c'est-à-dire que les 8 bits d'un octet sont transmis les uns après les autres, à vitesse constante, suivant un protocole standard international (RS232) ils sont précédés par un bit de départ (start), et suivis d'un ou deux bits de fin (stop). C'est ce que l'on appelle la ligne série asynchrone. Elle est asynchrone, car chaque octet est transmis individuellement, le bit start permettant la synchronisation automatique du récepteur sur l'émetteur, pour la durée du transfert de l'octet correspondant.
Vu de l'ordinateur, un écran-clavier est donc en fait une ligne série. Les octets sont en général transmis un par un par des entrées-sorties programmées. Le débit en sortie est au plus de 1000 octets par seconde. Il ne sert à rien d'aller plus vite, puisque l'homme ne peut déjà plus lire le contenu de l'écran à cette vitesse. Le débit en entrée est en général beaucoup plus lent puisqu'il est limité par la frappe manuelle sur le clavier, et donc quelques octets par seconde. Pour éviter que le processeur ne perde trop de temps lors de ces entrées-sorties programmées, on utilise le mécanisme d'interruption pour chaque caractère transmis. Si l'ordinateur doit comporter beaucoup de lignes, il peut s'en suivre une charge de traitement importante due à la prise en compte de ces interruptions. Dans ce cas, les constructeurs proposent souvent des processeurs d'entrées-sorties spécialisés dans ce travail; on les appelle alors des frontaux.

2.6.1.2. Les écrans graphiques

Les écrans graphiques sont maintenant le mode d’affichage habituel des postes de travail individuels, qu’il s’agisse de poste bureautique ou de stations de travail haut de gamme. Une zone de mémoire dédiée contient l’image en point à point devant être affichée. Un processeur graphique spécialisé parcours cette mémoire et interprète la suite des emplacements comme décrivant les points successifs ou pixels de l’image, et les transforme en signal vidéo pour l’affichage. Ce balayage est effectué 25 fois par secondes. De plus, cette zone est également accessible par le processeur central qui peut donc définir le contenu de chaque pixel de l’écran. Comme un écran peut comporter jusqu’à 1300 lignes de 1600 points chacune, l’image peut donc être constituée d’environ 2 millions de pixels, chaque pixel étant défini généralement par trois couleurs (rouge, vert et bleu), le niveau de chacune d’elles étant défini par 8 bits. Une telle mémoire peut donc atteindre 6 Mo. Le processeur central n’a pas à redéfinir tout ou partie du contenu de ces 6 Mo, 25 fois par secondes, mais chaque fois qu’un changement intervient dans l’image à afficher à l’utilisateur. Dans le cas de la nécessité d’animation complexe, il peut être fait appel à un processeur spécialisé pour faire varier le contenu de cette mémoire.
Les écrans graphiques sont en général couplés à ce que l’on appelle une souris. Il s’agit en fait d’un dispositif très simple qui transmet les mouvements subis dans deux directions, ainsi que l’appui sur 1 à 3 boutons. Ces informations de mouvements peuvent être analysés par un logiciel spécialisé, qui en retour affiche une marque à une position de l’écran, permettant à l’utilisateur de voir l’effet de ses mouvements sur la souris. Ce logiciel doit être assez rapide pour que tout mouvement de l’utilisateur ait un effet visuel immédiat. Les programmes d’applications reçoivent en général les coordonnées de la position de la marque sur l’écran au moment de l’appui sur l’un des boutons.

2.6.1.3. Les imprimantes

L'imprimante est un autre type de périphérique de dialogue homme-machine très courant. On peut distinguer les imprimantes caractères et les imprimantes graphiques.
Nous mettons dans la catégorie des imprimantes caractères celles à qui on envoie les caractères à imprimer et qui ont peu de fonctionnalités de mise en page. Une telle imprimante peut être connectée sur une ligne série comme les terminaux écran-clavier, et a alors les mêmes caractéristiques vues du processeur. L'intérêt est d'une part la standardisation vue de l'ordinateur qui ne fait pas de distinction entre ces imprimantes et les terminaux, et d'autre part la possibilité de les éloigner de l'ordinateur pour les rapprocher de l'utilisateur. Elle peut également être reliée par une interface directe en mode caractère, c'est-à-dire en utilisant les entrées-sorties programmées vues plus haut, la boucle assurant le transfert d'une ligne. Elle peut enfin être reliée sur un dispositif d'accès direct à la mémoire. Dans ces deux derniers cas, le débit instantané peut être important, car l'imprimante dispose en général d'un tampon correspondant à une ligne, ce qui justifie ces deux modes de liaison. Il faut noter cependant que l'impression proprement dite ralentit le débit moyen, qui varie entre 100 octets par seconde et 5000 octets par seconde (2400 lignes/minute).
Les imprimantes graphiques, par exemple les imprimantes laser, offrent des fonctionnalités complexes de dessin de caractères ou de figures comme de mise en page. Les plus simples doivent recevoir le contenu de la page à imprimer sous la forme d’une suite de bits décrivant les points (noir ou blanc) des lignes successives. Cependant, avec une finesse de 300 points par pouce, une page contient environ 8 millions de points, décrits par 1 Mo, qui doivent être transmis pendant le défilement de la feuille de papier devant le faisceau laser. Aussi cette méthode a tendance à être abandonnée au profit d’une méthode plus élaborée, dans la quelle le contenu de la page est décrit dans un langage standardisé, comme postscript. L’imprimante dispose d’un processeur rapide qui interprète cette description et la traduit en points sur le papier. Ce processeur peut être doté de plus ou moins de mémoire pour stocker les descriptions de page à imprimer et les dessins correspondants à plusieurs fontes (une fonte est un assortiment de caractères). Par ailleurs, la disponibilité d’un processeur permet de connecter l’imprimante directement au réseau.
Notons que pour les écrans claviers et les imprimantes classiques, le débit en sortie n'est pas crucial en ce sens que si le débit est ralenti du fait du processeur, il n'y aura pas perturbation du fonctionnement, mais simplement perte de performance. Le débit en entrée des claviers doit être respecté sous peine de perte d'informations, mais ce débit est assez faible pour ne pas être trop contraignant, sauf, comme nous l'avons dit, dans le cas d'un nombre important de terminaux. Nous verrons que ces contraintes sont beaucoup plus fortes pour les autres types de périphériques.

2.6.2. Les périphériques de stockage séquentiel

Nous nous intéressons ici aux bandes magnétiques de 1/2 pouce[3] de large, soit 1.27 cm., et d'environ 2400 pieds de long, soit 730 mètres. L'enregistrement et la lecture sont obtenus par 9 têtes permettant de mettre transversalement un octet avec un bit de parité. Le transfert entre l'ordinateur et la bande ne peut s'effectuer que lorsqu'elle défile à vitesse constante, en général 75 ips (inches par seconde), soit 190.5 cm/s, mais peut atteindre 200 ips, soit 5 m/s. La densité, exprimée en nombre d'octets par pouce (bpi pour byte per inch), déterminera d'une part la capacité totale de la bande, d'autre part le débit du transfert. Les densités les plus courantes actuellement sont, d'une part 1600 bpi, donnant une capacité totale de 44 Mo, et un débit de 120 Ko/s, d'autre part 6250 bpi, donnant une capacité totale de 172 Mo, et un débit de 500 Ko/s, mais pouvant atteindre 1.25 Mo/s. La vitesse de défilement devant être constante pendant le transfert, il faut mémoriser les informations par bloc de taille variable, les blocs successifs étant séparés par un espace inutilisable (gap) réservé au freinage et à l'accélération. Cet espace est en moyenne de 3/4 de pouce, soit 1.905 cm.
Constatons que les débits interdisent les entrées-sorties programmées. Par ailleurs le débit doit impérativement être respecté sous peine d'écritures d'informations erronées si l'ordinateur ne fournit pas un octet à temps en écriture, ou de perte d'informations si l'ordinateur ne mémorise pas un octet à temps en lecture. C'est pourquoi on utilise les entrées-sorties par accès direct à la mémoire ou par processeur spécialisé. Ce dernier offre l'avantage de permettre d'assurer toutes les reprises d'erreurs qui pourraient se produire, en recommençant éventuellement plusieurs fois l'opération.

2.6.3. Les périphériques de stockage aléatoire


Fig. 2.8. Disque magnétique.
Il s'agit essentiellement des disquettes, ou disques magnétiques. Bien des caractéristiques s'appliquent également aux disques optiques, mais nous n'en parlerons pas. Un disque est constitué d'un ou plusieurs plateaux tournant à vitesse constante autour de leur axe (on parle parfois d'une pile de disque). Chaque plateau est recouvert sur ses deux faces d'une couche magnétique. Des têtes de lecture/écriture sont fixées, à raison de une par face, sur un bras qui peut se déplacer perpendiculairement à l'axe. Pour une position du bras donnée, chaque tête peut lire ou écrire sur une circonférence du plateau qui la concerne, délimitant ainsi ce que l'on appelle une piste. L'ensemble des pistes vues par chaque tête, pour une position de bras donnée, s'appelle un cylindre. Enfin chaque piste est découpée en secteurs, qui contiennent chacun le même nombre d'octets (figure 2.8).
La structure même du disque impose que les opérations se fassent par secteurs complets. Par ailleurs, le débit est constant pour un disque donné, et est actuellement compris entre 250 Ko/s et 5 Mo/s. Comme il doit impérativement être respecté, il est nécessaire d'utiliser les entrées-sorties par accès direct à la mémoire ou par processeur spécialisé. Contrairement aux bandes magnétiques, ce dernier n'est pas essentiel pour la récupération d'erreurs qui sont peu fréquentes (et en général plus irrémédiables) sur les disques, mais peut prendre en charge une partie de la gestion du disque lui-même et des accès.
Les disquettes ont la même structure que les disques durs, mais le débit est beaucoup plus faible, puisqu'il est de l'ordre de 30 Ko/s. Ce débit est donc parfois compatible avec le mode d'échange programmé. Il faut noter cependant que lors de la lecture ou de l'écriture d'un secteur, le délai qui sépare le lancement de l'opération du transfert du premier octet, est aléatoire, et compris entre 0 et 300 ms, temps pendant lequel le transfert programmé impose au processeur de rester en boucle d'attente.

2.6.4. Les périphériques de communications entre machines

Lorsqu'on veut faire communiquer entre elles plusieurs machines, différentes solutions sont possibles. Nous nous intéressons ici aux communications entre machines hétérogènes et à distance moyenne ou longue. En effet un constructeur peut construire des dispositifs particuliers, entre deux accès directs à la mémoire, ou même partager la mémoire entre les machines, pour échanger des informations entre des machines de sa fabrication qui seraient situées dans la même pièce.
La communication entre machines sur des distances dépassant par exemple 100 mètres, pose d'abord le problème du coût du cable. Comme dans le cas des liaisons avec les écrans-claviers, la connexion est effectuée en utilisant des cables à 2 ou 4 fils. Cette communication pose ensuite le problème du “langage” utilisé, et que l'on appelle le protocole de communication. Initialement, chaque constructeur avait son propre protocole, ne permettant que la communication entre ses machines. Sous la pression des utilisateurs, et de divers organismes, des protocoles variés ont été normalisés par des instances internationales. Nous ne tentons ici que de donner quelques caractéristiques importantes de ces communications.
La notion de protocole consiste à encadrer l'information à transmettre, c'est-à-dire le contenu, par des informations qui construisent le protocole, et servent à véhiculer le contenu. Dans la description de la ligne série asynchrone, nous avons vu un exemple de protocole simple où l'octet était encadré par un bit start et des bits stops. Dans la communication entre machines les protocoles sont plus complexes, de façon à permettre des échanges complexes d'informations.
La première caractéristique est la transmission par paquet. L'ensemble des octets représentant l'information à transmettre est tout d'abord découpé en morceau, par exemple 250 octets. Chaque morceau est encadré par les informations du protocole permettant de le véhiculer, constituant un paquet. Les différents paquets sont transmis individuellement. A la réception des paquets, le récepteur en extrait le contenu, et utilise les informations du protocole pour reconstruire l'information. Intuitivement, le protocole doit permettre d'identifier l'émetteur, le récepteur, et un numéro d'ordre du paquet.
La deuxième caractéristique est la transmission du paquet à vitesse constante. On dit que la transmission est synchrone, car d'une part les horloges de l'émetteur et du récepteur sont synchronisées entre elles, d'autre part l'émetteur commence par transmettre en début de paquet une information permettant au récepteur de reconnaître le premier bit réel du paquet, et de faire le regroupement des bits des octets 8 par 8.
La troisième caractéristique est la complexification de l'ensemble de la transmission entre deux machines qui résulte de l'abandon des liaisons point à point par des lignes spécialisées au profit de l'interconnexion globale de l'ensemble des machines de la planète. Ceci a conduit à la définition du modèle OSI (Open Systems Interconnexion) qui découpe la communication en 7 couches, chacune d'elle étant chargée d'une tâche spécifique, comme par exemple, la couche réseau chargée du routage des paquets ou la couche transport chargée de segmenter les messages en paquet lors de l'émission et de recomposer les messages à partir des paquets lors de la réception.
Les débits actuels sont importants, puisqu'ils sont couramment de 200 Ko/s, mais ils peuvent atteindre plusieurs dizaines de Mo/s, sur des réseaux locaux comme sur des réseaux à longue distance. Il est évident que de tels débits nécessitent d'utiliser soit l'accès direct à la mémoire, soit le processeur spécialisé d'entrées-sorties, la complexité des protocoles et leur normalisation lui faisant souvent préférer ce dernier.

2.6.5. Les périphériques et le système

Il ressort de l'étude des caractéristiques des différents périphériques une très grande diversité de fonctionnement, de mode de liaison, de vitesse de transfert. Programmer sur une machine nue implique la connaissance de cette diversité, et la spécialisation du programme à une configuration particulière. L'un des rôles essentiels du système d'exploitation, et de son constituant particulier le superviseur d'entrées-sorties, est de prendre en compte cette diversité pour en décharger le programmeur. Le système fournira au programmeur un nombre limité d'interfaces standards et uniformes.

2.7. Conclusion

+ Un ordinateur est constitué d'un bus qui relie les divers organes, d'un processeur, d'une mémoire centrale et de périphériques.
+ Un processeur est constitué d'une unité arithmétique et logique, de registres et d'un décodeur-séquenceur qui le contrôle. Il lit en mémoire l'intruction située à l'adresse définie par le compteur ordinal, l'exécute, puis recommence. Son langage est binaire.
+ Les entrées-sorties programmées sont obtenues par un programme qui effectue le transfert des informations entre la mémoire et un périphérique, une par une.
+ L'accès direct à la mémoire est un dispositif qui assure le transfert des informations entre la mémoire et un périphérique par vol de cycle.
+ La prise en compte d'une interruption par le processeur consiste à ranger en mémoire le mot d'état programme et à le remplacer par un nouveau. Le compteur ordinal fait partie de ce mot d'état programme. Le reste du contexte doit être sauvegardé par le sous-programme d'interruption, pour permettre sa restitution en fin d'exécution de ce sous-programme.
+ Le masquage des interruptions est le mécanisme qui permet au logiciel de contrôler la prise en compte des interruptions par le processeur.
+ Le processeur peut travailler selon le mode maître ou le mode esclave dans lequel certaines instructions sont interdites. Des instructions spéciales d'appel superviseur permettent de changer de mode de façon contrôlée.
+ Les périphériques de dialogue homme-machine, lorsqu'ils sont simples, peuvent être gérés par des transferts programmés, éventuellement régis par interruption. Cependant lorsque leur nombre augmente sur une même machine, la charge de traitement peut nécessiter l'utilisation de processeurs spécialisés appelés frontaux. Par ailleurs, dans les stations de travail, l'affichage est le résultat de modifications du contenu de la mémoire partagée par le dispositif de balayage vidéo.
+ Les périphériques magnétiques, bandes ou disques, nécessitent l'utilisation soit de l'accès direct à la mémoire, soit d'un processeur spécialisé d'entrées-sorties. Ce dernier a l'avantage de permettre de décharger le processeur principal d'une partie de la gestion du périphérique.
+ La communication entre machines utilise des protocoles normalisés, qui permettent de s'affranchir des contraintes matérielles et prendre en compte la complexité du réseau d'interconnexion. L'information est découpée par l'émetteur en paquets indépendants, et reconstruite par le récepteur à l'aide du protocole.
+ L'une des fonctions du système est de décharger le programmeur du souci de la diversité des périphériques, par la fourniture d'un nombre limité d'interfaces standards et uniformes.


[1] Une pile est une structure de données permettant la conservation d'informations, de telle sorte que les informations sont enlevées de la structure dans l'ordre inverse où elles y ont été mises.
[2] À moins d'utiliser pour la sauvegarde des contextes successifs, mais se pose alors le problème de la taille de cette pile.
[3] Rappelons que le pouce (Inch) est une mesure de longueur anglaise, qui vaut 2.54 centimètres, tout comme le pied, qui vaut 12 pouces, soit 30.48 centimètres.