THINK : vers une architecture de systèmes flexibles

Cette thèse s’inscrit dans la perspective de l’émergence d’un environnement global de traitement de l’information, dans lequel la plupart des objets physiques qui nous entourent sont équipés de processeurs et sont dotés de capacités de communication. Un tel environnement engendre inévitablement une grande diversité tant dans le matériel physique que dans les applications logicielles. Chacune de ces applications possède des contraintes plus ou moins fortes, qui lui sont propres. Ces contraintes peuvent être très variées. Il peut s’agir de contraintes de qualité de service comme dans les systèmes temps réels ou le multimédia. Il peut aussi s’agir de contraintes de fonctionnement, telles que la taille mémoire ou la consommation d’énergie, comme dans le domaine de l’embarqué par exemple les assistants personnels et les téléphones portables.

Les travaux menés ces dernières années sur les infrastructures logicielles, par exemple dans le domaine du temps réel [Schmidt et al. 1998], du multimédia [Blair et Stefani 1997] ou de la mobilité [Noble et al. 1997], montrent qu’il est impossible de disposer de mécanismes universels de gestion des ressources, des communications, etc. Ces travaux suggèrent qu’on ne puisse envisager de construire une infrastructure logicielle universelle où toutes les fonctions seraient adaptées à toutes les utilisations possibles. Il faut donc s’orienter vers une architecture suffisamment flexible. Celle-ci serait pensée pour être adaptée aux contraintes des applications et à l’environnement matériel. Cette architecture pourrait se décliner en différentes instances et permettre de construire des systèmes flexibles ou adaptés à des domaines fortement spécialisés.

Le système d’exploitation est une partie essentielle d’un système informatique. Il assure l’intermédiaire entre les programmes des utilisateurs et les ressources matérielles d’une ou de plusieurs machines. Son rôle est de fournir un environnement dans lequel les utilisateurs peuvent exécuter leurs propres programmes conçus en vue d’une utilisation particulière, comme la gestion, le calcul, la programmation, les jeux, etc. Ces différents programmes sont appelés des applications. L’objectif principal d’un système d’exploitation est de rendre l’utilisation des ressources matérielles aussi simple que possible et de les multiplexer entre les différentes applications. Son deuxième objectif est de permettre une utilisation aussi efficace que possible des ressources matérielles. Ces deux objectifs, transparence et efficacité, sont potentiellement contradictoires et nécessitent d’effectuer des compromis. Par exemple, les mécanismes de protection mis en œuvre dans les systèmes, qui permettent d’isoler les applications et qui fournissent l’illusion d’une machine non partagée, sont coûteux. Mais ils permettent une utilisation plus sûre de la machine.

Le système d’exploitation, une machine étendue
Pour permettre l’utilisation des ressources, le système d’exploitation fournit aux applications un ensemble de services. Ces services sont des abstractions construites à partir des ressources matérielles, comme les périphériques et les contrôleurs. Ces abstractions sont typiquement : de la mémoire virtuelle, des processus, des fichiers, des « sockets », etc. Le système se charge pour sa part de traduire, de la façon la plus efficace possible, les requêtes effectuées sur ces abstractions par des instructions pour microprocesseur, coprocesseur, contrôleur divers. Un système d’exploitation peut donc être vu comme une machine étendue, c’est-à-dire une machine virtuelle.

Le système d’exploitation, un multiplexeur
Les problèmes se compliquent lorsqu’une même machine est partagée simultanément par plusieurs utilisateurs exécutant chacun leurs propres applications. C’est en effet au système d’exploitation de contrôler et de coordonner l’exploitation des ressources matérielles et des ressources abstraites entre les différentes applications. Il doit donc offrir des mécanismes d’exécution concurrente tels que des primitives de synchronisation pour éviter les conflits d’accès, et des mécanismes de communication tels que de la mémoire partagée. Ici, le système d’exploitation peut être vu comme un multiplexeur de ressources.

Pourquoi une nouvelle architecture ?

L’infrastructure logicielle répartie, une extension naturelle
De nouvelles difficultés apparaissent lorsque les applications se répartissent en s’exécutant simultanément sur plusieurs machines. Le rôle de l’infrastructure logicielle répartie, qui peut être vue comme une extension naturelle du système d’exploitation, est alors de fournir des services offrant des mécanismes de répartition. Ces mécanismes sont par exemple la communication, la tolérance aux défaillances des nombreuses entités mises en jeu, etc. Les bénéfices attendus sont par exemple, le partage des ressources comme les imprimantes ou les disques, l’amélioration des performances par la parallélisation des traitements, la fiabilisation par la redondance ou tout simplement l’échange de données comme la messagerie électronique.

Évolution des systèmes d’exploitation

