SYSTÈMES D’EXPLOITATION
Notes de cours 2004-2005
Pr. Omar Megzari Faculté des Sciences de Rabat, Département de Mathématiques
et d’Informatique Rabat
1 INTRODUCTION 6
2 BIBLIOGRAPHIE .. 9
3 L ORDINATEUR . 12
3.7.1 Le fonctionnement interne . 15
3.7.2 La lecture et l’Øcriture . 15
3.9.1 La composition d’un CD-ROM 17
3.9.2 Le lecteur de CD-ROM .. 18
3.9.3 Ses caractØristiques .. 18
3.10 LEDVD-ROM .. 18
3.10.2 Les zones . 20
3.12.1 La prØparation des donnØes 21
3.12.2 Le r le d’identificateur . 22
3.12.3 Les autres fonctions de la carte rØseau . 22
3.12.4 Envoi et contr le des donnØes 22
3.13.1 Le clavier 23
3.13.2 La souris .. 23
3.13.3 Le numØriseur 23
3.13.4 La camØra numØrique 23
3.14.1 L’Øcran ou le moniteur .. 24
3.14.2 Le moniteur couleur 24
3.14.3 Les moniteurs cristaux liquides . 25
3.14.4 Les caractØristiques 25
3.14.5 L’imprimante . 25
3.14.6 L’imprimante marguerite . 26
3.14.7 L’imprimante matricielle .. 26
3.14.8 L’imprimante jet d’encre .. 26
3.14.9 L’imprimante laser .. 27
3.17.1 Les modems 56 Kbit/s 28
3.17.2 PrØsentation du RNIS 28
3.17.3 Fonctionnement du RNIS . 28
3.18.1 Quel est le besoin d’une ligne spØcialisØe? .. 28
3.18.2Le prix d’une ligne spØcialisØe .. 283.18.3La liaison Internet par c ble .. 283.18.4Les avantages 29
3.18.5 Le matØriel nØcessaire une liaison par c ble .. 29
3.18.6 L’ADSL . 29
3.18.7 ADSL . 30
3.18.8 La fibre optique 30
3.18.9 Le satellite .. 30
3.18.10 Les ondes hertziennes 30
3.18.11 Le rØseau Ølectrique .. 31
3.18.12 Le rØseau Ethernet .. 31
4 LES PROCESSUS . 33
4.1.1 GØnØralitØs 33
4.1.2 Les processus sous Unix . 37
4.2.1 Les tubes de communication avec Unix .. 41
4.2.2 Les messages 42
4.3.1 Le tourniquet 44
4.3.2 Les prioritØs . 44
4.3.3 Le tourniquet avec prioritØs . 44
4.3.4L ordonnancement des fils d exØcution 455LA MEMOIRE .. 46
5.1.1 La multiprogrammation .. 46
5.1.2 Les registres matØriels . 47
5.2.1 Production d un programme . 47
5.2.2 Principes de gestion . 47
5.3.1 tat de la mØmoire 48
5.3.2 Politiques d allocation 49
5.3.3 LibØration . 50
5.3.4 La rØcupØration de mØmoire . 50
5.7.1 PrØsentation . 54
5.7.2 Algorithmes de remplacement de pages .. 55
5.7.3 Autres considØrations .. 55
6 LE SYSTEME DE FICHIERS .. 57
6.1.1 Une dØfinition . 57
6.1.2 La structure d un systŁme de fichiers 58
6.1.3 AccŁs aux ØlØments d un fichier . 59
6.3.1 La liste cha nØe .. 61
6.3.2 La table d index . 62
6.4.1 Les rØpertoires du systŁme MS-DOS . 63
6.4.2 Les rØpertoires d Unix . 64
6.4.3 Structure et manipulation des n ud d index . 64
6.4.4 Le partage de fichiers par liens avec Unix 65
6.5LA MEMOIRE CACHE . 65 6.6LA STRUCTURE PHYSIQUE D UN DISQUEUNIX 66 6.7 LA STRUCTURE LOGIQUE D UN DISQUEUNIX .. 66 6.8 REPARER LE SYSTEME DE FICHIER .. 67
7 LES ENTREES-SORTIES .. 69
7.1.1 GØnØralitØs 69
7.1.2 Les contr leurs 69
7.1.3 Un exemple simple de fonctionnement : Øcrire sur un disque 71
7.1.4L accŁs direct la mØmoire . 717.2LES FONCTIONSUNIX .. 71
Ce cours présente les principaux points théoriques du fonctionnement des systèmes d’exploitation. Il les illustre par un certain nombre d’exemples de mise en œuvre qu’il tire essentiellement du système Unix et accessoirement de Windows.
L’histoire de l’informatique est très brève – les ordinateurs sont nés avec la seconde guerre mondiale – et pourtant, elle a connu des grandes évolutions. À leur apparition, les ordinateurs étaient très coûteux et réservés aux grandes entreprises; celles-ci n’en possédaient au départ que quelques exemplaires. Ces ordinateurs « centraux » sont rapidement devenu un auxiliaire d’administration et ils se sont diffusés dans les différents services (departments en anglais) : financier, comptabilité, etc. Pour rendre l’informatique plus adaptée et plus abordable, des fabricants se sont alors mis à produire des mini-ordinateurs « départementaux ». Ces ordinateurs fonctionnaient avec des systèmes d’exploitation qui leur étaient propres, à chaque machine ou à chaque constructeur, par exemple, MVS pour IBM ou VMS pour DEC.
Aujourd’hui, l’informatique, aussi bien dans les entreprises, que dans la recherche ou l’enseignement, utilise des machines plus petites, fonctionnant avec des systèmes d’exploitation à caractère universel. Parmi ces systèmes d’exploitation, deux se distinguent particulièrement, un système mono-utilisateur, Windows, et un autre multiutilisateurs et multitâches, Unix. D’une manière grossière – et contestable avec l’apparition des réseaux – on peut affirmer que le premier système est destiné à des ordinateurs individuels, tandis que l’autre est réservé au travail en groupe. Les systèmes actuels gèrent, par ailleurs une interface graphique, avec comme pionnier le Finder du Macintosh. Les systèmes d’exploitation actuels ont intégré de façon généralisée le multitâches et le service à plusieurs utilisateurs avec la généralisation des architectures client-serveur, par exemple avec OS/2 d’IBM et Windows/NT.
Parmi ces systèmes, Unix, qui est le plus ancien, est celui qui offre le plus de richesses, le plus d’homogénéité et le plus de souplesse; il dispose, dans les versions standards, d’extensions pour les réseaux et pour le graphique. Pour cette raison, nous l’avons choisi comme le centre de ce cours. Par ailleurs, le système MS-DOS puis Windows, en évoluant, ont incorporé beaucoup de caractéristiques de leur prédécesseur. Les noyaux de ces systèmes se modifieront certainement avec l’évolution des techniques. Cependant, les principes sur lesquels ils se fondent, et à plus forte raison, leur « décor », devraient rester relativement stables, au moins pour les quelques années à venir.
L’étude des systèmes d’exploitation forme une part très importante de l’informatique comme discipline et, à la différence des ses autres domaines, c’est une part qui lui est propre. Ceci au contraire de l’algorithmique ou de la logique, par exemple, qui se partagent avec les mathématiques. C'est aussi une discipline technique qui plus encore que les autres est sujette au renouvellement.
On peut diviser les systèmes d’exploitation classiques en quatre parties principales :
1. Les processus, qui correspondent à l’exécution des programmes. Ces processus pouvant s’exécuter simultanément dans un système multitâche. Le système a pour fonction de les créer, de les gérer, de les synchroniser, ainsi que de leur permettre de communiquer entre eux;
2. La gestion de la mémoire, qui permet de transférer les programmes et les données nécessaires à la création des processus, d’un support secondaire, par exemple un disque, vers un support central, où a lieu l’exécution des processus. Le système devra garder la trace des parties utilisées et libres de la mémoire ainsi que gérer les transferts entre les mémoires principale et secondaire;
3. Le système de fichiers, qui offre à l’utilisateur une vision homogène et structurée des données et des ressources : disques, mémoires, périphériques. Le système gère la création des fichiers, leur destruction, leur correspondance avec les dispositifs physiques, ainsi qu’un certain nombre d’autres caractéristiques, telles que la protection. Il les organise enfin, en général, en une structure arborescente;
4. Lesentrées-sorties, qui correspondent aux mécanismes qu’utilisent les processus pour communiquer avec l’extérieur. Ces entrées-sorties font largement appel aux couches les plus proches du matériel, et dont le système tente de masquer les particularités aux utilisateurs.
Les systèmes d’exploitation modernes intègrent par ailleurs d’autres caractéristiques. Ces dernières concernent notamment deux évolutions majeures des systèmes informatiques. La première est l’interconnexion des différentes machines et des différents systèmes par des réseaux locaux ou étendus. La seconde est la disparition des écrans de textes et leur remplacement par des dispositifs à fenêtres multiples disposant de propriétés graphiques. Ces deux techniques sont, de plus, étroitement imbriquées. Les systèmes d’exploitation fonctionnent donc, ou vont fonctionner, en réseau et ils consacreront une part importante de leurs tâches à gérer le fenêtrage, le graphisme, et les interactions entre les différentes machines. Ce cours complète les 4 parties précédentes par des études sur :
5. Les réseaux d’ordinateurs, avec les protocoles de communication, d’interconnexion et d’application. Les réseaux permettent de mettre en œuvre une nouvelle architecture informatique fondée sur des clients et des serveurs;
6. Les systèmes répartis avec les protocoles d’appels de procédures à distance qui leur sont associés. Les systèmes répartis actuels trouvent des applications à des architectures clients-serveurs de fichiers ou d'applications, tels que des bases de données.
7. Les systèmes de fenêtrage graphique, ainsi que le modèle de serveur d’écran.
Le système d’exploitation correspond à l’interface entre les applications et le matériel. Le programmeur d’applications n’aborde que rarement – sinon jamais – son code interne. Il l’utilise par l’intermédiaire d’« appels système ». Les appels systèmes sont souvent accessibles à partir d’un langage de programmation, notamment en C avec le système Unix. Ces appels permettent d’effectuer la plupart des opérations sur les entités du système d’exploitation et, par exemple, de créer et détruire des processus, des fichiers, de réaliser des entrées-sorties, etc. Une terminologie tend à s’imposer pour dénommer l’ensemble des appels système, qu’ils concernent un système d’exploitation ou n’importe quelle d’application informatique : les API (Application Programming Interface).
Un utilisateur peut lui aussi – dans une certaine mesure – manipuler un système d’exploitation, sans pour autant avoir à créer un programme. Il le fait par l’intermédiaire d’un interprète de commandes (un « shell » en anglais) muni d’une syntaxe et éventuellement programmable. Cet interprète peut accepter les lignes de commandes comme sous MS-DOS ou sous Unix. Il peut aussi gérer les « métaphores » graphiques comme avec les Macintoshes, Windows ou X-Window.
La bibliographie sur les systèmes d’exploitation est très abondante et elle se renouvelle très rapidement. Elle comprend à la fois des revues de recherche, des ouvrages pédagogiques et des ouvrages sur la programmation et l'utilisation d'un système particulier. La liste que nous donnons n’est absolument pas exhaustive. Par ailleurs, cette recherche est largement passée des laboratoires universitaires à ceux de quelques industriels : Microsoft et IBM notamment. Notre liste fournit seulement les références que nous pensons être les plus utiles.
Littérature générale sur les systèmes d’exploitation
A. Tanenbaum, Modern Operating Systems, Prentice–Hall, 1992, est une référence générale très pédagogique. Distributed Computer Systems, Prentice Hall, 1994, examine plus en détail les systèmes répartis. Operating Systems, 2nd ed., PrenticeHall,1997, est une référence par le même auteur qui comprend le code, très formateur, d’un système d’exploitation voisin d’Unix. Cette édition ne comprend pas les systèmes répartis.
A. Silberschatz and P. Galvin, Operating System Concepts, 5th ed., Addison Wesley, 1997, est un ouvrage plus conceptuel et plus théorique que le précédent. Il reste néanmoins très clair. Il est traduit en français chez Addison-Welsey sous le titre Principes des systèmes d’exploitation mais peut être pas l’édition la plus récente.
Sur les noyaux de systèmes d’exploitation commerciaux
M. Bach, La conception du système Unix, Masson, a longtemps été l’ouvrage de référence. Sa rédaction est extrêmement lourde – à éviter après le dessert – et elle est doublée d’une traduction maladroite. Cet ouvrage est cependant une mine de renseignements pour ceux qui veulent connaître les algorithmes internes d’Unix en détail.
L’ouvrage qui précède a inspiré les firmes conceptrices d’autres systèmes. Ceci a donné lieu à plusieurs ouvrages, en général plus clairs et mieux écrits que leur ancêtre :
• H.M Deitel et M.S. Kogan, La conception d’OS/2, Addison-Wesley, 1992.
• Helen Custer, Au cœur de Windows NT, Microsoft Press, 1993.
Sur la programmation des systèmes d’exploitation
Le man d’Unix est la meilleure référence pour le programmeur. Il n’y a rien d’équivalent sur papier.
J.M. Rifflet, La programmation sous Unix, 3e éd., McGraw-Hill, 1993, est une bonne référence et un ouvrage assez complet.
Charles Petzold, Programming Windows 95, Microsoft Press, 1996, est une bonne référence pour apprendre la programmation Windows. Elle a été la première du genre. Actuellement, il y a des dizaines d’ouvrages équivalents.
Apple Computer, Inside Macintosh Series, Addison-Wesley, 1992, 1993, 1994, est une série traitant des caractéristiques du Macintosh. Elle détaille aussi bien les mécanismes internes que les méthodes de programmation.
Sur l’utilisation du système Unix
R.S. Bourne, Le système Unix, InterEditions, est une référence antique, mais qui reste un modèle de clarté. L’auteur est le concepteur du premier interprète de commande d’Unix. La traduction comprend beaucoup de fautes, par exemple dans les listings de programmes.
B. Kernighan et R. Pike, L’environnement Unix, InterEditions, s’axe plutôt sur les outils d’Unix. Il est plus difficile à lire que le précédent et il privilégie parfois la « bidouille » info-maniaque.
J.L. Nebut, Unix pour l’utilisateur : Commandes et langages de commandes, Technip, 1990, est une bonne référence sur les outils d’Unix.
11
De nos jours, l ordinateur est devenu un outil d usage courant. Mais comment fonctionne cette machine si intrigante? Sans instruction pour le faire fonctionner, l ordinateur est une grosse bo te de mØtal et de plastique qui ne sert rien. Tout comme n importe quel appareil mØnager, l ordinateur a besoin d instructions. Elles lui sont transmises par le clavier ou la souris. Tout comme vous conduisez une voiture sans en ma triser chaque ØlØment mØcanique, il n est pas nØcessaire de tout conna tre sur le fonctionnement d une voiture pour Œtre capable de l utiliser. L ordinateur est une machine qui traite des informations (des textes, des photos, des images) par l intermØdiaire de ses circuits Ølectroniques et de ses programmes informatiques.
Pour transfØrer ces informations l ordinateur, nous utilisons des accessoires tels que le clavier, la souris, le numØriseur et la camØra numØrique. Nous les appelons des pØriphØriques d entrØe.
Pour bien percevoir les informations transfØrØes et Œtre capables d en apprØcier les modifications, nous utilisons des pØriphØriques de sortie tels que l Øcran et l imprimante.
Pour que l ordinateur puisse intØgrer les informations qui lui sont envoyØes, il faut qu il puisse les comprendre. Pour ce, il faudra qu elles soient modifiØes en langage machine. En fait, si nous appuyons sur une touche du clavier, l ordinateur recevra une sØrie d impulsions Ølectriques. Ces impulsions seront interprØtØes par l ordinateur sous forme de sØries de (0 et 1) qui compose le langage informatique. Ces impulsions, ou chiffres, sont appelØes des «bits».
En appuyant sur une touche, le clavier envoie sous forme d’impulsions Ølectriques, une sØrie de 0 et de 1, toujours en nombre exact de huit, que l on appelle des octets. La lettre B, par exemple, est convertie en une sØrie de huit chiffres : 01000010.
L’origine du mot «ordinateur» vient de la firme IBM. Celle-ci demanda en 1954 un professeur de lettres Paris de trouver un mot pour dØsigner ce que l’on appelait vulgairement un «calculateur» (traduction littØrale de computer en anglais). Toute machine capable de manipuler des informations binaires (0 et 1) peut Œtre qualifiØe d’ordinateur.
Si nous excluons les pØriphØriques d entrØe et de sortie, que nous avons briŁvement ØnumØrØs auparavant, un ordinateur est composØ :
• d’une unitØ centrale (le bo tier);
• de pØriphØriques internes (cartes de son, carte vidØo, );
• d’un lecteur de disquettes, d’un lecteur de CD-ROM ou de DVDROM;
• Øventuellement, de cartes d’extension diverses,
SchØma d’une carte mŁre :
La carte mŁre est le principal constituant de l’ordinateur. C’est sur cette carte que sont connectØs les autres ØlØments :
• Le microprocesseur (cerveau de l’ordinateur);
• La mØmoire (RAM : Random Access Memory, la mØmoire cache); • Le disque dur, le lecteur de CD-ROM, le lecteur de disquettes; • Les pØriphØriques internes : carte de son, carte vidØo.
Le premier microprocesseur (Intel 4004) a ØtØ inventØ en 1971. Depuis, la puissance des microprocesseurs augmente exponentiellement. Quels sont donc ces petits morceaux de silicium qui dirigent nos ordinateurs?
Le processeur (CPU) est le cerveau de l’ordinateur, c’est lui qui coordonne le reste des ØlØments, il se charge des calculs, bref, il exØcute les instructions qui ont ØtØ programmØes. Toutes ces opØrations sont des informations numØriques. Les microprocesseurs utilisent des petits transistors pour faire des opØrations de base; il y en a plusieurs millions sur un seul processeur.
Les principaux ØlØments d’un microprocesseur sont :
• une horloge qui rythme le processeur. chaque TOP d’horloge, le processeur effectue une instruction. Ainsi plus l’horloge a une frØquence ØlevØe, plus le processeur effectue d’instructions par seconde (MIPS : Millions d’instruction par seconde). Par exemple un ordinateur ayant une frØquence de 100 mØgahertz (MHz) effectue 100 000 000 d’instructions par seconde;
• une unitØ de gestion des bus qui gŁre les flux d’informations entrant et sortant;
• une unitØ d’instruction qui lit les donnØes, les dØcode puis les envoie l’unitØ d’exØcution;
• une unitØ d’exØcution accomplit les t ches donnØes par l’unitØ d’instruction.
Le processeur travaille, en fait, gr ce un nombre trŁs limitØ de fonctions comme des expressions logiques (ET, OU, NON, etc.), des expressions mathØmatiques (addition, soustraction, multiplication, etc.). Celles-ci sont directement c blØes sur les circuits Ølectroniques. Il est impossible de mettre toutes les instructions sur un processeur car celui-ci est limitØ par la taille de la gravure. Ainsi pour mettre plus d’instructions il faudrait un processeur ayant une trŁs grande surface. Or le processeur est constituØ de silicium et celui-ci coßte cher, et d’autre part il chauffe beaucoup. Le processeur traite donc les informations compliquØes l’aide d’instructions simples.
La mØmoire cache permet au processeur de se «rappeler» les opØrations dØj effectuØes auparavant. Elle est utilisØe par le microprocesseur pour conserver temporairement des instructions ØlØmentaires. En effet, elle stocke les opØrations effectuØes par le processeur, afin que celui-ci ne perde pas de temps recalculer des calculs dØj faits prØcØdemment. La taille de la mØmoire cache est gØnØralement de l’ordre de 512 kilo-octets (Ko).
La mØmoire vive, gØnØralement appelØe RAM (Random Access Memory, traduisez mØmoire accŁs alØatoire) ce qui signifie que l’on peut accØder instantanØment n’importe quelle partie de la mØmoire, permet de stocker des informations pendant tout le temps de fonctionnement de l’ordinateur. Par contre, cette mØmoire est dØtruite lors de la mise hors-tension de l’ordinateur, contrairement une mØmoire de masse comme le disque dur qui garde les informations mŒme lorsqu’il est hors tension. La mØmoire vive contient les donnØes et les instructions des applications en cours.
MØmoire permanente contenant des microprogrammes enregistrØs sur des puces Ølectroniques de la carte mŁre (ou mother board) contenant les routines de dØmarrage du micro-ordinateur. ROM (Read Only Memory, dont la traduction est mØmoire en lecture seule) est appelØe aussi parfois mØmoire non volatile, car elle ne s’efface pas lors de la mise hors tension du systŁme. En effet, ces informations ne peuvent Œtre stockØes sur le disque dur Øtant donnØ que les paramŁtres du disque (essentiels son initialisation) font partie de ces donnØes vitales l’amor age.
Les fentes ou «slots» d’extension sont des rØceptacles dans lesquels on peut enficher des cartes. Il en existe de trois types : les cartes ISA (les plus lentes fonctionnant en 16 bits), les cartes PCI (beaucoup plus rapides fonctionnant en 32 bits), et les cartes AGP (les plus rapides). Ils se branchent, gr ce des nappes, sur les broches prØvues cet effet sur la carte mŁre.
Le disque dur est l’organe du PC servant conserver les donnØes de maniŁre permanente, contrairement la RAM, qui s’efface chaque redØmarrage de l’ordinateur. Il a ØtØ inventØ au dØbut des annØes 50 par IBM.
Un disque dur est constituØ non pas d’un seul disque, mais de plusieurs disques rigides (en anglais hard disk signifie disque dur) en mØtal, en verre ou en cØramiques empilØs les uns aprŁs les autres une trŁs faible distance les uns des autres. Ils tournent trŁs rapidement autour d’un axe ( plusieurs milliers de tours par minute actuellement) dans le sens inverse des aiguilles d’une montre. Un ordinateur fonctionne de maniŁre binaire. Il faut donc stocker les donnØes sous forme de 0 et de 1. C’est pourquoi les disques sont recouverts d’une trŁs fine couche magnØtique de quelques microns d’Øpaisseur, elle-mŒme recouverte d’un film protecteur.
La lecture et l’Øcriture se font gr ce des tŒtes (head) situØes de part et d’autre de chacun des plateaux (un des disques composant le disque dur). Ces tŒtes sont des Ølectroaimants qui se baissent et se soulŁvent (elles ne sont qu’ quelques microns de la surface, sØparØes par une couche d’air provoquØe par la rotation des disques qui crØe un vent d’environ 250 km/h) pour pouvoir lire l’information ou l’Øcrire. De plus ces tŒtes peuvent balayer latØralement la surface du disque pour pouvoir accØder toute la surface
Cependant, les tŒtes sont liØes entre-elles et seulement une seule tŒte peut lire ou Øcrire un moment donnØ. On parle donc de cylindre pour dØsigner l’ensemble des donnØes stockØes verticalement sur la totalitØ des disques.
L’ensemble de cette mØcanique de prØcision est contenu dans un bo tier totalement hermØtique, car la moindre particule peut dØtØriorer l’Øtat de surface du disque. Vous pouvez donc voir sur un disque des opercules permettant l’ØtanchØitØ, et la mention "Warranty void if removed" qui signifie littØralement "la garantie expire si retirØ", seul les fabricants peuvent en vØrifier le contenu ( l intØrieur de salles blanches : exemptes de particules).
Les tŒtes de lecture/Øcriture sont dites "inductives", c’est- -dire qu’elles sont capables de gØnØrer un champ magnØtique. C’est notamment le cas lors de l’Øcriture, les tŒtes en crØant des champs positifs ou nØgatifs viennent polariser la surface du disque en une trŁs petite zone, ce qui se traduira lors du passage en lecture par des changements de polaritØ induisant un courant dans la tŒte qui sera ensuite transformØs par un convertisseur analogique numØrique (CAN) en 0 et en 1 comprØhensibles par l’ordinateur.
Les tŒtes commencent inscrire des donnØes la pØriphØrie du disque (piste 0), puis avancent vers le centre. Les donnØes sont organisØes en cercles concentriques appelØs "pistes", crØØes par le formatage de bas niveau.
Les pistes sont sØparØes en quartiers (entre deux rayons) que l’on appelle secteurs, c’est la zone dans laquelle on peut stocker les donnØes (512 octets en gØnØral).
On appelle cylindre l’ensemble des donnØes situØes sur une mŒme pistes de plateaux diffØrents (c’est- -dire la verticale les unes des autres) car cela forme dans l’espace un "cylindre" de donnØes.
On appelle cluster la zone minimale que peut occuper un fichier sur le disque. En effet le systŁme d’exploitation exploite des blocs qui sont en fait plusieurs secteurs (entre 1 et 16 secteurs). Un fichier minuscule devra donc occuper plusieurs secteurs (un cluster).
ConstituØe d’une rondelle de plastique souple recouverte d’un carrØ de plastique dur pour la protØger, la disquette pour avantage d’Œtre amovible, c’est- -dire que l’on peut l’insØrer et l’enlever du lecteur trŁs facilement. Elle existe principalement en deux formats: 720 Ko et 1,44 Mo.
Pour protØger la disquette, c est- -dire Œtre certain de ne pas en effacer le contenu, il faut rabattre, de cette fa on, la petite piŁce de plastique.
Il utilise des disques portatifs de grande capacitØ au format pratique, de plus en plus utilisØ pour la vente de logiciels. Il remplacera le lecteur de disquettes dans les prochaines annØes. Le CD-ROM (Compact Disc - Read Only Memory) est un disque optique de 12 cm de diamŁtre et de 1mm d’Øpaisseur, permettant de stocker des informations numØriques, c’est- dire correspondant 650 Mo de donnØes informatiques (correspondant 300000 pages dactylographiØes) ou bien jusqu’ 78 min de donnØes audio. Le Compact Disc a ØtØ inventØ par Sony ' et Philips '.
Le CD est constituØ de matiŁre plastique, recouvert d’une fine pellicule mØtallique d aluminium sur une des faces. Les pistes sont gravØes en spirales, ce sont en fait des alvØoles d’une profondeur de 125nm et espacØes de 1,6 . Ces alvØoles forment un code binaire, une alvØole correspond un 0, un espace un 1.
Exemple : prenons la sØquence suivante : 110010101. Celle-ci correspond sur le CD-ROM deux espaces, deux trous, un espace, un trou, un espace, un trou, un espace.
On a ainsi une sØquence binaire que le lecteur parcourt gr ce un laser ; celui-ci est rØflØchi lorsqu’il rencontre un espace, il ne l’est pas lorsqu’il rencontre une alvØole.
C’est une cellule photoØlectrique qui permet de capter le rayon rØflØchi, gr ce un miroir semirØflechissant comme expliquØ sur le dessin suivant :
Un chariot permet de dØplacer le miroir de fa on pouvoir accØder au CD-ROM en entier. Il est ainsi possible de stocker sur ce support des musiques, des images, des vidØos, du texte et tout ce qui peut Œtre enregistrØ de fa on numØrique.
Le lecteur CD-ROM est caractØrisØ :
• Par sa vitesse : celle-ci est calculØe par rapport la vitesse d’un lecteur de CD-Audio (150 Ko/s). Un lecteur pouvant atteindre la vitesse de 3000 Ko/s sera caractØrisØ de 20X (20 fois plus vite qu’un lecteur 1X)
• Par son temps d’accŁs, on dØfini le temps moyen que le lecteur prend pour atteindre une partie du CD une autre.
Le DVD-ROM (Digital Versatile Disc - Read Only Memory) est une variante du CD-ROM dont la capacitØ est largement plus grande. En effet, les alvØoles du DVD sont beaucoup plus petite (0,4 et un espacement de 0.74 ), impliquant un laser avec une longueur d’onde beaucoup plus faible.
Les DVD existent en version "double couche", ces disques sont constituØs d’une couche transparente base d’or et d’une couche rØflexive base d’argent. Dans le but de lire ces deux couches, le lecteur dispose d’un laser deux intensitØs :
• une intensitØ faible ; le rayon se rØflØchit sur la surface dorØe
• une plus grande intensitØ permet au rayon de traverser la premiŁre couche et de se rØflØchir sur la surface argentØe.
Il existe 4 types de DVD diffØrents :
3.10.1.1.1.1.1.1.1 Type de supp ort | 3.10.1.1.1.1.1.1.2 Capacit Ø | 3.10.1.1.1.1.1.1.3 Temps musical Øquival ent | 3.10.1.1.1.1.1.1.4 Nombre de CD Øquival ent |
CD | 650Mo | 1h18 min | 1 |
DVD simple face simple couche | 4.7Go | 9 h 30 | 7 |
DVD simple face double couche | 8.5Go | 17 h 30 | 13 |
DVD double face simple couche | 9.4Go | 19 h | 14 |
DVD double face double couche | 17Go | 35 h | 26 |
L’intØrŒt du DVD touche en prioritØ le stockage vidØo qui demande beaucoup plus d’espace. Un DVD de 4,7 Go permet de stocker plus de deux heures de vidØo compressØes en MPEG-2 (Motion Picture Experts Group), un format qui permet de compresser les images tout en gardant une trŁs grande qualitØ d’image.
Les DVD VidØo sont con us pour n’Œtre consultables que dans certaines rØgions du monde : c’est le dØcoupage en zone (qui "empŒche" le piratage). Il est ainsi thØoriquement impossible de lire un DVD d’une zone en Øtant dans une autre. Heureusement, les lecteurs de DVD pour PC peuvent les lire gr ce des utilitaires.
Les premiers graveurs de DVD sont apparus il y a peu de temps. Le seul frein est l’existence de deux normes concurrentes et incompatibles :
• DVD-RAM de Toshiba ' et Matsushita ' stockant 2.6 Go
• DVD-RW de Sony ', Philips ' et HP ' stockant 3 Go Les deux normes permettent de rØinscrire des donnØes jusqu’ 1000 fois.
Le morse a ØtØ le premier codage permettre une communication longue distance. C’est Samuel F.B.Morse qui l’a mis au point en 1844. Ce code est composØ de points et de tirets (un langage binaire en quelque sorte). Il permettait d’effectuer des communications beaucoup plus rapides que le Pony Express. L’interprØteur Øtait l’homme l’Øpoque, il fallait toutefois une bonne connaissance du code.
De nombreux codes furent inventØs dont le code d’ mile Baudot (portant d’ailleurs le nom de code Baudot, les anglais l’appelaient Murray Code).
Le 10 mars 1876, le Dr Graham Bell met au point le tØlØphone, une invention rØvolutionnaire qui permet de faire circuler de l’information vocale dans des lignes mØtalliques.
Ces lignes permirent l’essor des tØlescripteurs, des machines permettant de coder et dØcoder des caractŁres gr ce au code Baudot (Les caractŁres Øtaient alors codØs sur 5 bits, il y avait donc 32 caractŁres uniquement ).
Dans les annØes 60, le code ASCII (American Standard Code for Information Interchange) est adoptØ comme standard. Il permet le codage de caractŁres sur 8 bits, soit 256 caractŁres possibles.
Gr ce aux techniques de numØrisation et de modulation autour de 1962 ainsi que de l’essor des ordinateurs et des communications, le transfert de donnØes via modem vit le jour.
Le modem est le pØriphØrique utilisØ pour transfØrer des informations entre plusieurs ordinateurs (2 la base) via les lignes tØlØphoniques. Les ordinateurs fonctionnent de fa on digitale, ils utilisent le langage binaire (une sØrie de zØros et de uns), mais les modems sont analogiques. Les signaux digitaux passent d’une valeur une autre, il n’y a pas de milieu, de moitiØ, c’est du Tout Ou Rien (un ou zØro). L’analogique par contre n’Øvolue pas "par pas", il couvre toutes les valeurs. ainsi vous pouvez avoir 0, 0.1, 0.2, 0.3 1.0 et toutes les valeurs intermØdiaires.
Un piano par exemple marche plus ou moins de fa on analogue car il n’y a pas "de pas" entre les notes. Un violon par contre peut moduler ses notes pour passer par toutes les frØquences possibles.
Un ordinateur fonctionne comme un piano, un modem comme un violon. Le modem convertit en analogique l’information binaire provenant de l’ordinateur. Il envoie ensuite ce nouveau code dans la ligne tØlØphonique. On peut entendre des bruits bizarres si on le volume du son provenant du modem.
Ainsi, le modem module les informations numØriques en ondes analogiques; en sens inverse il dØmodule les donnØes numØriques.
C’est pourquoi modem est l’acronyme de MOdulateur/DEModulateur.
La carte rØseau est utilisØe d interface physique entre l ordinateur et le c ble. Elle traite les donnØes Ømises par l ordinateur, elle les transfŁre et contr le le flux de donnØes entre l ordinateur et le c ble. Elle traduit aussi les donnØes venant du c ble en octets de fa on que l UnitØ Centrale de l ordinateur puisse les comprenne. Enfin, la carte rØseau s’insŁre dans un connecteur d extensions (slot).
Les donnØes se dØplacent dans l ordinateur en empruntant des chemins appelØs « Bus ». Plusieurs chemins c te c te font que les donnØes se dØplacent en parallŁle et non en sØrie (les unes la suite des autres).
• Les premiers bus fonctionnaient en 8 bits (8 bits de donnØes transportØs la fois)
• L ordinateur PC/AT d IBM introduit les premiers bus 16 bits
• Aujourd hui, la majoritØ des bus fonctionnent en 32 bits
Toutefois sur un c ble les donnØes circulent en sØrie (un seul flux de bits), en se dØpla ant dans un seul sens. L ordinateur peut envoyer OU recevoir des informations mais il ne peut pas effectuer les deux simultanØment. Ainsi, la carte rØseau restructure un groupe de donnØes arrivant en parallŁle en donnØes circulant en sØrie (1 bit).
Pour cela, les signaux numØriques sont transformØs en signaux Ølectriques ou optiques susceptibles de voyager sur les c bles du rØseau. Le dispositif chargØ de cette traduction est le Transceiver.
• La carte traduit les donnØes et indique son adresse au reste du rØseau afin de pouvoir Œtre distinguØe des autres cartes du rØseau.
• Adresses : dØfinies par l IEEE (Institute of Electrical and Electronics Engineer) qui attribue des plages d adresses chaque fabriquant de cartes rØseau.
• Elles sont inscrites sur les puces des cartes : procØdure appelØe « Gravure de l adresse sur la carte ». Par consØquent, chaque carte a une adresse UNIQUE sur le rØseau.
L ordinateur et la carte doivent communiquer afin que les donnØes puissent passer de l un vers l autre. L ordinateur affecte ainsi une partie de sa mØmoire aux cartes munies d un AccŁs Direct la MØmoire (DMA : Direct Access Memory).
La carte indique qu un autre ordinateur demande des donnØes l ordinateur qui la contient. Le bus de l ordinateur transfŁre les donnØes depuis la mØmoire de l ordinateur vers la carte rØseau.
Si les donnØes circulent plus vite que la carte ne peut les traiter, elles sont placØes dans la mØmoire tampon affectØe la carte (RAM) dans laquelle elles sont stockØes temporairement pendant l Ømission et la rØception des donnØes.
Avant que la carte Ømettrice envoie les donnØes, elle dialogue Ølectroniquement avec la carte rØceptrice pour s accorder sur les points suivants :
• Taille maximale des groupes de donnØes envoyer
• Volume de donnØes envoyer avant confirmation
• Intervalles de temps entre les transmissions partielles de donnØes
• DØlai d attente avant envoi de la confirmation
• QuantitØ que chaque carte peut contenir avant dØbordement
• Vitesse de transmission des donnØes
Si une carte plus rØcente, donc plus perfectionnØe, communique avec une carte plus lente, elles doivent trouver une vitesse de transmission commune. Certaines cartes ont des circuits leur permettant de s adapter au dØbit d une carte plus lente.
Il y a donc acceptation et ajustement des paramŁtres propres chacune des deux cartes avant Ømission et rØception des donnØes.
Le clavier est le plus important pØriphØrique d entrØe de donnØes. Gr ce lui, il est possible de transfØrer des textes ou encore de donner des ordres la machine d effectuer des opØrations particuliŁres. De la mŒme fa on que sur une machine Øcrire, le clavier permet de saisir des caractŁres (lettres, chiffres, symboles, ).
La souris permet aussi de saisir une information concernant la position du curseur sur l Øcran et par consØquent le choix de l utilisateur.
PØriphØrique d’entrØe qui permet, par balayage optique, la restitution d’une image l’Øcran de l’ordinateur. Le numØriseur est semblable, dans sa forme, au photocopieur, avec toutefois une importante distinction; l’image rØcupØrØe par l appareil est transmise l’ordinateur au lieu d’Œtre immØdiatement imprimØe sur du papier.
Ce pØriphØrique permet de numØriser du texte et des images, en noir et blanc ou en couleur. La qualitØ dØpend de la rØsolution. On dØfinit la rØsolution par le nombre de points par pouce (ppp ou dpi), une image Øtant composØe d une grande quantitØ de points. Plus le nombre de points est grand dans un pouce carrØ, plus la qualitØ de l image est bonne.
Les camØras numØriques sont des appareils photographiques qui ne contiennent pas de film. Les photos sont enregistrØes sur une petite disquette au lieu de s imprØgner sur une pellicule. La photographie obtenue pourra Œtre visionnØe partir de l Øcran d un ordinateur, ou encore d un tØlØviseur. Le grand avantage de ces nouveaux appareils est leur capacitØ transmettre une photo un ordinateur, par l’intermØdiaire d’un fil, pour ensuite l intØgrØe un document.
D autres avantages de la camØra numØrique : il n’est pas nØcessaire d’acheter des pellicules et de payer pour en faire le dØveloppement. De plus, la photo transmise l’ordinateur, peut Œtre retouchØe. Une imprimante couleur de bonne qualitØ procurer, par la suite, de bonnes photos sur papier.
Nous venons de voir une sØrie de pØriphØriques d’entrØe, voyons maintenant les pØriphØriques de sortie. Nous en retrouvons principalement deux, l’Øcran et l’imprimante
L’Øcran, aussi appelØ moniteur, affiche une image dont la nettetØ dØpend de la rØsolution. Si l’image est composØe de petits points, elle sera plus claire. Si les points sont plus gros, elle sera par le fait mŒme beaucoup moins claire. Chacun de ses points s’appelle un pixel.
Les moniteurs (Øcrans d’ordinateur) sont la plupart du temps des tubes cathodiques, c’est- -dire un tube en verre dans lequel un canon Ølectrons Ømet des Ølectrons dirigØs par un champ magnØtique vers un Øcran sur lequel il y a de petits ØlØments phosphorescents (luminophores) constituant des points (pixels) Ømettant de la lumiŁre lorsque les Ølectrons viennent les heurter.
Le champ magnØtique dØvie les Ølectrons de gauche droite afin de crØer un balayage, puis vers le bas une fois arrivØ en bout de ligne.
Ce balayage n’est pas per u par l’oeil humain. Gr ce la persistance rØtinienne, essayez par exemple d’agiter votre main devant votre Øcran pour visualiser ce phØnomŁne. Vous voyez votre main en plusieurs exemplaires.
Un moniteur noir et blanc permet d’afficher des dØgradØs de couleur (niveaux de gris) en variant l’intensitØ du rayon.
Pour les moniteurs couleur, trois faisceaux d’Ølectrons sont utilisØs simultanØment en visant chacun un point d’une couleur spØcifique : un rouge, un vert et un bleu (RGB : Red / Green / Blue ou en fran ais RVB : Rouge / Vert / Bleu). Cependant ces luminophores sont situØs de fa on tellement proche que l’oeil n’a pas un pouvoir sØparateur assez fort. Il voit une couleur composØe de ces trois couleurs. Essayez de mettre une minuscule goutte d’eau sur le verre de votre moniteur : celle-ci faisant un effet de loupe va vous faire appara tre les luminophores.
Cette technologie est basØe sur un Øcran composØ de deux plaques transparentes entre lesquelles il y a une fine couche de liquide contenant des molØcules (cristaux) capable de s’orienter lorsqu’elles sont soumises un courant Ølectrique.
Le principal avantage de ce type d’Øcran est son encombrement rØduit, d’oø son utilisation sur les ordinateurs portables.
Les moniteurs se caractØrisent par les ØlØments suivants :
• La dØfinition : Le nombre de points affichØ. Ce nombre de points est actuellement compris entre 640 480 (640 points en longueur, 480 points en largeur) et 1600 1200.
• La taille : Il ne faut pas confondre la dØfinition de l’Øcran et la taille de l’Øcran. En effet, un Øcran d’une taille donnØe peut afficher diffØrentes dØfinitions. La taille de l’Øcran se calcule en mesurant la diagonale de l’Øcran exprimØe en pouces.
• La rØsolution : Elle dØtermine le nombre de pixels par unitØ de surface (pixels par pouce carrØ, en anglais DPI : Dots Per Inch).
• Le pas de masque : C’est la distance qui sØpare deux points. Plus celle-ci est petite, plus l’image est prØcise.
• La frØquence de balayage : C’est le nombre d’images qui sont affichØes par seconde. On l’appelle aussi rafra chissement. Elle est exprimØe en hertz (Hz). Plus cette valeur est ØlevØe, meilleur est le confort visuel (on ne voit pas l’image scintiller). Il faut donc qu’elle soit supØrieure 67 hertz (Hz). En dessous de cette limite, l’oeil humain remarque que l’image «clignote».
Visionner son travail l’Øcran est utile mais le rØsultat final doit souvent se retrouver sur du papier. Il faut alors l’imprimer.
L’imprimante permet de faire une sortie imprimØe (sur papier) des donnØes de l’ordinateur.
Il en existe plusieurs types d’imprimantes, dont les plus courantes sont :
• l’imprimante laser;
• l’imprimante jet d’encre;
• l’imprimante bulles d’encre; • l’imprimante matricielle ( aiguilles); • l’imprimante marguerite.
Les imprimantes marguerite sont basØes sur le principe des machines dactylographique. Tous les caractŁres sont imprimØs en relief sur une matrice en forme de marguerite. Pour imprimer, un ruban imbibØ d’encre est placØ entre la marguerite et la feuille, de telle fa on que lorsque la matrice frappe le ruban, celui-ci dØpose de l’encre uniquement au niveau du relief du caractŁre. Ces d’imprimantes sont devenues obsolŁtes, car elles sont beaucoup trop bruyantes et trŁs peu rapides.
Les imprimantes matricielles permettent d’imprimer des documents gr ce un va-et-vient de la tŒte sur le papier. La tŒte est constituØe de petites aiguilles propulsØes par des Ølectro-aimants venant taper contre un ruban de carbone situØ entre la tŒte et le papier.
Ce ruban de carbone dØfile de fa on ce qu’il y ait continuellement de l’encre dessus. chaque fin de ligne un rouleau fait tourner la feuille.
Les imprimantes matricielles les plus rØcentes sont ØquipØes de tŒtes d’impression comportant 24 aiguilles, ce qui leur permet d’imprimer avec une rØsolution de 216 points par pouce.
Imprimante ØquipØe d une tŒte qui projette de l encre sur la feuille de papier travers de petits orifices.
La technologie du jet d’encre a ØtØ inventØe par Canon. Elle repose sur le principe simple, mais efficace, qu’un fluide chauffØ produit des bulles. Le chercheur qui a dØcouvert ce principe avait mis accidentellement en contact une seringue remplie d’encre et un fer souder, cela crØa une bulle dans la seringue qui fit jaillir de l’encre de la seringue.
Les tŒtes des imprimantes actuelles sont composØes de nombreuses buses (jusqu’ 256) Øquivalentes plusieurs seringues qui sont chauffØes entre 300 et 400 C plusieurs fois par seconde, gr ce une impulsion Ølectrique.
Chaque buse produit une bulle minuscule qui fait s’Øjecter une gouttelette extrŒmement fine. Le vide engendrØ par la baisse de pression aspire une nouvelle goutte
L’imprimante laser reproduit l’aide de points l’image re ue du PC. Gr ce au laser, les points sont plus petits et la dØfinition est meilleure.
L imprimante laser fonctionne de la fa on suivante : Un ionisateur de papier charge les feuilles positivement. Un ionisateur de tambour charge le tambour nØgativement. Le laser, pour sa part, gr ce un miroir qui lui permet de se placer, charge le tambour positivement en certains points. Du coup, l’encre du toner chargØe nØgativement se dØpose sur les parties du toner ayant ØtØ chargØes positivement par le laser qui viendront ensuite se dØposer sur le papier.
L’imprimante laser, ne possØdant pas de tŒte mØcanique, est beaucoup plus rapide et moins bruyante.
Il faut bien comprendre que l’ordinateur est une machine qui traite rapidement des donnØes sous forme de mots, chiffres, dessins, musique. Mais l’ordinateur n’est pas intelligent, toutes les opØrations qu il exØcute doivent Œtre consignØes l’intØrieur de programmes. Ce sont les programmes informatiques, c est- -dire les logiciels qui lui donnent les instructions suivre. Ces instructions sont placØes sur le disque dur de l appareil, sur une disquette, un disque compact ou un DVD.
3.16 Les liaisons
Une ligne tØlØphonique est con ue pour fonctionner avec un tØlØphone, c’est pour cela qu’un modem a besoin d’Øtablir une communication avec un ordinateur distant gr ce un numØro de tØlØphone avant de pouvoir Øchanger des informations. On appelle protocole le langage utilisØ par les ordinateurs pour communiquer entre eux.
La compagnie Rockwell a prØsentØ une nouvelle norme : la norme K56flex. Cette norme se pose comme alternative la technologie X2 d’US ROBOTICS. Elle permet d’obtenir des dØbits de l’ordre de 56Kb/s sur une liaison asynchrone. Elle se diffØrencie par l’encodage et le serveur. Le dØbit moyen est de 50 Kbps mais la sociØtØ compte bien arriver des taux de l’ordre de 110 puis 230 Kbps pour les donnØes offrant un fort taux de compression. Au dØpart les deux normes Øtaient sensØes pouvoir Øvoluer.
Depuis 1998 les normes ont ØtØ fixØes. Ainsi, les modems offrent pour la plupart un bios "flashable" (c’est- -dire un modem que l’on peut faire Øvoluer). Gr ce la norme V90, les modems 56 Kbps devraient maintenant Œtre compatibles entre eux.
Le NumØris est le rØseau tØlØphonique de France TØlØcom basØ sur la technologie RNIS ("RØseau NumØrique IntØgration de Services", en anglais ISDN).
Ce rØseau est con u pour transporter la voix, des donnØes (un avantage entre autres est de pouvoir conna tre le numØro de l’appelant, des images, des fax D’autre part, la fiabilitØ et le confort sont incomparable au rØseau tØlØphonique
Depuis novembre 1995, France TØlØcom a alignØ la tarification NumØris sur celles des communications normales. Cependant seules les entreprises semblent avoir accŁs cette tarification.
Il faut avoir un adaptateur pour se connecter sur le rØseau NumØris. Le dØbit est de 64 Kbps (128 en utilisant deux canaux) au lieu de 56 Kbps avec les modems les plus rapides.
Ce sont des lignes louØes qui permettent la transmission de donnØes moyens et hauts dØbits (2,4 Kbps 140 Mbps) en liaison point point ou multipoints (service Transfix).
Les 3 lignes les plus rØpandues sont les T1 (1.5Mbps), les T2 (6 Mbps), et les T3 (45Mbps). Il existe aussi des lignes nettement plus rapides : ce sont les E1 (2Mbps), E2 (8Mbps), E3 (34Mbps), et E4 (140Mbps) qui sont inaccessibles pour les particuliers.
3.18.1 Quel est le besoin d’une ligne spØcialisØe?
Pour obtenir une connexion Internet, il faut, en rŁgle gØnØrale,payer un abonnement auprŁs d’un prestataire Internet ou un service en ligne. Le prix de cette connexion dØpend de la vitesse de transfert des donnØes. Il faut choisir celle-ci en fonction du volume de frØquentation du site Web.
Un site Web ayant une forte frØquentation (environ 10 000 accŁs par jour soit 50 Mo par jour en moyenne)nØcessite une connexion T1 (1.5 Mbps),
Un site moyen (2000 accŁs par jour) ne nØcessite qu’une connexion 56 Kbps.
Pour les particuliers, il faut de prØfØrence une connexion par c ble
Les liaisons Internet par c ble vous permettent de rester connectØ Internet de fa on permanente. Il n’y a plus besoin d’attendre que la connexion s’Øtablisse avec le prestataire, car la connexion avec ce dernier est directe.
• On ne paye pas la connexion la minute mais au mois, d’oø un coßt rØduit
• La vitesse est largement supØrieure celle d’un modem
Pour accØder cette technologie il est nØcessaire d’avoir :
• Le c ble
• Un fournisseur d’accŁs par ce c ble
• Un modem-c ble
Un modem-c ble est un appareil qui permet d’accØder Internet via le rØseau de c blodistribution.
Il possŁde deux types de connexions : une connexion de type coaxial (vers le c ble), une connexion de type Ethernet RJ45 (vers la carte rØseau de l’ordinateur).
Des vitesses de 10Mbps peuvent Œtre thØoriquement atteinte, cependant cette bande passante est partagØe suivant l’arborescence qui vous relie l’opØrateur, ainsi il se peut que vous partagiez (et c’est probablement le cas) votre bande-passante avec toutes les personnes de votre immeuble, c’est- -dire que si tous vos voisins tØlØchargent des vidØos, les performances ne seront pas au rendez-vous
L’ADSL (Asymetrical Digital Subscriber Line) est une technologie de liaison Internet (un peu comme avec un modem standard) dont le dØbit se situe entre les dØbits de la ligne de type NumØris et du c ble.
Le problŁme de l’internaute est le taux de transfert des donnØes entre son modem et le central tØlØphonique. Cette jonction est constituØe de fils de cuivre dont on a toujours pensØ qu’ils ne pouvaient pas supporter des vitesses de communication de plus de 10 Kb par seconde.
En fait, le rØseau tØlØphonique a ØtØ con u la base pour transporter des voix, c’est- -dire que les infrastructures tØlØphoniques Øtaient con ues pour utiliser une bande passante de l’ordre de 3,3 Khz.
Pourtant, ces lignes peuvent supporter physiquement des bandes passantes allant jusqu’ 1 Mhz. Il est donc possible, en utilisant les lignes de tØlØphone, d’optimiser les taux de transfert. Ceux-ci sont fonction de la distance entre l’utilisateur et le central tØlØphonique, et peuvent s’Øchelonner entre 1,5 Mbit/s et 10 Mbit/s, offrant des possibilitØs beaucoup plus grandes que les possibilitØs actuelles (64 Kbit/s 128 Kbit/s pour les lignes tØlØphoniques.
Type de liaison Taux de transfert thØorique
Modem 33.6 Kbit/s
RNIS 64 ou 128 Kbit/s
ADSL 1,5 10 Mbit/s en rØception 640 Kbit/s en Ømission
C ble de 500 Kbit/s 10 Mbit/s
Il existe diffØrentes technologies basØes sur ce principe, elles sont nommØes "xDSL" (ADSL,HDSL, SDSL et VDSL); Elles correspondent chacune une utilisation particuliŁre. C’est l’ADSL qui semble Œtre la plus au point commercialement.
Bande haute (1 Mhz) Canal descendant - 8 Mbit/s
Bande mØdiane (500 khz) Canal bidirectionnel
Bande basse TØlØphonie (0 4 Khz)- RNIS (0 80 Khz)
Elle permet de transfØrer des informations 100 Mbps, cependant elle coßte trŁs cher et le transfert de voix est difficile, ainsi elle se limite des rØseaux locaux internes aux entreprises. 3.18.9 Le satellite
Effectivement les liaisons satellites sont trŁs rapides, cependant elles sont dans un seul sens (rØception), ainsi lorsque l’on veut aller sur un site on ne peut pas en donner l’ordre La solution est simple, un modem sur une ligne tØlØphonique suffit pour envoyer ces informations. La sociØtØ Hugues offre dØj un service Internet par satellite, Canal Satellite et TPS sont dØj sur les rangs pour un Internet destinØ au grand public.
Le tØlØchargement de donnØes s’effectue actuellement un taux de transfert de 400Kbps.
Lorsque la construction d’un rØseau c blØ est trop cher, qu’une zone d’ombre gŒne le satellite, le MMDS se rØvŁle Œtre une solution idØale. Il permet de fournir un accŁs pour une petite ville. Le rØseau hertzien est cependant trop encombrØ pour une couverture nationale.
Une compagnie de tØlØphone canadienne (Northern Telecom) prØtend avoir dØcouvert un nouveau moyen d’accØder Internet via les lignes Ølectriques.
Ethernet (aussi connu sous le nom de norme IEEE 802.3) est une technologie de rØseau local basØ sur le principe que toutes les machines du rØseau Ethernet sont connectØes une mŒme ligne de communication, constituØe de c bles cylindriques. On distingue diffØrentes variantes de technologies Ethernet suivant le diamŁtre des c bles utilisØs :
• 10Base-2 : Le c ble utilisØ est un c ble coaxial de faible diamŁtre
• 10Base-5 : Le c ble utilisØ est un c ble coaxial de gros diamŁtre
• 10Base-T : Le c ble utilisØ est une paire torsadØe, le dØbit atteint est d’environ 10Mbps
• 100Base-TX : Comme 10Base-T mais avec une vitesse de transmission beaucoup plus importante (100Mbps)
3.18.12.1.1.1.1.1.1 Tech nolog ie | 3.18.12.1.1.1.1.1.2 Type de c ble | 3.18.12.1.1.1.1.1. | 33.18.12.1.1.1.1.1. |
10 Base-2 | Câble coaxial de faible diamètre | 10 Mb/s | 185 m |
10 Base-5 | Câble coaxial de gros diamètre (0.4 inch) | 10 Mb/s | 500 m |
10 Base-T | Double paire torsadée | 10 Mb/s | 100 m |
100 Base-TX | Double paire torsadée | 100 Mb/s | 100 m |
1000 Base-SX | Fibre optique | 1000 Mb/s | 500 m |
4
Ethernet est une technologie de rØseau trŁs utilisØe car le prix de revient d’un tel rØseau n’est pas trŁs ØlevØ
Principe de transmission :
Tous les ordinateurs d’un rØseau Ethernet sont reliØs une mŒme ligne de transmission, et la communication se fait l’aide d’un protocole appelØ CSMA/CD (Carrier Sense Multiple Access with Collision Detect ce qui signifie qu’il s’agit d’un protocole d’accŁs multiple avec surveillance de porteuse (Carrier Sense) et dØtection de collision).
Avec ce protocole toute machine est autorisØe Ømettre sur la ligne n’importe quel moment et sans notion de prioritØ entre les machines. Cette communication se fait de fa on simple :
• Chaque machine vØrifie qu’il n’y a aucune communication sur la ligne avant d’Ømettre
• Si deux machines Ømettent simultanØment, alors il y a collision (c’est- -dire que plusieurs trames de donnØes se trouvent sur la ligne au mŒme moment)
• Les deux machines interrompent leur communication et attendent un dØlai alØatoire, puis la premiŁre ayant passØ ce dØlai peut alors rØØmettre
Ce principe est basØ sur plusieurs contraintes :
• Les paquets de donnØes doivent avoir une taille maximale
• il doit y avoir un temps d’attente entre deux transmissions
• Le temps d’attente varie selon la frØquence des collisions :
• AprŁs la premiŁre collision une machine attend une unitØ de temps
• AprŁs la seconde collision la machine attend deux unitØs de temps
• AprŁs la troisiŁme collision la machine attend quatre unitØs de temps
• avec bien entendu un petit temps supplØmentaire alØatoire
Les processus correspondent à l’exécution de tâches : les programmes des utilisateurs, les entrées-sorties… par le système. Un système d’exploitation doit en général traiter plusieurs tâches en même temps. Comme il n’a, la plupart du temps, qu’un processeur, il résout ce problème grâce à un pseudo-parallélisme. Il traite une tâche à la fois, s’interrompt et passe à la suivante. La commutation des tâches étant très rapide, l’ordinateur donne l’illusion d’effectuer un traitement simultané.
Les processus des utilisateurs sont lancés par un interprète de commande. Ils peuvent eux-mêmes lancer ensuite d’autres processus. On appelle le processus créateur, le père, et les processus créés, les fils. Les processus peuvent donc se structurer sous la forme d’une arborescence. Au lancement du système, il n’existe qu’un seul processus, qui est l’ancêtre de tout les autres.
Figure 2 La hiérarchie des processus.
Les processus sont composés d’un espace de travail en mémoire formé de 3 segments : la pile, les données et le code et d’un contexte.
Figure 3 Les segments d’un processus.
Le code correspond aux instructions, en langage d’assemblage, du programme à exécuter. La zone de données contient les variables globales ou statiques du programme ainsi que les allocations dynamiques de mémoire. Enfin, les appels de fonctions, avec leurs paramètres et leurs variables locales, viennent s’empiler sur la pile. Les zones de pile et de données ont des frontières mobiles qui croissent en sens inverse lors de l’exécution du programme. Parfois, on partage la zone de données en données elles-mêmes et en tas. Le tas est alors réservé aux données dynamiques.
Le contexte est formé des données nécessaires à la gestion des processus. Une table contient la liste de tous les processus et chaque entrée conserve leur contexte. Les éléments de la table des processus de Minix, par exemple, ont la forme simplifiée du tableau ci-dessous.
Processus | Mémoire Fichiers | ||
Registres | Pointeur sur code Masque umask | ||
Compteur ordinal | Pointeur sur données Répertoire racine | ||
État du programme | Pointeur sur pile Répertoire de travail | ||
Pointeur de pile | Statut de fin Descripteurs d’exécution fichiers | de | |
Date de création | N° de signal du proc. tué | uid effectif | |
Temps CP utilisé | PID | gid effectif | |
Temps CP des fils | Processus père | ||
Date de la proch. alarme | Groupe de processus | ||
Pointeurs sur messages | uid réel | ||
Bits signaux en attente | uid effectif | ||
PID | gid réel gid effectif Bits des signaux |
Tableau 1 Les éléments du contexte de Minix.
Le nombre des emplacements dans la table des processus est limité pour chaque système et pour chaque utilisateur.
La commutation des tâches, le passage d’une tâche à une autre, est réalisée par un ordonnanceur au niveau le plus bas du système. Cet ordonnanceur est activé par des interruptions d’horloge, de disque, de terminaux.
Un processus peut être actif en mémoire centrale (Élu) ou suspendu en attente d’exécution (Prêt). Il peut aussi être Bloqué, en attente de ressource, par exemple au cours d’une lecture de disque. Le diagramme simplifié des états d’un processus est donc :
Figure 4 Les états d’un processus.
Le processus passe de l’état élu à l’état prêt et réciproquement au cours d’une intervention de l’ordonnanceur. Cet ordonnanceur se déclenchant, par exemple, sur une interruption d’horloge. Il pourra alors suspendre le processus en cours, s’il a dépassé son quantum de temps, pour élire l’un des processus prêts. La transition de l’état élu à l’état bloqué se produit, par exemple, à l’occasion d’une lecture sur disque. Ce processus passera de l’état bloqué à l’état prêt lors de la réponse du disque. Ce passage correspond d’une manière générale à la libération d’une ressource.
En fait, sous Unix, l’exécution d’un processus se fait sous deux modes, le mode utilisateur et le mode noyau. Le mode noyau correspond aux appels au code du noyau : write, read, … Le mode utilisateur correspond aux autres instructions. Un processus en mode noyau ne peut être suspendu par l’ordonnanceur.
Un processus en mode noyau ne peut être suspendu par l’ordonnanceur. Il passe à l’état préempté à la fin de son exécution dans ce mode – à moins d’être bloqué ou détruit –. Cet état est virtuellement le même que prêt en mémoire.
Par ailleurs, lorsque la mémoire ne peut contenir tous les processus prêts, un certain nombre d’entre eux sont déplacés sur le disque. Un processus peut alors être prêt en mémoire ou prêt sur le disque. De la même manière, on a des processus bloqués en mémoire ou bien bloqués sur disque.
Enfin, les processus terminés ne sont pas immédiatement éliminés de la tables des processus – ils ne le sont que par une instruction explicite de leur père –. Ceci correspond à l’état défunt.
Les états d’un processus Unix sont alors :
Figure 5 Les états des processus d’Unix.
Un processus peut se dupliquer – et donc ajouter un nouveau processus – par la fonction : fork(void)qui retourne -1 en cas d’échec. En cas de réussite, la fonction retourne 0 dans le processus fils et le n° du processus fils – Process Identifier ou PID – dans le père. Cette fonction transmet une partie du contexte du père au fils : les descripteurs des fichiers standards et des autres fichiers, les redirections… Les deux programmes sont sensibles aux mêmes interruptions. À l’issue d’un fork() les deux processus s’exécutent simultanément.
La création d’un nouveau processus ne peut se faire que par le recouvrement du code d’un processus existant grâce à la fonction :
int execl(char *ref, char *arg0, char *argn, 0)
ref est une chaîne de caractères donnant l’adresse du nouveau programme à substituer et à exécuter. arg0, arg1, …, argn sont les arguments du programme. Le premier argument, arg0, reprend en fait le nom du programme.
Les fonctions execle() et execlp() ont des arguments et des effets semblables. Elles transmettent en plus respectivement la variable chemin (PATH) ou les variables d’environnement au complet.
Les fonctions int execv(char *ref, char *argv[]) ainsi que execve() et execvp() sont des variantes analogues. Les paramètres du programme à lancer sont transmis dans le tableau de chaînes : argv[][]. Ce tableau est semblable aux paramètres de la fonction principale d’un programme C : main(int argc, char
**argv).
Ces fonctions rendent -1 en cas d’échec. Par exemple :
void main() { execl("/bin/ls", "ls", "-l", (char *) 0);
/* avec execlp, le premier argument peut n’être que ls et non /bin/ls */ printf("pas d’impression\n");
}
La création d’un nouveau processus – l’occupation d’un nouvel emplacement de la table des processus – implique donc la duplication d’un processus existant. Ce dernier sera le père. On substituera ensuite le code du fils par le code qu’on désire exécuter. Au départ, le processus initial lance tous les processus utiles au système.
Un processus se termine lorsqu’il n’a plus d’instructions ou lorsqu’il exécute la fonction :
void exit(int statut)
L’élimination d’un processus terminé de la table ne peut se faire que par son père, grâce à la fonction :
int wait(int *code_de_sortie)
Avec cette instruction, le père se bloque en attente de la fin d’un fils. Elle rendra le n° PID du premier fils mort trouvé. La valeur du code de sortie est reliée au paramètre d’exit de ce fils. On peut donc utiliser l’instruction wait pour connaître la valeur éventuelle de retour, fournie par exit(), d’un processus. Ce mode d’utilisation est analogue à celui d’une fonction. wait() rend -1 en cas d’erreur.
Si le fils se termine sans que son père l’attende, le fils passe à l’état defunct dans la table. Si, au contraire, le père se termine avant le fils, ce dernier est rattaché au processus initial. Le processus initial passe la plupart de son temps à attendre les processus orphelins.
Grâce aux 3 instructions, fork(), exec(), et wait(), on peut écrire un interprète de commandes simplifié. Il prend la forme suivante :
while(1) {/* attend commande */ lire_commande(commande, paramètres); if (fork() != 0) { wait(&statut); /* proc. père */
} else { execv(commande, paramètres); /* proc. fils */
}
}
Les fonctions Unix rendent -1 en cas d’erreur. Dans ce cas, elles positionnent la variable entière globale errno. On peut imprimer cette valeur d’erreur et constater la cause qui est décrite dans le fichier errno.h. On peut aussi imprimer le texte en clair avec la fonction perror(char*). Dans le cas d’une programmation professionnelle, il est indispensable de vérifier la valeur de retour de toutes les fonctions faisant appel au système et de se protéger des erreurs par un codage du type :
if ((retour = fonction()) == -1) { perror("plantage"); exit(0);
}
L’instruction : int kill(int pid, int signal) permet à un processus d’envoyer un signal à un autre processus. pid est le n° du processus à détruire et signal, le n° du signal employé. La fonction kill correspond à des interruptions logicielles.
Par défaut, un signal provoque la destruction du processus récepteur, à condition bien sûr, que le processus émetteur possède ce droit de destruction.
La liste des valeurs de signal comprend, entre autres :
Nom signal | du | N° signal | du | Commentaires |
SIGUP | 1 | signal émis lors d’une déconnexion | ||
SIGINT | 2 | ^C | ||
SIGQUIT | 3 | ^\ | ||
SIGKILL | 9 | signal d’interruption radicale | ||
SIGALRM | 14 | signal émis par alarm(int sec) au bout de sec secondes | ||
SIGCLD | 20 | signal émis par un fils qui se termine, à son père |
Tableau 2 Quelques signaux d’Unix.
Les valeurs des signaux dépendent de l’implantation. La liste complète est définie par des macros dans signal.h kill() rend 0 en cas de succès et -1 en cas d’échec.
Un processus peut détourner les signaux reçus et modifier son comportement par
l’appel de la fonction : void (*signal(int signal, void
(*fonction)(int)))
avec fonction pouvant prendre les valeurs:
Nom | Action |
SIG_IGN | le processus ignorera l’interruption correspondante |
SIG_DFL | le processus rétablira son comportement par défaut lors de l’arrivée de l’interruption (la terminaison) |
void fonction(int n) | Le processus exécutera fonction, définie par l’utilisateur, à l’arrivée de l’interruption n. Il reprendra ensuite au point où il a été interrompu |
Tableau 3 Les routines d'interruption d’Unix.
L’appel de la fonction signal positionne l’état des bits de signaux dans la table des processus.
Par ailleurs, la fonction signal(SIGCLD, SIG_IGN), permet à un père d’ignorer le retour de ses fils sans que ces derniers encombrent la table des processus à l’état defunct.
La commande Unix ps -ef, donne la liste des processus en activité sur le système. Chaque processus possède un identificateur et un groupe. On les obtient par les fonctions :
int getpid(void)et int getpgrp(void)
Les fils héritent du groupe de processus du père. On peut changer ce groupe par la fonction :
int setpgrp(void)
Chaque processus possède, d’autre part, un utilisateur réel et effectif. On les obtient respectivement par les fonctions :
int getuid(void)et int geteuid(void)
L’utilisateur réel est l’utilisateur ayant lancé le processus. Le numéro d’utilisateur effectif sera utilisé pour vérifier certains droits d’accès (fichiers et envoi de signaux). Il correspond normalement au numéro d’utilisateur réel. On peut cependant positionner l’utilisateur effectif d’un processus au propriétaire du fichier exécutable. Ce fichier s’exécutera alors avec les droits du propriétaire et non avec les droits de celui qui l’a lancé. La fonction :
int setuid(int euid)
permet de commuter ces numéros d’utilisateur de l’un à l’autre : réel à effectif et viceversa. Elle rend 0 en cas de succès.
Les processus peuvent communiquer par l’intermédiaire de fichiers. Néanmoins, certains systèmes d’exploitation fournissent des mécanismes permettant les communications directes.
L’interprète de commandes Unix utilise le signe « | » qu’il relie à l’appel système pipe(). Il permet à deux processus de s’exécuter en même temps. Le premier fournissant des données que le second exploite au fur et à mesure de leur production.
Le système Unix offre des primitives qui permettent de synchroniser facilement des processus lecteurs et écrivains dans un tampon sans passer par des sémaphores. L’appel de la fonction du noyau pipe() crée un tampon de données, un tube, dans lequel deux processus pourront venir respectivement lire et écrire. La fonction fournit, d’autre part, deux descripteurs, analogues aux descripteurs de fichiers, qui serviront de référence pour les opérations de lecture et d’écriture. Le système réalise la synchronisation de ces opérations de manière interne.
Les deux processus communicants doivent partager les mêmes descripteurs obtenus par pipe(). Il est donc commode qu’ils aient un ancêtre commun car les descripteurs de fichiers sont hérités. Dans l’exemple suivant, deux processus, un père et un fils communiquent par l’intermédiaire d’un tube. Le père écrit les lettres de l’alphabet que lit le fils :
Les messages forment un mode de communication privilégié entre les processus. Ils sont utilisés dans le système pédagogique Minix de Tanenbaum. Ils sont au cœur de Mach qu’on présente comme un successeur possible d’Unix et qui a inspiré Windows NT pour certaines parties. Par ailleurs, ils s’adaptent très bien à une architecture répartie et leur mode de fonctionnement est voisin des échanges de données sur un réseau.
Les communications de messages se font à travers deux opérations fondamentales : envoie(message) et reçois(message). (send et receive). Les messages sont de tailles variables ou fixes. Les opérations d’envoi et de réception peuvent être soit directes entre les processus, soit indirectes par l’intermédiaire d’une boîte aux lettres.
Les communications directes doivent identifier le processus, par un n° et une
machine, par exemple. On aura alors : envoie(Proc, Message) et reçois(Proc, Message). Dans ce cas la communication est établie entre deux processus uniquement, par un lien relativement rigide et bidirectionnel. On peut rendre les liaisons plus souples en laissant vide l’identité du processus dans la fonction reçois.
Les communications peuvent être indirectes grâce à l’utilisation d’une boîte aux lettres (un « port » dans la terminologie des réseaux). Les liens peuvent alors unir plus de deux processus du moment qu’ils partagent la même boîte aux lettres. On devra néanmoins résoudre un certain nombre de problèmes qui peuvent se poser, par exemple, si deux processus essayent de recevoir simultanément le contenu d’une même boîte.
Les communications se font de manière synchrone ou asynchrone. Le synchronisme peut se représenter par la capacité d’un tampon de réception. Si le tampon n’a pas de capacité, l’émetteur doit attendre que le récepteur lise le message pour pouvoir continuer. Les deux processus se synchronisent sur ce transfert et on parle alors d’un « rendez-vous ». Deux processus asynchrones : P et Q, peuvent aussi communiquer de cette manière en mettant en œuvre un mécanisme d’acquittement :
P | Q |
envoie(Q, message) reçois(Q, message) | reçois(P, message) envoie(P, acquittement) |
Tableau 4 Les fonctions de messages.
On peut concevoir des applications qui communiquent à travers un segment de mémoire partagée. Le principe est le même que pour un échange d’informations entre deux processus par un fichier. Dans le cas d’une zone de mémoire partagée, on devra déclarer une zone commune par une fonction spécifique, car la zone mémoire d’un processus est protégée.
Le système Unix fournit les primitives permettant de partager la mémoire. NT aussi sous le nom de fichiers mappés en mémoire. Ces mécanismes, bien que très rapides, présentent l’inconvénient d’être difficilement adaptables aux réseaux. Pour les communications locales, la vitesse est sans doute semblable à celle de la communication par un fichier à cause de la mémoire cache. Lorsqu’il a besoin de partager un espace mémoire, le programmeur préférera utiliser des fils d’exécution.
L’ordonnancement règle les transitions d’un état à un autre des différents processus.
Cet ordonnancement a pour objectifs de :
1. Maximiser l’utilisation du processeur;
2. Être équitable entre les différents processus;
3. Présenter un temps de réponse acceptable;
4. Avoir un bon rendement;
5. Assurer certaines priorités.
Cet algorithme est l’un des plus utilisés et l’un des plus fiables. Chaque processus prêt dispose d’un quantum de temps pendant lequel il s’exécute. Lorsqu’il a épuisé ce temps ou qu’il se bloque, par exemple sur une entrée-sortie, le processus suivant de la file d’attente est élu et le remplace. Le processus suspendu est mis en queue du tourniquet.
Le seul paramètre important à régler, pour le tourniquet, est la durée du quantum. Il doit minimiser le temps de gestion du système et cependant être acceptable pour les utilisateurs. La part de gestion du système correspond au rapport de la durée de commutation sur la durée du quantum. Plus le quantum est long plus cette part est faible, mais plus les utilisateurs attendent longtemps leur tour. Un compromis peut se situer, suivant les machines, de 100 à 200 ms.
Dans l’algorithme du tourniquet, les quanta égaux rendent les différents processus égaux. Il est parfois nécessaire de privilégier certains processus par rapport à d’autres. L’algorithme de priorité choisit le processus prêt de plus haute priorité.
Ces priorités peuvent être statiques ou dynamiques. Les processus du système auront des priorités statiques (non-modifiables) fortes. Les processus des utilisateurs verront leurs priorités modifiées, au cours de leur exécution, par l’ordonnanceur. Ainsi un processus qui vient de s’exécuter verra sa priorité baisser. Pour un exemple d’exécution avec priorités, on pourra consulter Bach.
On utilise généralement une combinaison des deux techniques précédentes. À chaque niveau de priorité correspond un tourniquet. L’ordonnanceur choisit le tourniquet non vide de priorité la plus forte et l’exécute.
Pour que tous les processus puissent s’exécuter, il est nécessaire d’ajuster périodiquement les différentes priorités.
Les fils d’exécution sont soumis à un ordonnancement. Dans Windows NT, les fils d’exécution ont 32 niveaux de priorité qui sont soit fixes soit dynamiques. La priorité la plus haute est toujours celle qui s’exécute. Dans le cas d’une priorité dynamique, les valeurs de cette priorité varient entre deux bornes. Elle augmente, par exemple, lors d’une attente d’entrée-sortie. On peut changer la priorité des fils d’exécution dans Windows NT.
La mémoire principale est le lieu où se trouvent les programmes et les données quand le processeur les exécute. On l’oppose au concept de mémoire secondaire, représentée par les disques, de plus grande capacité, où les processus peuvent séjourner avant d’être exécutés.
De manière encore plus vive que pour les autres ressources informatiques, le prix des mémoires a baissé et la capacité unitaire des circuits a augmenté. Cependant la nécessité de la gérer de manière optimale est toujours fondamentale, car en dépit de sa grande disponibilité, elle n’est, en général, jamais suffisante. Ceci en raison de la taille continuellement grandissante des programmes.
Le concept de multiprogrammation s’oppose à celui de monoprogrammation. La monoprogrammation ne permet qu’à un seul processus utilisateur d’être exécuté. Cette technique n’est plus utilisée que dans les micro-ordinateurs. On trouve alors en mémoire, par exemple dans le cas de MS-DOS : le système en mémoire basse, les pilotes de périphériques en mémoire haute (dans une zone allant de 640 ko à 1 Mo) et un programme utilisateur entre les deux.
Pilotes en ROM (BIOS) |
Programme utilisateur (RAM) |
Système (RAM) |
Figure 6 L’organisation de la mémoire du DOS.
La multiprogrammation autorise l’exécution de plusieurs processus indépendant à la fois. Cette technique permet d’optimiser le taux d’utilisation du processeur en réduisant notamment les attentes sur des entrées-sorties. La multiprogrammation implique le séjour de plusieurs programmes en même temps en mémoire et c’est cette technique qui a donné naissance à la gestion moderne de la mémoire.
La gestion de la mémoire est presque impossible sans l’aide du matériel. Celui-ci doit notamment assurer la protection. Dans les systèmes multi-utilisateurs, par exemple, on doit interdire à un utilisateur d’accéder n’importe comment au noyau du système ou aux autres programmes des utilisateurs.
Pour assurer une protection fondamentale, on dispose, sur la plupart des processeurs, de deux registres délimitant le domaine d’un processus : le registre de base et le registre de limite. La protection est alors assurée par le matériel qui compare les adresses émises par le processus à ces deux registres.
Avant d’être exécuté, un programme doit passer par plusieurs étapes. Au début, le programmeur crée un fichier et écrit son programme dans un langage source, le C par exemple. Un compilateur transforme ce programme en un module objet. Le module objet représente la traduction des instructions en C, en langage machine. Le code produit est en général relogeable, commençant à l’adresse 00000 et pouvant se translater à n’importe quel endroit de la mémoire en lui donnant comme référence initiale le registre de base. Les adresses représentent alors le décalage par rapport à ce registre.
Pour effectuer le chargement, le système alloue un espace de mémoire libre et il y place le processus. Il libérera cet emplacement une fois le programme terminé.
Dans beaucoup de cas, il n’est pas possible de faire tenir tous les programmes ensemble en mémoire. Parfois même, la taille d’un seul programme est trop importante. Le programmeur peut, dans ce cas, mettre en œuvre une stratégie de recouvrement (overlay) consistant à découper un programme important en modules et à charger ces modules quand ils sont nécessaires. Ceci est cependant très fastidieux et nécessite, pour chaque nouveau programme, un redécoupage.
Les systèmes d’exploitation modernes mettent en œuvre des stratégies qui libèrent le programmeur de ces préoccupations. Il existe deux stratégies principales pour gérer les chargements : le va-et-vient et la mémoire virtuelle.
Avant d’implanter une technique de gestion de la mémoire centrale par va-et-vient, il est nécessaire de connaître son état : les zones libres et occupées; de disposer d’une stratégie d’allocation et enfin de procédures de libération. Les techniques que nous allons décrire servent de base au va-et-vient; on les met aussi en œuvre dans le cas de la multiprogrammation simple où plusieurs processus sont chargés en mémoire et conservés jusqu’à la fin de leur exécution.
Le système garde la trace des emplacements occupés de la mémoire par l’intermédiaire d’une table de bits ou bien d’une liste chaînée. La mémoire étant découpée en unités, en blocs, d’allocation.
On peut conserver l’état des blocs de mémoire grâce à une table de bits. Les unités libres étant notées par 0 et ceux occupées par un 1. (ou l’inverse).
0 | 0 | 1 | 1 | 0 | 0 |
La technique des tables de bits est simple à implanter, mais elle est peu utilisée. On peut faire la remarque suivante : plus l’unité d’allocation est petite, moins on a de pertes lors des allocations, mais en revanche, plus cette table occupe de place en mémoire.
On peut représenter la mémoire par une liste chaînée de structures dont les membres sont : le type (libre ou occupé), l’adresse de début, la longueur, et un pointeur sur l’élément suivant.
Pour une mémoire ayant l’état suivant :
0 5 8 10 15 20
on aurait la liste :
On peut légèrement modifier ce schéma en prenant deux listes : l’une pour les processus et l’autre pour les zones libres. La liste des blocs libres peut elle-même se représenter en réservant quelques octets de chaque bloc libre pour contenir un pointeur sur le bloc libre suivant.
Le système MS-DOS utilise une variante de ce procédé grâce à un en-tête de 16 octets qui précède chaque zone (arène) en mémoire. Les en-têtes contiennent notamment le type de l’arène (un pointeur sur le contexte du processus ou 0) et sa taille.
L’allocation d’un espace libre pour un processus peut se faire suivant trois stratégies principales : le « premier ajustement » (first fit), le « meilleur ajustement » (best fit), et le « pire ajustement » (worst fit).
Dans le cas du « premier ajustement », on prend le premier bloc libre de la liste qui peut contenir le processus qu’on désire charger. Le « meilleur ajustement » tente d’allouer au processus l’espace mémoire le plus petit qui puisse le contenir. Le « pire ajustement » lui prend le plus grand bloc disponible et le fragmente en deux.
Des simulations ont montré que le « premier ajustement » était meilleur que les autres. Paradoxalement, le « meilleur ajustement », qui est plus coûteux, n’est pas optimal car il produit une fragmentation importante.
La libération se produit quand un processus est évacué de la mémoire. On marque alors le bloc à libre et on le fusionne éventuellement avec des blocs adjacents.
Supposons que X soit le bloc qui se libère, on a les schémas de fusion suivants :
|
|
Figure 10
La fragmentation de la mémoire est particulièrement dommageable car elle peut saturer l’espace disponible rapidement. Ceci est particulièrement vrai pour les gestionnaires de fenêtrage. Pour la diminuer, on peut compacter régulièrement la mémoire. Pour cela, on déplace les processus, par exemple, vers la bas de la mémoire et on les range l’un après l’autre de manière contiguë. On construit alors un seul bloc libre dans le haut de la mémoire. Cette opération est coûteuse et nécessite parfois des circuits spéciaux.
Par ailleurs, une fois qu’un objet ou une zone a été utilisé, le programmeur système doit récupère la mémoire « à la main » par une libération du pointeur sur cette zone – free(). Ceci est une source d’erreurs car on oublie parfois cette opération. Si on alloue dans une fonction, il n’y a plus moyen d’accéder au pointeur après le retour de la fonction. Le bloc de mémoire est alors perdu et inutilisable. On a une « fuite de mémoire » – memory leak.
Certains langages ou systèmes incorporent la récupération automatique de mémoire
– garbage collection. Ils libèrent ainsi le programmeur de cette tâche. C’est le cas de Java. Il est alors très facile d’éliminer immédiatement une zone par l’affectation objet = null. Sans ça, le récupérateur doit déterminer tout seul qu’une zone n’a plus de référence dans la suite du programme.
Le va-et-vient est mis en œuvre lorsque tous les processus ne peuvent pas tenir simultanément en mémoire. On doit alors en déplacer temporairement certains sur une mémoire provisoire, en général, une partie réservée du disque (swap area ou backing store).
Sur le disque, la zone de va-et-vient d’un processus peut être allouée à la demande dans la zone de va-et-vient générale (swap area). Quand un processus est déchargé de la mémoire centrale, on lui recherche une place. Les places de va-et-vient sont gérées de la même manière que la mémoire centrale. La zone de va-et-vient d’un processus peut aussi être allouée une fois pour toute au début de l’exécution. Lors du déchargement, le processus est sûr d’avoir une zone d’attente libre sur le disque.
Le système exécute pendant un certain quantum de temps les processus en mémoire puis déplace un de ces processus au profit d’un de ceux en attente dans la mémoire provisoire. L’algorithme de remplacement peut être le tourniquet.
Le système de va-et-vient, s’il permet de pallier le manque de mémoire nécessaire à plusieurs utilisateurs, n’autorise cependant pas l’exécution de programmes de taille supérieure à celle de la mémoire centrale.
La pagination permet d’avoir en mémoire un processus dont les adresses sont non contiguës. Pour réaliser ceci, on partage l’espace d’adressage du processus et la mémoire physique en pages de quelques kilo-octets. Les pages du processus sont chargées à des pages libres de la mémoire.
On conserve l’emplacement des pages par une table de transcodage :
0 | 14 |
1 | 4 |
2 | 8 |
3 | 12 |
La pagination permet d’écrire des programmes ré-entrants, c’est à dire où certaines pages de codes sont partagées par plusieurs processus.
Alors que la pagination propose un espace d’adressage plat et indifférencié, (ceci est offert par la famille de µ-processeurs 68000), la segmentation partage les processus en segments bien spécifiques. On peut ainsi avoir des segments pour des procédures, pour la table de symboles, pour le programme principal, etc. Ces segments peuvent être relogeables et avoir pour origine un registre de base propre au segment. La segmentation permet aussi le partage, par exemple du code d’un éditeur entre plusieurs processus. Ce partage porte alors sur un ou plusieurs segments.
Un exemple réduit d’architecture segmentée est donné par la famille 8086 qui possède 3 segments : le code (Code Segment), la pile (Stack Segment) et les données (Data Segment).
La mémoire virtuelle permet d’exécuter des programmes dont la taille excède la taille de la mémoire réelle. Pour ceci, on découpe (on « pagine ») les processus ainsi que la mémoire réelle en pages de quelques kilo-octets (1, 2 ou 4 ko généralement).
L’encombrement total du processus constitue l’espace d’adressage ou la mémoire virtuelle. Cette mémoire virtuelle réside sur le disque. À la différence de la pagination présentée précédemment, on ne charge qu’un sous-ensemble de pages en mémoire.
Ce sous-ensemble est appelé l’espace physique (réel).
Lorsqu’une adresse est générée, elle est transcodée, grâce à une table, pour lui faire correspondre son équivalent en mémoire physique. Ce transcodage est effectué par des circuits matériels de gestion : Memory Management Unit (MMU). Si cette adresse correspond à une adresse en mémoire physique, le MMU transmet sur le bus l’adresse réelle, sinon il se produit un défaut de page. Pour pouvoir accéder à la page dont on a généré l’adresse, on devra préalablement la charger en mémoire réelle. Pour cela, on choisit parmi les pages réelles une page « victime »; si cette dernière a été modifiée, on la reporte en mémoire virtuelle (sur le disque) et on charge à sa place la page à laquelle on désirait accéder.
Figure 14 L’unité de gestion de mémoire.
L’algorithme de remplacement de page optimal consiste à choisir comme victime, la page qui sera appelée le plus tard possible. On ne peut malheureusement pas implanter cet algorithme, mais on essaye de l’approximer le mieux possible, avec de résultats qui ont une différence de moins de 1 % avec l’algorithme optimal.
La technique FirstIn-FirstOut est assez facile à implanter. Elle consiste à choisir comme victime, la page la plus anciennement chargée.
L’algorithme de remplacement de la page la moins récemment utilisée (Least Recently Used) est l’un des plus efficaces. Il nécessite des dispositifs matériels particuliers pour le mettre en œuvre. On doit notamment ajouter au tableau une colonne de compteurs. Par logiciel, on peut mettre en œuvre des versions dégradées.
Lorsqu’on retire une page de la mémoire centrale, on peut choisir la plus ancienne :
• Du point de vue global (la plus ancienne du système);
• Du point de vue local (la plus ancienne du processus)D
En général, l’allocation globale produit de meilleurs résultats.
Lors du lancement d’un processus ou lors de sa reprise après une suspension, on provoque obligatoirement un certain nombre de défauts de pages. On peut essayer de les limiter en enregistrant, par exemple, l’ensemble de travail avant une suspension. On peut aussi essayer de le deviner. Par exemple, au lancement d’un programme, les premières pages de codes seront vraisemblablement exécutées.
6.1 Qu est ce qu un fichier?
Un fichier, dans un premier temps, peut s’assimiler à un ensemble de données sur disque. Cette vision n’est cependant que partielle et la plupart des systèmes d’exploitation, notamment Unix, en offre une notion plus générale. Dans cet exemple, les fichiers recouvrent aussi bien les données, sur une grande variété de supports, les programmes, l’ensemble des caractères frappés au clavier ou l’horloge du système. Le système d’exploitation réalise alors la mise en correspondance de ces « fichiers » avec divers dispositifs physiques.
Les fichiers d’un système d’exploitation représentent une partie des objets que celuici manipule et avec lequel il échange des informations ; l’autre partie étant composée des processus. Il est important de distinguer le point de vue algorithmique sur les fichiers qui concerne toujours un ensemble de données, de celui que nous examinons ici.
L’algorithmique décrit la mise en œuvre d’un certain nombre de manipulations telles que la structuration de l’ensemble des données, l’insertion d’éléments, etc. Les systèmes d’exploitation considèrent le système de fichiers essentiellement comme une interface avec des objets relativement statiques. Cette interface dispose d’une structure propre, souvent hiérarchique, permettant de désigner un ensemble de données, mais aussi des périphériques.
L’interface du système de fichiers aura pour objectif de banaliser le plus possible les objets qu’elle recouvre, ainsi le système Unix masque complètement les disques locaux et les périphériques sous une arborescence unique. Il nomme aussi ses objets d’une manière uniforme. On copie par exemple le texte : « abcd », tapé au clavier, dans un fichier par la commande :
$ cat > fichier abcd ^D |
et sur un terminal, par la commande :
$ cat > /dev/tty abcd ^D |
Le système de fichiers répartis « NFS » permet des opérations similaires à travers un réseau.
Les systèmes d’exploitation modernes adoptent une structure hiérarchique des fichiers. Chaque fichier appartient à un groupe d’autres fichiers et chaque groupe appartient lui-même à un groupe d’ordre supérieur. On appelle ces groupes, des répertoires ou des dossiers, suivant les terminologies.
Le schéma de la structure générale d’un système de fichiers prend l’aspect d’un arbre, formé au départ d’un répertoire « racine » recouvrant des périphériques et notamment un ou plusieurs disques. Dans chacun des répertoires on pourra trouver d’autres répertoires ainsi que des fichiers de données ordinaires.
Figure 15 Une « vue » du gestionnaire de fichiers d’Open Look
Les répertoires sont, eux aussi, des fichiers, constitués des noms et des références de tous les fichiers qu’ils contiennent. Cette structure permet alors de construire l’arborescence du système. Pour désigner un fichier quelconque, il suffit de spécifier l’enchaînement des répertoires nécessaires à son accès, à partir de la racine. Dans le système Unix, les répertoires de cet enchaînement sont séparés par une oblique : « / ». Dans le système DOS, par une contre-oblique : « \ ».
Dans le système Unix, chaque répertoire contient aussi sa propre référence, ainsi que celle du répertoire immédiatement supérieur. « . » désigne le répertoire courant, et « .. », le répertoire supérieur. L’inclusion de ces deux références permet de désigner un fichier quelconque, relativement au répertoire courant.
Pour effectuer des entrées-sorties par une désignation relative, un processus ne peut s’exécuter que dans un répertoire. La référence de ce fichier est donc conservée dans la table de chaque processus.
En dehors des fichiers ordinaires et des répertoires, nous avons vu que le système Unix possède des fichiers spéciaux de périphériques blocs et caractères. Il connaît aussi les tubes nommés, qui sont des structures FIFO (FirstIn-FirstOut) permettant la communication entre processus.
La commande ls -l permet de vérifier le type des fichiers : « – » désigne les fichiers ordinaires, « d » les répertoires, « c » les périphériques caractères, « b » les périphériques blocs, et « p » les tubes nommés.
Les fichiers de données sur disques se composent d’un ensemble de blocs, comprenant un nombre fixe d’octets. La première structure possible de ces fichiers correspond à la suite des octets des blocs; ces blocs étant ordonnés. L’accès à un octet se fait alors par un déplacement à partir de l’origine du premier bloc : le début du fichier. Le système Unix, ainsi que le système DOS ne connaissent que cet accès.
Certains systèmes structurent les fichiers sous la forme d’enregistrements séquentiels de tailles fixes, l’ensemble des blocs étant toujours ordonné linéairement. Ce principe est à peu près le même que le précédent. Il permet de lire, de substituer un élément ou d’en ajouter d’autres à la fin, mais on ne peut pas en détruire ou en insérer de nouveaux au milieu du fichier.
L’accès séquentiel indexé est une méthode plus élaborée, mise en œuvre, entre autres, sur les systèmes MVS d’IBM. On structure les blocs des fichiers sous la forme d’un arbre. Cette structure permet l’insertion d’éléments à n’importe quel endroit d’un fichier.
Les fichiers de données sur les disques se répartissent dans des blocs de taille fixe correspondant à des unités d’entrées-sorties du contrôleur de ce périphérique. La lecture ou l’écriture d’un élément d’un fichier impliquera donc le transfert du bloc entier qui contient cet élément. On peut formater les disques, – les rendre utilisables par le système d’exploitation –, avec une taille particulière de blocs. Cette taille résulte d’un compromis entre la vitesse d’accès aux éléments des fichiers et l’espace perdu sur le disque.
Lors d’un transfert de données d’un disque vers l’espace d’adressage d’un processus, le temps de lecture ou d’écriture sur le disque est négligeable devant le temps d’accès au bloc, et ceci quelle que soit la taille du bloc. Pour un accès rapide, on aura donc intérêt à prendre des blocs de grande taille. Cependant, les fichiers, y compris les fichiers de 1 octet, ont une taille minimale de 1 bloc. Si un disque comprend beaucoup de fichiers de petite taille et si les blocs sont de grandes dimensions, l’espace gaspillé sera alors considérable.
Des études sur de nombreux systèmes ont montré que la taille moyenne d’un fichier est de 1 Ko. Ce chiffre recouvre bien sûr de grandes variations entre, par exemple, une base de données et un ordinateur à usage pédagogique. Il conduit à des tailles courantes de blocs de 512, de 1024 ou de 2048 octets.
Chaque disque conserve, dans un ou plusieurs blocs spécifiques, un certain nombre d’informations de fonctionnement, telles par exemple que le nombre de ses blocs, leur taille, … Il mémorise aussi en général l’ensemble de ses blocs ainsi que leur état dans une table. Si cette table est binaire, un disque de n blocs devra alors réserver une table de n bits; la position de chaque bit indiquant si le bloc est libre ou s’il est utilisé par un fichier, par exemple, 0 pour un bloc occupé et 1 pour un bloc libre. Certains systèmes stockent l’ensemble des blocs libres dans une liste chaînée.
À chaque fichier correspond une liste de blocs contenant ses données. L’allocation est en générale non contiguë et les blocs sont donc répartis quasi-aléatoirement sur le disque. Les fichiers conservent l’ensemble de leurs blocs suivant deux méthodes : la liste chaînée et la table d’index.
L’ensemble des blocs d’un fichier peut être chaîné sous la forme d’une liste. Chaque bloc contiendra des données ainsi que l’adresse du bloc suivant. Le fichier devant mémoriser indépendamment le numéro du 1er bloc. Par exemple, si un bloc comporte 1024 octets et si le numéro d’un bloc se code sur 2 octets, 1022 octets seront réservés aux données et 2 octets au chaînage du bloc suivant.
Cette méthode rend l’accès aléatoire aux éléments d’un fichier particulièrement inefficace lorsqu’elle est utilisée telle quelle. En effet pour atteindre un élément sur le bloc n d’un fichier, le système devra parcourir les n-1 blocs précédents.
Le système MS-DOS utilise des listes chaînées. Il conserve le premier bloc de chacun des fichiers dans son répertoire. Il optimise ensuite l’accès des blocs suivants en gardant leurs références dans une Table d’Allocation de Fichiers (FAT). Chaque disque dispose d’une FAT et cette dernière possède autant d’entrées qu’il y a de blocs sur le disque. Chaque entrée de FAT contient le numéro du bloc suivant.
Avec la table suivante :
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | … |
X | X | EOF | 13 | 2 | 9 | 8 | L | 4 | 12 | 3 | L | EOF | EOF | L | BE | … |
où « XX » indique la taille du disque, « L » désigne un bloc libre et « BE » un bloc endommagé, le fichier commençant au bloc 6, sera constitué des blocs : 6 → 8 → 4 → 2.
Le parcours de la FAT est nettement plus rapide que la chaîne des blocs. Cependant si elle n’est pas constamment, tout entière en mémoire, elle ne permet pas d’éviter les entrées-sorties du disque.
Le système Unix répertorie chaque fichier par un numéro unique pour tout un disque. À chaque numéro, correspond un enregistrement, un nœud d’index, (i-node), comportant un nombre fixé de champs. Parmi ces champs, certains, 13 au total, mémorisent l’emplacement physique du fichier. Les 10 premiers champs (sur les 13) contiennent les numéros des 10 premiers blocs composant le fichier.
Nœud d’index | bloc n° 1 | bloc n° 2 | bloc n° 3 | bloc n° 4 | … |
Pour les fichiers de plus de 10 blocs, on a recours à des indirections. Dans le cas du système Unix, le bloc n° 11 contient le numéro d’un bloc composé lui-même d’adresses de blocs de données. Si les blocs ont une taille de 1024 octets et s’ils sont numérotés sur 4 octets, le bloc n° 11 pourra désigner jusqu’à 256 blocs. Au total, le fichier utilisant la simple indirection aura alors une taille maximale de 266 blocs. De la même manière, le bloc n° 12 contient une adresse, un pointeur, à double indirection, et le bloc n° 13, un pointeur à triple indirection. Avec l’exemple que nous avons donné, un fichier peut avoir une taille maximale de 16 Go quand il utilise ces pointeurs à triple indirection.
Bloc n° 11 | Bloc n° 12 | Bloc n° 13 |
Pointeur à simple indirection | Pointeur à double indirection | Pointeur à triple indirection |
Figure 19
Les répertoires des systèmes de fichiers hiérarchiques sont des fichiers dont le contenu est particulier. Ils permettent de référencer et de retrouver physiquement les fichiers immédiatement en dessous d’eux dans la hiérarchie. La structure la plus commune des répertoires prend la forme d’un arbre, que nous avons illustré au paragraphe 1. On peut parfois mettre en œuvre des structures plus complexes, de graphes acycliques ou de graphes généralisés.
Un graphe permet à deux répertoires de référencer le même fichier. On a ainsi le moyen de partager un fichier entre, par exemple, deux utilisateurs. En général, on construit les répertoires de manière à éviter les cycles :
Cependant, on peut parfois construire des structures cycliques, telle que celles-ci :
Les répertoires du système MS-DOS possèdent une entrée par fichier et chaque entrée à la structure suivante :
Nom du fichier | Extension | Attributs | Réservé | Heure | Date | N° du 1er bloc | Taille |
Le numéro du premier bloc, cluster dans la terminologie MS-DOS, indexe la Fat et permet de retrouver la suite des éléments du fichier.
Les répertoires du système Unix disposent, eux aussi, d’une entrée par fichier. Chaque entrée possède au moins les deux champs suivants, le numéro du nœud d’index et le nom du fichier. Par exemple :
26 | . |
59 | .. |
267 | toto |
534 | titi |
La structure exacte d’une entrée varie suivant les versions d’Unix. Dans la version System V, elle est décrite par le fichier d’en-tête :
/usr/include/sys/dir.h.
On peut visualiser, et interpréter, le contenu du répertoire courant, par exemple, grâce à la commande : « od -c . »
Le numéro du nœud d’index renvoie à un enregistrement sur le disque contenant les numéros des blocs, comme on l’a présenté au paragraphe précédent. Cet enregistrement contient aussi des informations, concernant la gestion des fichiers, dont les principales sont les suivantes :
Nœud d’index |
Uid du propriétaire |
Gid du propriétaire |
Type du fichier |
Permissions |
Nombre de liens |
Taille du fichier |
Date de création |
Date du dernier accès |
Date de dernière modif. |
13 numéros de blocs et de pointeurs … |
Lorsqu’on manipule des fichiers, les nœuds d’index correspondants, auxquels s’ajoutent quelques champs supplémentaires, sont chargés en mémoire. Parmi les champs supplémentaires, on trouve notamment divers indicateurs, de verrouillage du nœud en mémoire, d’attente de processus sur le nœud, de modification en mémoire, du nœud ou du fichier, non encore reportée sur le disque. Le nœud en mémoire contient aussi, le numéro du périphérique (du disque) sur lequel se trouve le fichier, le numéro du nœud d’index, le nombre de fois où le fichier a été chargé en mémoire (le nombre d’ouvertures en cours).
Un mécanisme permet de construire des structures de répertoires ayant la forme de graphes acycliques orientés et ainsi de partager des fichiers. Pour cela, plusieurs répertoires doivent référencer le même nœud d’index, éventuellement sous un nom différent. On appelle chaque nouveau référencement d’un nœud, la création d’un lien sur le fichier correspondant.
Une fois les liens établis, le fichier pourra être désigné sous l’un quelconque des noms. Pour sa part, le nœud d’index conservera, dans un de ses champs, le nombre de fichiers qui le référence, indépendamment des protections sur le fichier. L’ajout d’une référence incrémentera le nombre de liens du nœud. L’élimination d’un fichier par un utilisateur décrémentera ce nombre. La destruction effective du nœud, et par-là du fichier, aura lieu lorsque le compte des liens sera nul.
Les processus ne peuvent pas manipuler directement les données du disque. Ils sont obligés, pour cela, de les déplacer en mémoire centrale. Les transferts s’effectuent par blocs et il est souvent inutile d’effectuer autant d’entrées-sorties sur disque que d’accès au fichier. La plupart des systèmes de fichiers gèrent les entrées-sorties grâce à une mémoire intermédiaire : la mémoire cache ou l’antémémoire. Cette mémoire cache fait correspondre des blocs tampons en mémoires aux blocs du disque.
La stratégie générale d’utilisation de la mémoire cache est la suivante : on lui alloue un certain nombre de blocs en mémoire centrale. Lorsque l’on accède à un élément d’un fichier, on examine la suite de ces blocs. Si le bloc désiré – celui qui contient l’élément du fichier – se trouve dans la mémoire cache, on pourra y lire ou y écrire directement l’élément, sinon, on produira un bloc libre de la mémoire cache, on y chargera le bloc du disque et on effectuera les opérations de lecture ou d’écriture. Un bloc – un tampon – pourra être partagé dans la mémoire cache par plusieurs processus et il ne pourra s’y trouver qu’en un seul exemplaire.
Dans le système Unix, les blocs tampons sont reliés par un double chaînage des blocs libres et des blocs occupés. Ils possèdent, d’autre part, un en-tête indiquant le numéro du périphérique, le numéro du bloc, ainsi que l’état du tampon :
N° du périph. | N° du bloc | État | Ptr sur le bloc de données | Ptr tampon occupé suiv. | sur | Ptr sur tampon occupé préc. | Ptr sur tampon libre suiv. | Ptr sur tampon libre préc. |
Le système Unix ordonne ses tampons suivant l’ordre dernière utilisation. En cas de demande de chargement d’un bloc du disque, il éliminera le moins récemment utilisé (algorithme LRU).
Chaque disque physique au format Unix possède la structure suivante :
Bloc démarrage | Super bloc | Table bits i-nœuds | Table blocs données | bit | snœuds d’index (plusieurs blocs…) | Données (plusieurs blocs…) |
Le bloc de démarrage contient le code nécessaire à tout disque pour se lancer.
Le super bloc donne des informations sur les fichiers, telles que le nombre de nœuds d’index, le nombre de blocs, le premier bloc de données, la taille maximale de fichiers, etc.
Le super bloc est chargé en mémoire où on lui ajoute quelques informations supplémentaires, telles que le numéro du périphérique, un indicateur de mise à jour, etc.
Le système Unix permet de réunir plusieurs disques sous une arborescence unique.
On réalise cet attachement par un « montage », grâce à la commande :
/etc/mount /dev/fd1 /users
où /dev/fd1 désigne le disque à monter.
Le système « monté » devient :
Une table des volumes montés garde la trace des différents périphériques. Elle contient les éléments suivants :
N° du périph. monté | Ptr sur tampon super bloc | le du | Ptr sur le i-nœud du système monté | Ptr sur le i-nœud du répert. de montage |
Elle permet d’associer les disques à l’arborescence du système. Ainsi l’utilisateur peut parcourir les répertoires sans en supposer leur organisation physique.
Les disques magnétiques sont des dispositifs délicats et il est fréquent de retrouver certains de leurs blocs, ou parfois même leurs références, dans un état incohérent.
Pour vérifier cette cohérence, on peut reconstruire la table des blocs occupés, en examinant tous les fichiers et en incrémentant le compte d’un bloc chaque fois qu’il est référencé. Si le système est cohérent, la table des blocs occupés doit être complémentaire de celle des blocs libres.
Si un bloc n’apparaît ni dans la table des blocs libres, ni dans celle des blocs occupés, le bloc est dit manquant. On peut le réparer en le rajoutant à la liste des blocs libres.
Si un bloc appartient à deux ou plusieurs fichiers, le système est sans doute profondément incohérent. On peut effectuer une tentative de réparation en recopiant le bloc défectueux à des emplacements libres autant de fois qu’il est référencé puis en affectant chacun de ces nouveaux blocs à l’un des fichiers qui les référençaient.
On peut aussi vérifier la cohérence du point de vue des liens. Chaque numéro de nœud d’index doit apparaître autant de fois dans la structure arborescente qu’il possède de liens.
Sur la plus part des systèmes Unix, le programme fsck effectue cette tâche à chaque démarrage, si nécessaire.
7.1 Comment le processeur communique avec l extØrieur ?
L’ordinateur peut effectuer des entrées-sorties – échanger des données – avec des organes externes :
• électroniques, tels que les mémoires,
• magnétiques, tels que les disques ou les disquettes,
• mécaniques, tels que le clavier, les imprimantes, …
Les périphériques – les organes externes – mis en œuvre sont de nature très différente et l’un des objectifs du système de gestion des entrées-sorties est de préserver une relative homogénéité dans leur mode d’accès. Les entrées-sorties forment une très part importante, au moins en volume de code, des systèmes d’exploitation. Leur étude, qui présente beaucoup plus d’aspects techniques que théoriques, est cependant parfois négligée.
On classe les périphériques d’entrées-sorties en deux catégories principales : les périphériques blocs et les périphériques caractères.
On gère les données des périphériques blocs par l’intermédiaire de blocs de tailles fixes, couramment de 512 ou 1024 octets et parfois plus. L’accès à chacun de ces blocs étant aléatoire. Les disques correspondent, à peu près, aux périphériques blocs.
Les autres périphériques sont donc, en général, des périphériques caractères. Ils fournissent ou acceptent une suite de caractères sans réelle structure. Les terminaux, les écrans, les mémoires sont des périphériques caractères.
On doit noter que cette classification des périphériques en deux catégories est assez grossière et, dans certains cas, plutôt arbitraire. Certains périphériques ne correspondent ni à l’une ni à l’autre définition, d’autres étant recouverts, par contre, par les deux définitions, les dérouleurs de bandes par exemple.
La plus part du temps, le processeur ne commande pas directement les périphériques. Il utilise pour cela un circuit spécialement adapté, un « contrôleur », de caractéristiques propres à chaque périphérique. Les commandes du processeur au périphérique s’opéreront alors par l’intermédiaire de ce contrôleur. Ces commandes correspondent directement aux mécanismes physiques du périphérique telles, par exemple, que le déplacement du bras d’un lecteur de disque. Par ailleurs, les contrôleurs sont souvent d’une grande complexité électronique.
On relie les contrôleurs au bus de l’ordinateur et on leur alloue, à chacun, un certain nombre d’adresses. À ces différentes adresses, on émettra des commandes de pilotage ou on effectuera des entrées-sorties de données. Le contrôleur reconnaîtra ses adresses grâce à une logique de décodage. Dans certains ordinateurs, les contrôleurs ne sont pas reliés au bus mais à des voies d’entrées-sorties spécifiques.
Les contrôleurs et le processeur opèrent en parallèle. Le contrôleur dispose d’une mémoire tampon, pour lui permettre, par exemple, de lire des données en provenance du périphérique d’entrée pendant que le processeur traite une autre tâche. Le contrôleur signale l’achèvement de son travail en émettant une interruption qui lui est propre. À la réception de cette interruption, le processeur se branche à un emplacement fixe. La valeur de cet emplacement est contenue dans une adresse – un vecteur – spécifique à chaque interruption. À l’adresse d’interruption, une routine réalise, en général, le transfert des données vers la mémoire principale, puis rend la « main » au processus précédent.
Contrôleur Adresses sorties | d’entrées- Vecteur s (IRQ) |
Horloge 040-043 | 0 |
Clavier 060-063 | 1 |
Port COM 1 3F8-3FF | 4 |
Table 1. Les adresses et les vecteurs de quelques périphériques de l’IBM PC.
Pour transférer des données sur un disque, le pilote de ce disque émet des commandes, aux adresses adéquates, dans les registres du contrôleur. Ces commandes sont, la mise en route éventuellement, le positionnement de la tête sur le bon cylindre, puis l’instruction d’écriture, avec les paramètres nécessaires, notamment le secteur où écrire le bloc. Le pilote transmet ensuite les données à écrire, l’une après l’autre, dans les tampons du contrôleur puis il se bloque en attendant la fin de l’écriture effective.
Pendant ce temps, le processeur pourra élire une autre tâche. Le contrôleur écrira seul, sur le disque, les données contenues dans ses tampons et quand il aura terminé son action, il émettra une interruption. L’interruption débloquera le pilote et lancera l’ordonnanceur. Ce dernier pourra activer le pilote qui vérifiera alors que l’opération s’est bien déroulée.
Pour les périphériques blocs, le transfert des données entre la mémoire et le contrôleur n’est pas, en général, réalisé par le processeur, mais par un circuit spécialisé d’accès direct à la mémoire (DMA).
Ce circuit DMA est attaché au périphérique. Il utilise des instants particuliers du cycle de fonctionnement du processeur pour écrire les données de la mémoire centrale vers les tampons du contrôleur ou bien l’inverse. Il permet ainsi d’occuper le processeur à d’autres tâches de traitement. Avant de le lancer, le processeur doit bien sûr lui communiquer, le sens du transfert, l’adresse d’origine de la zone mémoire où on désire lire ou écrire des données, ainsi que le nombre d’octets à transférer.
L’écriture d’un pilote d’entrées-sorties est une tâche assez complexe. Nous n’examinerons que les grandes lignes de la structure des entrées-sorties sous Unix. Pour plus de détails, le lecteur pourra considérer les exemples se trouvant sur le
serveur Hewlett-Packard dans les répertoires : /usr/lib/drivers ou /systems/DRIVERS.
Le système Unix désigne chaque périphérique par un fichier. De manière courante, on rassemble les fichiers de tous les périphériques dans le répertoire : /dev (device). Ces fichiers sont appelés « spéciaux ».
On obtient leurs caractéristiques avec la commande : ls -l, ceci donne, par exemple, sur un ordinateur Sun du:
total 11 crw--w---- 1 pierre 0, 0 Mar 25 21:49 console crw-rw-rw- 1 root 11, 0 Mar 11 16:13 des crw-r----- 1 root 7, 0 Mar 11 16:11 drum crw-rw---- 1 root 41, 0 Mar 11 16:11 dump crw-r----- 1 root 3, 11 Mar 11 16:11 eeprom crw-rw-rw- 1 root 32, 3 Mar 11 16:18 gpone0d crw-rw-rw- 1 root 29, 0 Mar 11 16:11 kbd crw------- 1 root 37, 40 Mar 11 16:11 nit crw-rw-rw- 3 root 18, 4 Mar 11 16:12 nrmt0 crw-rw-rw- 1 root 21, 2 Mar 25 14:13 ptyp2 crw-rw-rw- 1 root 21, 10 Mar 11 16:13 ptypa crw-rw-rw- 1 root 21, 11 Mar 11 16:13 ptypb
La première lettre indique que c’est un fichier spécial de périphérique et elle décrit son type :
• « c » désigne un périphérique caractère;
• « b » désigne un périphérique bloc.
Viennent ensuite les droits de lecture, d’écriture et d’exécution pour respectivement : le propriétaire, les membres de son groupe, et les autres utilisateurs.
Après ces droits, le système indique le nom du propriétaire du fichier. On remarque que c’est root pour la plus part de ces fichiers.
Bach, op. cit., p. 158, et Tanenbaum, op. cit., p. 60.
Bach, ., p. 156.
op. cit., p. 267-270.
Il est à noter que MS-DOS, bien qu’il ne soit pas multiprogrammable, n’est pas non plus un système monoprogrammé stricto sensu; c’est une créature qui tient des deux.
[5] Malheureusement pas sur le 8086 ce qui a eu des conséquences considérables sur les systèmes DOS et Windows.
Program Segment Prefix ou PSP.
[7] Ce quantum est bien sûr plus long que le quantum de commutation de tâches vu au chapitre sur les processus. Il tient compte du fait que les temps de chargement et de déchargement sont beaucoup plus longs que les temps de commutation de processus.
[8] Ce terme, folder en anglais, consacré par le MacIntosh et repris par Windows 95, est nettement plus cohérent que le précédent. Cependant, il est peu utilisé par les informaticiens « purs et durs », c'est pourquoi nous garderons la désignation « répertoire ».
Tanenbaum, op. cit., p. 285.
Reprise de Tanenbaum, op. cit., p. 288.
Et donc à ce contrôleur.