Vue simplifiée d'un système informatique
Types de systèmes informatiques
Modularité des systèmes informatiques
Structure en couche des logiciels
Couches de langages
et machines virtuelles
Ce que le simple utilisateur perçoit d'un système informatique :
Il n'y a pas que les PC ! Les systèmes informatiques se présentent sous des formes très variées allant des plus gros, les supercalculateurs aux plus petits tels que les cartes à puce. Les PC deviennent de plus en plus puissants et remplacent progressivement de plus en plus souvent les superordinateurs dans les grands centres de calculs.
C'est donc sous la forme de PC (Personnal Computer) que se présentent le plus souvent les systèmes informatiques mais ils se présentent aussi sous d'autres formes plus discrètes.
On trouve par exemple les « Systèmes embarqués ». Il s'agit de tous les systèmes automatisés construits autour d'un microprocesseur ou d'un microcontrôleur. Le microcontrô;leur est un circuit intégré qui regroupe sur la même puce tous les éléments d'un système informatique : processeur, mémoire, et interfaces d'entrées/sorties. On trouve des systèmes embarqués dans les voitures, les appareils photos, les photocopieuses, bref dans toutes les machines où des processus peuvent être automatisés.
Les systèmes informatiques se banalisent tellement qu'on pourrait même parler d' ordinateurs jetables. C'est le cas pour certains objets sans grande valeur tels que les cartes à puce ou les cartes de vœux qui pour votre anniversaire carillonnent l'air de «Happy birthday to you ».
Toute description un peu avancée d'un système informatique commence par faire la distinction entre le « matériel » informatique ou « hardware » et ce qui est impalpable, les programmes que l'on désigne dans ce contexte par le mot « logiciel » ou « software »
PC, câbles, écran, imprimante, disques durs, CD-ROM, ports USB
Carte mères, cartes d'extension,
Processeur, interruptions, DMA, coprocesseurs,
L'essentiel de la masse d'un système informatique réside dans le logiciel, les programmes.
Pour le simple utilisateur, le système informatique n'est autre que le support des ses applications. Il a appris à utiliser l'interface du système d'exploitation mais son fonctionnement interne ainsi que celui du matériel le concerne assez peu. Pour notre part, c'est précisément le fonctionnement du système ou plus modestement la structure de ce système qui nous intéresse et plus particulièrement celle du logiciel : « l’essentiel de la masse d’un système informatique. »
Qu'est-ce qui fait que l'utilisateur a l'impression de manipuler non pas des composants électroniques, des disques ou des codes binaires mais bien des documents, le traitement de ses données ou la communication ?
Entre le matériel dont la complexité nous échappe et l'utilisateur, quelque chose a été fait pour que les composants matériels et logiciels soient parfaitement interchangeables et, pour ce faire, d'une modularité exceptionnelle.
Le hardware est fait d'une multitude de composants
Tous collaborent pourtant comme s'ils ne faisaient qu'un.
Une série de modules dont les plus fondamentaux sont invisibles à l'utilisateur.
Ces modules doivent pouvoir être modifiés ou échangés facilement.
Ils doivent donc autant que possible être indépendants les uns des autres
=> Ces modules sont idéalement superposés pour former une structure en couche .
Chaque couche n'a de liaisons qu'avec les deux couches attenantes.
La notion de couche d'abstraction (abstraction layer) nous permet de décrire les systèmes informatiques comme s'il s'agissait d'empilement de couches qui se superposent en apportant à chaque niveau supplémentaire de nouvelles fonctions de plus en plus élaborées et reposant sur les fonction plus élémentaires assurées par les couches sous-jacentes.
Ces notions de couches d'abstraction ou de structure en couches seront réutilisées plusieurs fois dans ces notes de cours. Tantôt pour décrire les langages de programmation, tantôt pour décrire l'architecture des machines, pour la structure des logiciels, les communications des réseaux, etc.
Matériel : | Circuits électroniques / circuits logiques. On dira que c'est au niveau du matériel que se trouve la couche d'abstraction la plus basse. |
Système d'exploitation : | Elément le plus déterminant d'un système informatique. |
Applications : | Traitement de texte, gestionnaire de bases de données, tableurs etc. Compilateurs, debugger |
Utilitaires : | Services de base aux utilisateurs. Ex. interface graphique, interpréteur de commandes, gestionnaires divers qui tournent en tâches de fond, impriment, cherchent le courrier etc. |
Utilisateurs : | C'est à eux que le système informatique est destiné. Les utilisateurs interagissent avec la couche de plus haut niveau. |
Le système de fichier
Les développeurs d'applications disposent de primitives pour ouvrir, lire, écrire et refermer un fichier comme on le ferait avec un document quelconque, un livre par exemple. La programmation de fichier est donc possible sans devoir connaître le mécanisme interne des disques, des disquettes ou d'autres lecteurs amovibles.
Le système de fichiers est donc pour le développeur une couche logicielle dont il ne doit connaître que l'interface d'application pour pouvoir l'utiliser en pouvant faire abstraction des détails propres à la mise en œuvre des fichiers.
L'illustration de cette vue en couches qui suit est empruntée à un ouvrage d'Andrew Tanenbaum dont la référence est donnée ci-dessous.
Les langages informatiques sont à considérer à plusieurs niveaux allant du plus bas, le plus proche des composants électronique au plus proche de l'utilisateur, plus indépendant du matériel.
Andrew Tanenbaum conçoit le système informatique comme un empilement de couches qui correspondent à des langages de plus en plus évolués, compris par des machines virtuelles de plus en plus abordables pour l'utilisateur et de moins en moins dépendantes du matériel.
Comment fonctionne la machine virtuelle M1 ?
Nous nous référons ici aussi à l'approche en six couches que Andrew Tanenbaum développe dans son ouvrage « Architecture de l'ordinateur ». Maintenant que nous savons comment interagissent les langages de niveaux successivement de plus en plus élaborés, voyons quels sont réellement ces langages dans nos machines informatiques.
Tout ordinateur est conçu à partir de composants de base rudimentaires : des portes logiques qui effectuent des fonctions simples ( ET, OU, Inversion)
L' ALU et les registres construits à partir des circuits logiques du niveau précédent .
L' ALU fait des opérations arithmétiques et logiques à partir de données contenues dans les registres où il range aussi les résultats de ses calculs. Ce mécanisme est commandé, soit par un microprogramme qui interprète les instructions du niveau suivant, soit directement par le matériel .
Initialement, on l'appelait « couche microprogrammée » car un interpréteur logiciel commandait les registres et l'ALU.
On parle actuellement de « chemin des donnés » car l'ALU et les registres sont commandés par des circuits matériels.
Elle développe l'architecture du jeu d'instructions = entre 50 et 300 instructions que doivent connaître ceux qui programment la machine en langage assembler. Elle est la vision que les compilateurs ont de la machine.
Une bonne architecture ISA
donne une machine performante
permet aux compilateurs de générer des codes optimisés au mieux
permet d'exécuter les programmes anciens sans les modifier ( compatibilité amont )
Pour les programmeurs système, cette couche ajoute aux instructions de la couche ISA de nouvelles instructions essentielles pour l'écriture du système d'exploitation.
Ces dernières sont souvent appelées appels système ( system calls )
Elles apportent les trois techniques suivantes:
La mémoire virtuelle pour faire comme si la machine avait plus de mémoire qu'elle n'en a réellement
Les entrées/sorties sur fichiers : Un fichier est une abstraction permettant de localiser l'écriture ou la lecture d'une suite d'octets ( exemple: une unité de stockage ou une imprimante )
Le parallélisme permet à plusieurs processus de s'exécuter, de communiquer et de se synchroniser
Langage symbolique
Le langage d'assemblage est une forme symbolique d'un des langages sous-jacents.
Des mnémoniques qui représentent les instructions sont plus faciles à utiliser pour l'écriture et la lecture du code.
Les adresses s'écrivent sous forme symbolique. Il est possible de donner des noms aux variables. Des directives d'assemblages permettent de segmenter le code et de contrôler la portée des variables ou des procédures (locales et globales / privées ou publiques)
Les macros allègent l'écriture en englobant des séries d'instructions répétitives.
Le code assembleur ( code source ) est ensuite traduit en langage machine ( code objet ).
Le programme de traduction = assembleur .
Il y a autant de langages d'assemblage que de microprocesseurs.
Langages de haut niveau :
Basic Pascal / Delphi C / C++ Java C# Python, Perl, PHP |
Les langages évolués permettent de se préoccuper uniquement de la logique du programme sans se soucier de l'organisation matérielle de la machine |
Basic knowledge about Operating Systems :
Un site consacré aux systèmes d'exploitation avec de particulièrement bonnes
explication sur ce qu'est la structure en couche des systèmes d'exploitation.
Version francophone du même site (qui n'est malheureusement plus mise à jour depuis 2005 )