La préhistoire
Sur les machines à tubes électroniques des années 1940, la programmation se faisait intégralement en langage machine sur des cartes perforées [Tanenbaum 1994, Silberschatz et Galvin 1998]. Le système d’exploitation était alors inconnu et les applications s’exécutaient directement sur la machine. D’autre part, l’introduction du transistor, inventé par Bell en 1947, permit la conception de machines plus fiables, plus petites et plus performantes.

Traitement par lots, le premier concept
Au milieu des années 1950, le traitement par lots fut adopté pour limiter les manipulations de cartes perforées. L’idée était de collecter un ensemble de travaux avec un petit ordinateur, puis de les transférer via une bande magnétique sur un ordinateur plus performant mais aussi plus onéreux. Un programme spécial, en fait l’ancêtre des systèmes d’exploitation d’aujourd’hui, permettait de lire, de mettre en mémoire et d’exécuter de façon séquentielle l’ensemble des travaux d’un lot. À cette époque, les ordinateurs étaient surtout utilisés pour les calculs scientifiques programmés en Fortran ou en assembleur. Les systèmes d’exploitation les plus connus étaient FMS (Fortran Monitor System) et IBSYS d’IBM.

Spool et multiprogrammation, la parallélisation des travaux
Jusqu’au début des années 1960, l’utilisation du processeur restait limitée par la lenteur des lecteurs de cartes. La solution proposée alors consistait à faire chevaucher les opérations d’entrées-sorties avec l’exécution des travaux. Ce concept, appelé « spool » (« Simultaneous Peripheral Operation On Line »), put être mis en œuvre avec l’apparition des disques qui étaient utilisés comme un grand tampon. Ainsi, les travaux étaient transférés depuis les cartes sur le disque simultanément à l’exécution du travail en cours. Dès que ce travail se terminait, le système d’exploitation chargeait alors depuis le disque le nouveau travail. Le concept de « spool » était utilisé de façon similaire pour les impressions. Néanmoins, lorsque le travail en cours attendait la fin d’une opération d’entrée-sortie, le processeur restait inoccupé. Pour remédier à cela, le concept de multiprogrammation fut proposé au début des années 1960 par IBM avec l’OS/360. L’idée était de partitionner la mémoire afin d’y mettre simultanément plusieurs travaux. Lorsque le travail courant devait attendre, le processeur pouvait exécuter un autre travail. Ainsi, le processeur pouvait pratiquement être utilisé en permanence. Le choix du travail à exécuter était décidé par un ordonnanceur. C’était la première fois que le système d’exploitation prenait lui-même des décisions pour les utilisateurs.

Table des matières

1 Introduction
1.1 Contexte et objectif de la thèse
1.2 Pourquoi une nouvelle architecture ?
1.2.1 Fonction et service d’un système d’exploitation
1.2.2 Évolution des systèmes d’exploitation
1.2.3 Comment aller plus loin ?
1.3 Plan de la thèse
2 Principes et techniques de construction des systèmes
2.1 Définitions
2.2 Abstraction et virtualisation des ressources
2.2.1 Ressources matérielles
2.2.2 Ressources systèmes
2.2.3 Processus
2.2.4 Machines virtuelles
2.3 Concepts d’utilisation des ressources
2.3.1 Désignation et liaison
2.3.2 Allocation
2.3.3 Synchronisation
2.4 Principes d’organisation des systèmes
2.4.1 Structuration en couches
2.4.2 Structuration orientée objets
2.4.3 Structuration orientée événements
2.4.4 Structuration par référentiel
2.4.5 Structuration par flot de données
2.4.6 Langages de description d’architecture
2.5 Interposition
2.5.1 Proxy
2.6 Modèle de communication dans les systèmes
2.6.1 Modèle de communication par variable partagée
2.6.2 Modèle de communication par appel de méthode
2.6.3 Modèle de communication par message
2.6.4 Modèle de communication par événements
2.7 Noyaux de systèmes d’exploitation
2.7.1 Systèmes à domaine de protection unique
2.7.2 Noyaux monolithiques
2.7.3 Micronoyaux
2.7.4 Noyaux extensibles
2.7.5 Exonoyaux
2.8 Infrastructures logicielles réparties
2.8.1 Intergiciels
2.8.2 Systèmes d’exploitation répartis
2.9 Conclusion
3 Architecture logicielle THINK
3.1 Objectifs de l’architecture
3.1.1 Ce qui n’est pas abordé
3.2 Concepts mis en œuvre
3.2.1 Concepts de base
3.2.2 Liaison flexible
3.2.3 Domaine
3.2.4 Ressource
3.3 Conclusion
4 Conclusion

Cours gratuitTélécharger le document complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *