STRUCTURE DE BASE DES ORDINATEURS

Retour

©2002 Jean Bellec

On distincte habituellement deux parties importantes dans un système informatique: le matériel, le hardware, et le logiciel, le software. Ces mots font la différence entre la partie qui est fabriquée, qui peut se toucher et qui répond aux critères économiques des autres objets manufacturés et la partie qui ne se voit pas, qui est modifiable après l'achat et la première installation du matériel. Le logiciel ne peut pas se manifester sans le matériel. Le matériel sans logiciel n'est qu'une pièce totalement incapable d'une quelconque utilisation.

En fait cette différence n'allait pas de soi dans les premiers ordinateurs qui avaient été développés avec les mêmes intentions que l'avaient été les automates. L'ordinateur ENIAC était câblé pour faire des calculs balistiques tout comme les programmateurs de machines outils l'étaient. Bien entendu, même au début, la conception des ordinateurs pour des raisons de coût de réalisation entraînait "naturellement" une structuration de la machine, de manière à réutiliser des structures répétitives ne nécessitant qu'une fois pour toutes les calculs des circuits électroniques. C'est ainsi que furent standardisés le concept de porte (on les appelait souvent des conditionneurs), de mémoire, puis d'additionneurs.

Ce fut John von Neumann, dans son rapport sur l'EDVAC qui chercha à formaliser davantage les différents ensembles de circuits d'un ordinateur pour définir ce qu'on appelle depuis longtemps le modèle de von Neumann. 
Ce modèle diffère de celui mis en oeuvre dans l'ordinateur ASCC d'IBM et de Aiken appelé modèle de Harvard, et auquel appartenait aussi l'ENIAC en posant comme principe que la mémoire centrale pouvait stocker indifféremment le code des programmes et les données du calcul, ouvrant ainsi la voie au développement de la programmation automatique (les langages compilés) et à l'intelligence artificielle.

En fait, à compter  des années 1960, le modèle de von Neumann fut progressivement altéré et les ordinateurs devinrent de plus en plus proche du modèle de Harvard.
Ces altérations ont plusieurs dimensions: 
  • l'introduction de la microprogrammation (inventée par l'anglais Maurice Wilkes, mais mis en oeuvre par l'IBM 360 et beaucoup de congénères de celui-ci) fut la plupart du temps à l'origine d'une mémoire spéciale (mémoire de contrôle). Même lorsque cette mémoire ne se différencie pas physiquement de la mémoire de données , elle possède des attributs spécifiques la rendant au moins en régime de croisière à une modification programmée.
  • le time-sharing permettant à plusieurs processus d'exécuter le même programme sur des données différentes (ou aussi l'exécution de programmes SIMD) conduisit à isoler une copie du programme de ses données. Des mécanismes de segmentation assez généralisés sur les machines CISC rendirent le code inaltérable pendant le déroulement des programmes.
  • la complexité des mécanismes de partage dans les systèmes multiprocesseurs conduisit à accepter le modèle de mémoire NUMA, généralisé dans les superordinateurs parallèles depuis les années 1990.
    les délais qu'implique le contrôle d'intégrité des programmes dans un environnement multiprogrammé multiprocesseurs a aussi entraîné une optimisation par défaut du matériel sur l'hypothèse d'un modèle de Harvard.
  • la généralisation de l'exploitation transactionnelle des ordinateurs, elle aussi, a entraîné une vision plus proche du modèle de Harvard, celle d'un automate travaillant sur des données messages d'entrées-sorties et bases de données.

 


LANGAGES

Un des problèmes agités pendant les premières années de l'informatique a été celui des langages de programmation. Certes, beaucoup ne se sont pas posés de problèmes métaphysiques et ont utilisés le code d'ordre offert par le matériel, progressivement rendu compréhensible par l'utilisation d'un traducteur ou assembleur, aidé de pseudo-instructions de déclaration des données et de macro-instructions.

Mais d'autres se sont posés le problème d'une interprétation directe par la machine de langages "naturels", soit relativement proches de la langue courante (tels BASIC ou ses homologues PAF, LSA ou REXX) ou bien beaucoup plus abstraits, mais plus puissants, tels la famille de langages autour de LISP.

On a, à la fin des années 1950, découvert que l'approche technique de l'assembleur, c'est à dire d'un programme de traduction d'un code compréhensible à l'humain en un code binaire interprété par le matériel était tout à fait applicable et permettait au programmeur de faire largement abstraction des particularités de la machine. Cependant, plusieurs courants de pensée subsistaient parmi les créateurs de "langages de haut niveau" et conduisirent à plusieurs familles de langage. Une première raison en était les différences alors existantes entre calculateurs de gestion et calculateurs scientifiques.Une seconde était la volonté de pérenniser l'effort fait par les programmeurs pour apprendre un certain langage -la compatibilité-.
Les calculateurs scientifiques proposaient des opérations d'indexation, des opérations sur des nombres binaires en virgule flottante tandis que les calculateurs de gestion utilisaient des données décimales et travaillaient sur des données de longueur variable. Les premiers ont donné le jour à FORTRAN (développé à IBM par John Backus), les seconds à COBOL (normalisé par le comité CODASYL).

Des réflexions sur une plus grande régularité du langage permettant la définition d'algorithmes par des scientifiques non-programmeurs donnèrent lieu à la création du langage ALGOL qui a introduit des objets et des attributs qui n'étaient pas directement présents dans les ordinateurs (notamment, l'utilisation systématique de la structure de bloc). ALGOL se heurta à la concurrence de FORTRAN déjà répandu dans son vivier naturel, mais resta une référence auxquels ses successeurs PL/1, Pascal, ADA, et C continueront de se référer.

A l'origine, les compilateurs produisaient directement le code binaire nécessaire pour l'exécution d'un programme sur ses données et des pseudo-instructions (déclarations de subroutines, INCLUDE) permettait de récupérer dans un nouveau programme les acquis antérieurs extraits automatiquement d'une bibliothèque de code source. 
Malheureusement, les temps de compilation étaient à l'époque loin d'être négligeables et se comptaient en dizaine de minutes. La solution d'une bibliothèque de code source pour partager les acquis était loin d'être satisfaisante.
Par ailleurs, l'idée de réaliser un programme pour chaque ensemble de données devint vite inacceptable surtout pour les applications de gestion.
IL devint évident au début des années 1960 qu'il fallait séparer la compilation de l'exécution et de pouvoir faire des compilations limitées aux nouvelles portions des programmes qu'il fallait associer les données aux programmes juste avant l'exécution (chargement). Le système d'exploitation inclut dès cette époque les deux programmes système éditeur de liens et chargeur en addition aux compilateurs (ou assembleurs). Il devint possible de réaliser des programmes dont une partie était écrite en un langage de haut niveau et l'autre en assembleur par exemple.

Cependant; l'idée de l'interpréteur ne disparut pas complètement mais elle se réfugia dans l'interpréteur de commandes du système d'exploitation (presque toujours un langage propriétaire développé par les créateurs du système d'exploitation). L'utilisation d'un interpréteur de commandes pour réaliser des programmes de production émergea dans les systèmes d'exploitation en temps partagé avec les avatars de BASIC.