Ordinateur à programme enregistré
Un ordinateur à programme enregistré (ou calculateur à programme enregistré; en anglais stored-program computer) est un ordinateur qui enregistre les instructions des programmes qu'il exécute dans sa mémoire vive[1].
La définition précédente est souvent étendue pour exiger que le traitement des instructions et des données en mémoire doive être interchangeable et uniforme[2] - [3] - [4].
Un ordinateur avec une architecture de von Neumann enregistre ses données et ses instructions dans la même mémoire; un ordinateur avec une architecture Harvard enregistre ses données et ses instructions dans des mémoires séparées[5] - [6]
Histoire
L'expression ordinateur à programme enregistré est parfois utilisée comme synonyme d'architecture de von Neumann[7] - [8]. Cependant, le professeur Jack Copeland considère qu'il est « historiquement inapproprié d'appeler les ordinateurs à programme enregistré des machines de Von Neumann »[9]. Hennessy et Patterson ont écrit que les premières machines de Harvard étaient considérées comme « réactionnaires par les défenseurs des ordinateurs à programme enregistré[10] ».
Le concept d'ordinateur à programme enregistré remonte à un article de 1936 sur une machine de Turing universelle[11]. Von Neumann connaissait cet article et l'a fait connaître à ses collaborateurs[12].
Plusieurs des premiers ordinateurs n'étaient pas programmables. Ils n'exécutaient qu'un seul programme câblé dans l'ordinateur. Comme ces ordinateurs ne contenaient pas d'instructions, ils n'avaient pas besoin de mémoire. D'autres ordinateurs, bien que programmables, conservaient leurs programmes sur des cartes perforées qui étaient physiquement fournies à l'ordinateur au besoin.
En 1936, Konrad Zuse a anticipé, comme démontré par ses deux applications de brevet, que les instructions de l'ordinateur pouvaient être conservées dans la même mémoire que les données.
En avril 1948, la reconversion de l'ENIAC en ordinateur à programme enregistré s'achève. Il exécute ses premières instructions le 12 avril 1948[13] - [14]. La simulation de Monté Carlo exécutée le 10 mai 1948 par l'ENIAC est la plus ancienne trace de programme enregistré connue à ce jour[15].
Le Small-Scale Experimental Machine (SSEM) de l'Université de Manchester[16] est également considéré comme le premier ordinateur électronique à avoir exécuté un programme enregistré en mémoire ; cet événement s'est produit le [17] - [18]. Néanmoins, le SSEM n'était pas considéré comme un ordinateur achevé, mais plutôt comme une démonstration de faisabilité en vue de la construction de l'ordinateur Manchester Mark 1.
Le , le EDSAC à Cambridge exécute un programme enregistré en mémoire et, de ce fait, est aussi considéré comme le « premier ordinateur électronique numérique à programme enregistré complet et opérationnel »[19].
Certains enfin affirment que l'IBM SSEC, opérationnel en , aurait été le premier ordinateur à programme enregistré[20]. Cette affirmation est controversée, à cause de la nature hiérarchique de la mémoire de l'IBM SSES, et à cause de certains aspects de ses opérations, comme l'accès aux relais ou aux rubans magnétiques qui fonctionnaient par branchements manuels[21].
Paradigmes de programmation
Le concept de programme enregistré, initialement apparu sur un mémo d'IBM en 1949[22], possède des contours assez flous, cause d'erreurs de classification et de critiques[23]. Afin de lever toute ambiguïté, il lui est parfois préféré une hiérarchisation des paradigmes de programmation, permettant tant de clarifier que de catégoriser les différentes approches[24].
Paradigme 1
Dans ce premier paradigme, la programmation consiste en un recâblage physique de la machine à travers des fiches et des interrupteurs. Cette approche possède certains avantages intrinsèques, telle que la très grande vitesse d’exécution des programmes.
La série des calculateurs Collossus, ou encore l’ENIAC dans sa configuration initiale de 1945, se sont ainsi distingués des autres machines de leur époque par leur vitesse de traitement.
Le principal inconvénient de ce paradigme est la difficulté inhérente au câblage des programmes, rendant leur mise en œuvre et leur débogage lent et difficile.
Paradigme 2
Ce paradigme utilise une programmation par instructions, ce qui réduit le temps de mise en œuvre des programmes.
Les instructions sont généralement codées sous forme numérique (typiquement binaire ou décimale) et enregistrées sur un support externe, tels que des bandes ou cartes perforées. Le programme n’est pas enregistré dans la machine mais exécuté instruction par instruction depuis un support externe en lecture seule.
Cette approche comprend plusieurs inconvénients :
- La vitesse d’exécution du programme est égale à la vitesse de lecture du support
- Le programme ne peut réaliser que des branchements très proches (s’il possède même la possibilité d’effectuer des branchements), ou nécessite sinon une action manuelle pour remplacer les cartes perforées en exécution, ou encore rembobiner le ruban perforé vers le branchement souhaité. Pour cette raison, les machines utilisant le paradigme P2 sont rarement Turing-complètes, ou ne le sont que de façon théorique.
Des exemples de machines utilisant ce paradigme de programmation sont la machine analytique de Charles Babbage, ou encore les Zuse Z1, Z2, Z3 et Z4.
Paradigme 3
Ce paradigme est le premier membre de la famille des architectures à programme enregistré.
Les instructions deviennent enregistrées dans la mémoire de la machine, permettant de réaliser des branchements conditionnels, des boucles, des fonctions, et d’exécuter le programme à vitesse électronique. Dans ce paradigme, la mémoire est rapide d’accès mais la mémoire contenant les instructions est en lecture seule, les processus ne peuvent donc la modifier.
Un exemple d’une machine employant ce paradigme est l’ENIAC dans sa configuration de 1948. Ce type de machine se rencontre également de nos jours dans le domaine de l'embarqué, avec certaines consoles de jeux-vidéos à cartouches, ou encore pour des champs d'application sécurisés.
Paradigme 4
Le paradigme P4 reprend le fonctionnement du P3, mais emploie une mémoire modifiable, permettant aux processus tant de lire que d’écrire les instructions enregistrées en mémoire.
Le premier exemple théorique de ce paradigme fût publié par Alain Turing en 1936 avec le concept de Machine de Turing Universelle. L’EDSAC, le Manchester Mark 1, ou l’ENIAC à la fin de sa carrière sont des exemples de machines célèbres employant ce paradigme de façon concrète.
Paradigmes P5 et P6
Le paradigme P4 contient le potentiel pour un programme d’éditer l’espace mémoire dédié aux instructions. Dans le paradigme P5, ce potentiel est réalisé mais se limite à l’insertion, la manipulation et la suppression d’instructions.
La Machine de Turing Universelle est là aussi une bonne illustration de ce paradigme.
Le paradigme P6, quant à lui, est très proche du paradigme P5, mais permet de concevoir des programmes pouvant produire de nouvelles instructions à la demande au cours de son exécution, et donc entièrement auto-modifiables. De plus, il permet à un programme de modifier à chaud le code d’un autre programme, un concept révolutionnaire dans les années 1940 bien qu'éloigné aujourd'hui des bonnes pratiques de sécurité informatique.
Ce paradigme fût conceptualisé avec le « First Draft of a Report on the EDVAC » en 1945, selon une inspiration du fonctionnement du cerveau humain. Turing et Zuse ont eux aussi mentionné l’idée d’un programme pouvant s’automodifier, ou en modifier un autre en temps réel[25], et inspira la création du ACE et Pilot ACE de Turing.
Références
- (en) Joanne Allison, Stored-program Computers, 1997 « Copie archivée » (version du 27 septembre 2011 sur Internet Archive)
- (en) William F. Gilreath et Phillip A. Laplante, Computer Architecture : A Minimalist Perspective, Springer, , 220 p. (ISBN 978-1-4020-7416-5, lire en ligne), p. 24
- (en) Edwin D. Reilly, Milestones in computer science and information technology, Greenwood Publishing Group, , 380 p. (ISBN 978-1-57356-521-9, lire en ligne), p. 245
- (en) Miles J. Murdocca et Vincent P. Heuring, Principles of Computer Architecture, Prentice-Hall, , 553 p. (ISBN 0-201-43664-7), p. 5
- (en) Daniel Page, A Practical Introduction to Computer Architecture, Springer, , 642 p. (ISBN 978-1-84882-255-9, lire en ligne), p. 148
- (en) Mark Balch, Complete digital design : a comprehensive guide to digital electronics and computer system architecture, McGraw-Hill Professional, , 460 p. (ISBN 978-0-07-140927-8, lire en ligne), p. 149
- (en) Daniel Page, A Practical Introduction to Computer Architecture, Springer, , 642 p. (ISBN 978-1-84882-255-9, lire en ligne), p. 153
- (en) Ivor Grattan-Guinness, Companion encyclopedia of the history and philosophy of the mathematical sciences, JHU Press, , 1806 p. (ISBN 978-0-8018-7396-6, lire en ligne), p. 705
- (en) Jack Copeland, A Brief History of Computing: ENIAC and EDVAC, 2000
- (en) John L. Hennessy, David A. Patterson et David Goldberg, Computer architecture : a quantitative approach, Morgan Kaufmann, (ISBN 978-1-55860-724-8, lire en ligne), p. 68
- (en) B. Jack Copeland, Colossus : the secrets of Bletchley Park's codebreaking computers, Oxford University Press, , 480 p. (ISBN 978-0-19-284055-4, lire en ligne), p. 104
- (en) Christof Teuscher, Alan Turing : life and legacy of a great thinker, Springer, , 542 p. (ISBN 978-3-540-20020-8, lire en ligne), p. 321-322
- Thomas Haigh, Mark Priestley et Crispen Rope, ENIAC in Action:Making and Remaking the Modern Computer, MIT Press, , 153, 157, 164, 174, 194 (ISBN 978-0-262-03398-5)
- (en) Thomas Haigh, « Los Alamos Bets on ENIAC: Nuclear Monte Carlo Simulations, 1947–1948 », sur IEEE Annals of the History of Computing, (consulté le )
- (en-US) « ENIAC Monte Carlo Poster | ENIAC In Action » (consulté le )
- (en) « Electronic Digital Computers », Nature, Nature, no 162, , p. 487 (DOI 10.1038/162487a0, lire en ligne, consulté le )
- (en) Rául Rojas et Ulf Hashagen, The first computers : history and architectures, MIT Press, , 457 p. (ISBN 978-0-262-68137-7, lire en ligne), p. 379
- (en) Daniel Page, A Practical Introduction to Computer Architecture, Springer, , 642 p. (ISBN 978-1-84882-255-9, lire en ligne), p. 158
- (en) Mike Hally, Electronic Brains : Stories from the Dawn of the Computer Age, National Academies Press, , 300 p. (ISBN 978-0-309-09630-0, lire en ligne), p. 96
- (en) Emerson W. Pugh, Building IBM : shaping an industry and its technology, MIT Press, , 405 p. (ISBN 978-0-262-16147-3, lire en ligne), p. 136
- (en) Arthur Tatnall, History of Computing : Learning from the Past : IFIP WG 9.7 International Conference, HC 2010, held as part of WCC 2010, Brisbane, Australia, September 20-23, 2010 : proceedings, New York, Springer, , 227 p. (ISBN 978-3-642-15198-9 et 978-3-642-15199-6, DOI 10.1007/978-3-642-15199-6_17, lire en ligne)DOI 10.1007/978-3-642-15199-6_17
- (en) Haigh, T., The Nature of Computation. Logic, Algorithms, Applications, Springer, 2013, , p.247
- (en) Haigh, T., Reconsidering the Stored-Program Concept’, IEEE Annals of the History of Computing, vol. 36, , p.4-17
- (en) B. Jack Copeland et Giovanni Sommaruga, « The Stored-Program Universal Computer: Did Zuse Anticipate Turing and von Neumann? », dans Turing’s Revolution: The Impact of His Ideas about Computability, Springer International Publishing, (ISBN 978-3-319-22156-4, DOI 10.1007/978-3-319-22156-4_3#sec4, lire en ligne), p. 43–101
- (en) B. Jack Copeland et Giovanni Sommaruga, « The Stored-Program Universal Computer: Did Zuse Anticipate Turing and von Neumann? », dans Turing’s Revolution: The Impact of His Ideas about Computability, Springer International Publishing, (ISBN 978-3-319-22156-4, DOI 10.1007/978-3-319-22156-4_3#sec3, lire en ligne), p. 43–101
Source
- (en) Cet article est partiellement ou en totalité issu de l’article de Wikipédia en anglais intitulé « Stored-program computer » (voir la liste des auteurs).