L'avènement des ordinateurs

Histoire du Basic

Ordinateur


Eniac

Les ordinateurs, sous une forme ou une autre, existent depuis l'aube de l'humanité. Il n'y a aucune exigence que les ordinateurs soient numériques ou même électroniques.

Voici la différence : un appareil numérique convertit une entrée en informations, généralement binaires, alors qu'un appareil analogique peut gérer une gamme d'entrées (par exemple, pensez à un tourne-disque ou même à un thermostat non électronique).

Stonehenge, le monument du Wiltshire, en Angleterre, était peut-être le premier ordinateur au monde. Plus qu'un simple arrangement aléatoire de grosses pierres, Stonehenge a permis aux anciens humains de faire des prédictions astronomiques, avec un peu d'aide du soleil et des étoiles.

Les chiffres sur nos mains nous aident à compter et à effectuer les calculs les plus simples ; ces chiffres ont probablement stimulé le développement du système de numérotation en base 10 (bien que dans les temps anciens, il y ait eu d'autres bases en circulation, comme la base 60 du babylonien, ou sexagésimale).

Finalement, à court de doigts, les êtres humains ont les ont remplacés par des pierres et les bâtons et par des quantités jusqu'à ce que même ces substituts physiques soient remplacés par des symboles. Les calculs avec ces symboles ont rapidement suivi.

L'utilisation d'aides mécaniques pour le calcul remonte à des milliers d'années. Considérez le boulier, probablement développé par les Chinois (bien que l'appareil puisse provenir du Moyen-Orient). Considérez également le mécanisme d'Antikythera, un outil analogique, qui a été construit pour les prédictions astronomiques.

Le mathématicien John Napier, qui a créé des logarithmes - transformant en fait la multiplication en addition - a également inventé un ensemble de barres de numérotation analogiques connues sous le nom de Napier's Bones ; sans les logarithmes, la règle à calcul, également un dispositif analogique, n'aurait jamais été développée.

A la Renaissance, un jeune Blaise Pascal invente une machine à additionner pour aider son père, agriculteur fiscaliste (ce qu'on appellerait aujourd'hui collecteur d'impôts), dans les calculs. Au moment où Pascal était adolescent, il avait amélioré et breveté la machine à additionner, lui permettant également d'effectuer des multiplications et des divisions.

Un autre mathématicien de la Renaissance, Gottfried Wilhelm Leibniz, qui a coinventé le calcul avec Isaac Newton, a amélioré la conception de Pascal, qualifiant sa machine mise à jour de "calculateur de pas". Le compteur de pas de Leibniz est cependant mort rapidement en raison de ses coûts de production élevés.

Recherchez le mot "ordinateur" dans les dictionnaires datant de la première moitié du XXe siècle et les définitions feront invariablement référence à des personnes qui calculent, pas à des machines.

Malgré les machines à calculer de Pascal et de Leibniz, les «ordinateurs» - c'est-à-dire les «calculatrices humaines» - ont effectué la plupart des calculs pour les tables logarithmiques et trigonométriques qui se sont avérées vitales pour les calculs d'ingénierie, astronomiques et mathématiques à la Renaissance.

Même pendant la Seconde Guerre mondiale, des siècles plus tard, il y avait encore un grand nombre d'ordinateurs (humains), principalement des femmes, générant des chiffres pour les tables de tir balistiques, entre autres calculs critiques.

La première personne à avoir conçu un ordinateur fonctionnel, bien que construit à titre posthume, fut Charles P. Babbage. Babbage, né le fils d'un banquier londonien, était professeur de mathématiques à l'Université de Cambridge au XIXe siècle.

Frustré par les erreurs qu'il rencontrait avec des tables mathématiques précalculées calculées à la main, il a esquissé le moteur de différence (pour résoudre des équations polynomiales) et le moteur analytique (un tabulateur et un ordinateur avancés). Le moteur analytique était programmable : Babbage utilisait un système sophistiqué de cartes perforées, réutilisé à partir de la machine à coudre à tisser Jacquard développée par Joseph Marie Jacquard.

Ada Lovelace, la fille du poète Lord Byron, a été la collaboratrice épistolaire de Babbage pendant plusieurs années avant sa mort; elle a commencé à correspondre avec le professeur alors qu'elle n'avait que dix-sept ans. Sa mère, Lady Anne Isabella Milbanke Byron, qui a quitté son mari Lord Byron peu après la naissance d'Ada, avait enseigné à Ada la logique et les mathématiques, non pas parce que Lady Anne croyait aux capacités de sa fille dans les matières en soi, mais parce qu'elle voulait s'assurer qu'Ada ne ressemblerait en aucune façon à son père.

Beaucoup de gens considèrent Ada Lovelace comme la première programmeuse informatique au monde parce qu'elle a contribué à un long addendum de notes à un article publié sur le moteur analytique par Louis Menabrea (elle a également traduit le travail de Menabrea de l'italien à l'anglais), qui décrivait spécifiquement les méthodes de programmation de l'appareil.

Dans les Notes, elle présente la première boucle de programmation ainsi qu'un programme de calcul des nombres de Bernoulli.

Lovelace a également prévu une variété d'applications intéressantes pour l'ordinateur, comme avec la musique : "[s] en supposant, par exemple, que les relations fondamentales des sons aigus dans la science de l'harmonie et de la composition musicale étaient susceptibles de telles expressions et adaptations, le moteur [analytique] pourrait composer des morceaux de musique élaborés et scientifiques de n'importe quel degré de complexité ou d'étendue », a-t-elle écrit.

Babbage a reçu un financement suffisant du gouvernement britannique pour construire ses machines - ce qui nécessitait la fabrication de milliers d'engrenages et d'autres pièces mobiles - mais une technologie d'outillage insuffisante les rendait physiquement impossibles à construire à l'époque.

Néanmoins, l'idée de programmer et de stocker des informations via des cartes perforées était viable, devenant finalement la norme pour les ordinateurs électromécaniques et électroniques plus d'un siècle plus tard.

L'inventeur américain Herman Hollerith a mis en pratique le concept de la carte perforée à la fin du XIXe siècle. Hollerith a travaillé au US Census Bureau ; au recensement de 1890, des millions de cartes perforées avaient été utilisées pour compiler des statistiques démographiques, et le recensement fut achevé en un temps record grâce à ses innovations.

Plus tard, Hollerith a fondé la Tabulating Machine Company, spécialisée dans les équipements de tabulation, qui a été consolidée dans les années 1920 pour former International Business Machines Corporation (IBM).

Les cartes perforées standardisées à 80 colonnes qu'IBM a introduites en 1928, parfois appelées cartes Hollerith ou simplement cartes IBM, étaient l'antécédent des écrans à 80 colonnes - avec 80 caractères par ligne - des terminaux et des moniteurs à temps partagé ainsi que des micro-ordinateurs tels que la série Commodore PET 8000.

Les premières machines à calculer automatisées utilisées par les recenseurs américains n'étaient ni numériques ni programmables. Les années 1920 ont apporté les tamis Lehmer, de grandes machines capables de factoriser des expressions mathématiques. Les tamis Lehmer étaient électroniques, mais reposaient sur une masse de chaînes, d'interrupteurs et d'engrenages.

Peu avant la Seconde Guerre mondiale, le célèbre ingénieur et inventeur américain Vannevar Bush a construit un analyseur différentiel, qui était un ordinateur analogique mécanique résolvant des équations différentielles, tandis que l'ingénieur allemand Konrad Zuse a construit le Zl, un simple ordinateur programmable, dans l'appartement de ses parents.

Pendant la Seconde Guerre mondiale, les ordinateurs ont commencé à prendre leur essor, jetant les bases de ce qu'Alvin Toffler a appelé plus tard "le choc du futur": une quantité incroyable de changements se produisant dans la société en un court laps de temps.

Il y avait l'ordinateur électromécanique Harvard Mark I, également appelé Automatic Sequence Controlled Calculator (ASCC), conceptualisé par Howard Aiken à l'Université de Harvard et construit par IBM. L'impulsion d'Aiken pour la construction de l'ordinateur était une nécessité : il a dû effectuer des calculs approfondis pour sa thèse de doctorat.

Mais Aiken s'est rendu compte qu'une telle machine pouvait être plus qu'un poney à un tour, alors il a écrit une proposition à IBM pour l'aider à sa construction. Dans la proposition, Aiken a noté que l'augmentation de la puissance de calcul stimulait le progrès scientifique ; il a expliqué comment le Mark I, qui utilisait des cartes et des bandes de papier pour l'entrée, serait capable de gérer un éventail d'opérations mathématiques, telles que les puissances, les logarithmes, les symboles de regroupement, les fonctions trigonométriques, les fonctions hyperboliques, les racines réelles (c'est-à-dire les solutions numériques) pour équations, et même l'intégration et la différenciation numériques.

Le déclenchement de la Seconde Guerre mondiale a d'abord interféré avec les plans de construction de la machine. Mais en 1944, le Mark I a finalement été achevé et remis à Aiken, qui a servi dans la marine pour le reste de la guerre.

Grace Hopper, qui avait un doctorat en mathématiques de Yale et finirait par atteindre le grade de contre-amiral avant de quitter l'armée, a été chargée d'aider Aiken dans le fonctionnement de l'ordinateur. Hopper, qui a écrit un manuel Mark I complet, a contribué à populariser le terme "bug" en informatique : après avoir excisé un papillon mort qui bloquait un relais et une bande de papier, Hopper a déclaré qu'elle avait "débogué" la machine.

Le Mark I a été adapté pour résoudre des problèmes mathématiques liés à la guerre, notamment pour la conception de radars et les calculs de bombes atomiques. La Marine, pas complètement satisfaite de la machine, a commandé un deuxième ordinateur, le Mark II, qu'Aiken a également conçu. Après la guerre, deux autres modèles ont été construits - le Mark III et le Mark IV - mais ils fonctionnaient relativement lentement.

Le Mark I aurait été considérablement plus rapide s'il avait utilisé des tubes à vide, un précurseur des transistors et des micropuces. Mais le manque de fiabilité des tubes, ainsi que les contraintes de coût et de temps, ont plutôt abouti à une machine surchargée par de nombreuses pièces mobiles : bande perforée (pour le stockage des programmes, alimentée dans la machine), relais mécaniques (interrupteurs marche-arrêt commandés par des courants électriques), ajoutant des accumulateurs et des interrupteurs.

Plus il y a de pièces mobiles dans une machine, plus la probabilité de panne est élevée, ce qui rend ces ordinateurs électromécaniques loin d'être idéaux. Pour avancer, il fallait que les choses changent.

George Boole a préparé le terrain pour ce changement, bien qu'indirectement. Il est né en Angleterre en 1815, la même année qu'Ada Lovelace. Boole, avec l'aide de son père, a appris les mathématiques et les langues classiques ; il a été nommé professeur de mathématiques en Irlande.

Sa surspécialité d'intérêt, cependant, était la logique mathématique. Dans le livre Laws of Thought , Boole a décrit son algèbre booléenne , arguant que les mathématiques, et non le langage, étaient la clé de la systématisation de la logique; Boole croyait même que cette systématisation pourrait éclairer le fonctionnement interne du cerveau humain.

En fin de compte, nous pouvons réduire l'algèbre booléenne et les opérations effectuées avec elle à seulement deux opérandes : 0 (off/false) et 1 (on/true). Étant donné que dans leurs circuits, les ordinateurs numériques fonctionnent en utilisant l'algèbre booléenne et donc la logique binaire, les innovations de Boole ont été essentielles au développement de l'ordinateur. Boole n'a pas réalisé l'importance de ses idées, mais Babbage non plus, bien qu'il ait correspondu avec lui.

Deux personnes sont principalement responsables du passage des ordinateurs électromécaniques aux ordinateurs numériques, électroniques et programmables.

Le premier est Alan Turing, un mathématicien britannique. Il est né en 1912 à Londres et a montré une aptitude précoce pour les mathématiques, s'inscrivant à l'Université de Cambridge et obtenant plus tard son doctorat à l'Université de Princeton sous la direction du célèbre mathématicien Alonzo Church.

À Princeton, Turing a étudié la cryptologie, qu'il a utilisée à bon escient pendant la Seconde Guerre mondiale lorsque, après son retour à Cambridge, il a été recruté pour travailler à Bletchley Park pour aider à décoder la machine allemande Enigma. Turing a développé la Bombe électromécanique pour déchiffrer l'Enigma.

Outre le célèbre test de Turing, qui permet de déterminer si une machine communique de manière suffisamment humaine, la contribution la plus durable d'Alan Turing au domaine de l'informatique est son concept de machine universelle de Turing (UTM), présenté pour la première fois en 1936 dans article "Sur les nombres calculables, avec une application au problème d'Entscheidungsproblem." Dans l'article, Turing discute des nombres calculables et non calculables, d'un problème ouvert du mathématicien David Hilbert, du problème d'arrêt et des machines de Turing susmentionnées.

David Hilbert croyait que tous les systèmes mathématiques formels pouvaient être rendus à la fois cohérents et complets ("complet" signifiait avoir un ensemble exhaustif d'axiomes). Ce programme de formalisation est devenu l'œuvre de sa vie.

Les mathématiciens Alfred North Whitehead et Bertrand Russell ont soutenu le programme de Hilbert, publiant un opus en plusieurs volumes appelé Principia Mathematica (1910-1913) qui cherchait à placer les mathématiques sur une base solide et inébranlable. Mais le programme de Hilbert s'est effectivement effondré en 1931 grâce à Kurt Godel et ses théorèmes d'incomplétude. Godel a réussi à prouver qu'aucun système mathématique ne peut être à la fois cohérent et complet ; il y aura toujours des déclarations impossibles à prouver dans le système.

Dans son chef-d'œuvre de 1979, Godel, Escher, Bach, l'auteur Douglas Hof-stadter présente l'analogie d'une corde lourde utilisée pour relier deux navires de mer : "d'abord une flèche légère est tirée à travers l'espace, tirant derrière elle une corde fine.

Une fois que la connexion a été établie entre les deux navires de cette façon, alors la lourde corde peut être tirée à travers l'espace." La corde fine représente des preuves mathématiques" employant un ensemble très restreint de principes de raisonnement" Hofstadter explique que "Godel a montré que pour tirer la corde lourde à travers l'espace, vous ne pouvez pas utiliser une corde plus légère; il n'y en a tout simplement pas assez solide."

Reformulé, Godel a démontré que tout système mathématique axiomatique cohérent doit inclure des propositions indécidables, c'est-à-dire des propositions qui ne peuvent être prouvées ni vraies ni fausses. Principia Mathematica était mort dans l'eau.

Alonzo Church et Alan Turing ont mis le dernier clou dans le cercueil du programme de Hilbert, grâce à la réponse au problème d'Entscheidungsproblem, ou problème de décision, qui est la suivante :

existe-t-il un algorithme qui peut toujours déterminer si un énoncé mathématique est vrai ?

Hilbert a formulé le problème de décision de cette manière :

"Le problème d'Entscheidungsproblem est résolu lorsque l'on connaît une procédure par laquelle on peut décider en un nombre fini d'opérations si une expression logique donnée est généralement valide ou satisfaisable."

En utilisant différentes approches, les deux églises et Turing a répondu par la négative au problème d'Entscheidungsproblem : c'est-à-dire qu'il n'existe pas un tel algorithme. Turing a esquissé une construction théorique appelée machine de Turing pour le prouver.

Une machine de Turing est une machine à états finis (il existe un nombre dénombrable d'états) alimentée par une longue bande de papier sous une tête de lecture-écriture. La bande de papier comporte des carrés contenant des symboles, tels que 0 ou 1, qui stockent les entrées ou les sorties des calculs, mais les carrés sur la bande peuvent également être vides.

Une machine de Turing peut effacer ou écraser un symbole, changer son état, s'arrêter ou effectuer une combinaison de ces actions, tout dépend de la bande de papier - qui, bien sûr, contient le programme, que Turing a appelé le "jeu d'instructions".

Turing s'est rendu compte que ces machines de Turing à états finis étaient capables de modéliser complètement l'univers entier des possibilités informatiques; essentiellement, les opérations de chaque ordinateur conçu pourraient être réduites à au moins une machine de Turing.

Un ordinateur, et même un langage de programmation, est considéré comme "Turing complet" s'il peut faire tout ce qu'une machine de Turing peut faire. Et tout jeu d'instructions pouvant être exécuté par une machine de Turing peut également être exécuté par une machine de Turing universelle, ce qui signifie qu'un UTM peut être programmé pour agir comme s'il s'agissait d'une série de machines de Turing fonctionnant simultanément.

Mais Alan Turing n'en avait pas encore fini. Considérez l'ensemble de tous les nombres irrationnels, ou les nombres qui ne peuvent pas être écrits sous forme de fractions ou de décimales qui ont des modèles prévisibles. Certains nombres irrationnels, tels que π (le rapport de la circonférence d'un cercle à son diamètre, avec l'expansion décimale de 3,14159...), ont des jeux d'instructions finis qui peuvent s'exécuter sur l'UTM pour produire autant de chiffres de la constante que souhaité.

Ce sont les nombres calculables mentionnés dans le titre de l'article de Turing. Mais Turing a également prouvé qu'il existe une infinité d'autres nombres irrationnels qui, quel que soit le jeu d'instructions introduit dans l'UTM, ne sont calculables à aucune « ième décimale » ; ce sont les nombres non calculables.

Considérons maintenant le « problème de l'arrêt », qui pose la question suivante : un programme particulier s'arrêtera-t-il de lui-même ou glissera-t-il dans une boucle sans fin ?

Turing a classé le problème de l'arrêt comme "indécidable", en s'inspirant du travail de Godel, ce qui signifie qu'il ne peut pas être prouvé vrai ou faux : il n'y a pas d'algorithme fini qui peut toujours déterminer si un programme s'arrête (se termine) ou glisse dans une boucle sans fin.

Étant donné que le problème d'arrêt lui-même fait partie de l'ensemble de fonctions non calculables, et donc indécidable, Turing (et Alonzo Church par une méthode différente appelée calcul lambda) ont pu fournir une réponse au Rntscheidungsprobkm de Hilbert, ou problème de décision— interrompant ainsi à jamais le programme de Hilbert.

Pour résumer ce résultat clé, nous utilisons le terme fourre-tout « thèse de Church-Turing » :

toute fonction calculable est calculable en utilisant une machine de Turing. (Au lieu d'employer un UTM, Hofstadter décrit un langage informatique appelé "GlooP" qui peut en fait être programmé pour calculer le non-calculable; puis il procède à la démonstration rigoureuse que "GlooP" ne peut pas exister après tout, confirmant la thèse de Church-Turing .)

Outre Alan Turing, l'autre individu le plus responsable du passage des ordinateurs électromécaniques aux ordinateurs numériques, électroniques et programmables est le mathématicien hongrois John von Neumann.

Von Neumann a acquis le "von" lorsque son père banquier a reçu une marée héréditaire; bien que le jeune John ait démontré une forte aptitude pour les mathématiques et les langues, son père a tenté d'éloigner son fils des études de mathématiques. Mais John von Neumann a persisté, obtenant finalement un doctorat en mathématiques de l'Université de Budapest.

Au début, von Neumann s'intéressait peu aux ordinateurs. Il a pris des postes de professeur d'université, a écrit des articles avec David Hilbert et a publié de nombreux articles sur la théorie des ensembles, la théorie des jeux et la logique. Il atterrit à l'Institute for Advanced Study de Princeton, où Albert Einstein était en résidence.

Von Neumann a ensuite été recruté pour rejoindre le projet Manhattan, qui a été chargé de construire secrètement la bombe atomique pendant la Seconde Guerre mondiale ; il a utilisé le Mark I pour calculer les équations différentielles partielles des implosions de bombes atomiques.

Après la fin de la guerre, l'intérêt de von Neumann pour les ordinateurs a été piqué par l'ENIAC (Electronic Numerical Integrator and Computer), construit à la fin des années 1940 par John Mauchly et J. Presper Eck-ert à l'Université de Pennsylvanie.

L'ENIAC fonctionnait en décimal, et non en binaire, ses composants physiques se serrant à peine dans plusieurs grandes pièces ; les tubes à vide, utilisés à la place des relais électromécaniques, s'éteignent rapidement, entraînant de fréquentes interruptions des calculs.

Mais l'ordinateur comportait peu de pièces mobiles susceptibles de s'user ou de se casser. Il y avait des variantes ENIAC telles que l'EDVAC binaire et l'UNIVAC, le premier ordinateur électronique utilisé pour le recensement. (L'UNIVAC est devenu plus tard célèbre lorsque CBS a présenté la machine dans une émission de télévision projetant les résultats de l'élection présidentielle de 1952.)

Von Neumann a modifié l'ENIAC et a également conçu son propre ordinateur à l'Institute for Advanced Study. Sa machine IAS fonctionnait en binaire et stockait des instructions de programme et des données dans la même unité - une conception qui fut plus tard appelée une architecture von Neumann, que la plupart des ordinateurs utilisent aujourd'hui (le Mark I n'avait pas d'architecture von Neumann, puisque les instructions de programme et les données étaient stockées à des endroits différents).

Von Neumann a diffusé ses idées de conception de matériel dans la première ébauche d'un rapport sur l'EDVAC (1945).

La prochaine percée informatique est venue aux Bell Labs. Bell Telephone Laboratories a été créé dans les années 1920, résultat d'une fusion entre l'American Telephone and Telegraph Company (AT&T) d'Alexander Graham Bell et la Western Electric Company. Western a créé un laboratoire de recherche qui a été essaimé et renommé Bell Labs; Au départ uniquement situés à New York, les Bell Labs se sont également étendus à des installations à Murray Hill, dans le New Jersey.

Les Bell Labs ont été le berceau du futur. Le laser, la batterie solaire, la radioastronomie, le langage de programmation C, le câble transatlantique à fibre optique, tout y a été inventé. Mais peut-être que l'invention la plus importante à émerger des Bell Labs était le transistor.

Après la Seconde Guerre mondiale, l'ingénieur des Bell Labs, William Shockley, engagea Walter Brattain et John Bardeen pour étudier les propriétés des semi-conducteurs.

Shockley a d'abord cru que lui seul avait réussi à concevoir un amplificateur à semi-conducteur au silicium, mais cela s'est avéré faux : sa théorie de « l'effet de champ » n'a pas passé le cap. Ainsi, Shockley a chargé Brattain et Bardeen de trouver une solution, et, plusieurs années plus tard, ils l'ont fait : le transistor à contact ponctuel, complètement différent de l'approche antérieure de Shockley.

En colère qu'ils aient résolu le problème sans avoir besoin de son aide, Shockley a secrètement travaillé à l'amélioration de la conception de Brattain et Bardeen; peu de temps après, Shockley a dévoilé le transistor à jonction (ou sandwich).

Bien que les trois hommes aient reçu des prix Nobel pour leurs efforts, Shockley a été ostracisé aux Bell Labs et a décidé de partir. Il a fondé une société, Shockley Semiconductor, la première des grandes entreprises de haute technologie à peupler la Silicon Valley.

Mais son style de gestion inefficace et abrasif a aliéné les employés, et huit d'entre eux - connus sous le nom de "huit traîtres" - sont partis pour créer leur propre entreprise : Fairchild Semiconductor.

Finalement, Bob Noyce et Gordon Moore, deux des huit traîtres d'origine, ont quitté Fairchild pour former une autre société, Intel Corporation.

Bien sûr, Moore est surtout connu pour la loi de Moore, sa prédiction de l'augmentation exponentielle de la puissance de calcul couplée à la baisse constante des coûts.

Noyce, avec Jack Kilby de Texas Instruments, a construit les premiers circuits intégrés, ou micropuces, qui ont miniaturisé l'unité centrale de traitement (CPU) d'un ordinateur sur une seule puce : une plaquette de silicium gravée avec des milliers de transistors.

Outre un processeur, aucun ordinateur ne peut faire grand-chose sans mémoire. Il existe une hiérarchie complexe de stockage de mémoire dans les ordinateurs modernes, mais pour des raisons de simplicité, la mémoire peut être divisée en deux catégories de base : la mémoire morte (ROM), qui est permanente, persistante et non volatile, et la mémoire vive (RAM), qui est temporaire, non persistant et volatil.

Même si l'alimentation d'un ordinateur est coupée, les données doivent rester intactes ; c'est le but de la ROM, dont il existe plusieurs variétés - du moins au plus immuable : PROM à EPROM à EEPROM.

Les bandes de papier et les cartes perforées sont des exemples de mémoire persistante, tout comme les périphériques de stockage magnétiques comme les disquettes et les cassettes ; les noyaux magnétiques (faits de matériaux ferromagnétiques et céramiques) et les tubes de mercure sont également classés comme persistants.

En revanche, la RAM est considérée comme une mémoire volatile car une alimentation continue est nécessaire pour conserver le contenu des données intact.

Par exemple, la mémoire dynamique à accès aléatoire (DRAM) contient de nombreuses cellules de mémoire ; chacune de ces cellules mémoire a une adresse située à l'intersection d'une ligne de bit (colonne) et d'une ligne de mot (ligne). De plus, chaque cellule mémoire comporte un transistor et un condensateur qui peuvent être mis à zéro en vidant un "seau" d'électrons ou mis à un en remplissant un "seau" d'électrons.

Des fuites de mémoire peuvent se produire si la DRAM n'est pas actualisée en permanence par un contrôleur de mémoire pendant que l'ordinateur est opérationnel. (Lorsqu'un ordinateur est allumé, des zéros ou des uns arbitraires sont attribués aux cellules de mémoire RAM par simple hasard.)

Le poète T. S. Eliot a écrit : « Ce que nous appelons le début est souvent la fin.»

Le logiciel doit être chargé par un autre logiciel, mais où cela commence-t-il ?

Comment n'y a-t-il pas de régression infinie ?

En d'autres termes, qu'est-ce qui charge le logiciel initial dans un ordinateur lorsque la machine est allumée ?

Cette tâche est assignée à un programme bootloader ; le chargeur de démarrage charge l'ordinateur par ses propres bootstraps, pour ainsi dire.

Les chargeurs de démarrage modernes - qui chargent le système d'exploitation et d'autres logiciels système en mémoire - sont généralement stockés dans une ROM non volatile et permettent à l'ordinateur de démarrer ou de démarrer automatiquement.

Les premiers ordinateurs chargeaient des bootloaders via des cartes perforées ou des bandes magnétiques ; il y a plusieurs décennies, le démarrage sur un ordinateur IBM était appelé un chargement de programme initial (1PL), la machine prenant vie en chargeant le contenu de cartes perforées via une entrée.

Il doit y avoir un moyen pour que l'utilisateur puisse communiquer avec un ordinateur. Les langages de programmation de haut niveau tels que COBOL (COmmon Business-Oriented Language, un langage de type anglais principalement utilisé pour le traitement de données et inspiré des travaux de Grace Hopper), FORTRAN (FORMula TRANslation, couramment utilisé à des fins scientifiques et mathématiques), ALGOL (Langage ALGO-rithmique, une des premières langues influentes) et Ada (du nom d'Ada Lovelace et développé pour le Département de la Défense des États-Unis) permettent à l'utilisateur de communiquer via des mots et des phrases de style anglais ainsi qu'avec des fonctions mathématiques.

Les mots clés et la syntaxe des langages informatiques de haut niveau doivent être univoques et cohérents et concrets, dépourvus des sens multiples et des expressions idiomatiques fréquemment rencontrées dans les langues parlées.

Quoi qu'il en soit, un ordinateur ne peut généralement pas comprendre les instructions exprimées dans un langage de haut niveau sans l'utilisation d'un traducteur spécial, appelé compilateur. Un compilateur convertit les programmes de haut niveau en code objet, écrit dans un langage machine qui peut être directement "compris" par le processeur de l'ordinateur.

Un interpréteur traduit également du code de haut niveau en code machine mais, contrairement à un compilateur, un programme écrit avec un interpréteur a toujours besoin de l'interpréteur pour s'exécuter.

Au minimum, cependant, de quoi avons-nous besoin pour communiquer avec un ordinateur ?

Rappelons qu'une machine de Turing n'a que peu d'instructions possibles : lire ou écrire un seul symbole, arrêter la machine, déplacer la bande de papier vers la gauche ou vers la droite. Pourtant, une machine de Turing est suffisante pour résoudre n'importe quel problème mathématiquement calculable.

Si nous construisions un petit ordinateur ne contenant qu'une poignée de cellules de mémoire - chaque cellule de mémoire avec ses données, regroupées sous forme de "mot", contiendrait une adresse ainsi qu'un "pointeur" vers une autre adresse en mémoire - quelles instructions aurions-nous besoin?

Une instruction d'arrêt, pour arrêter la machine ; une instruction de chargement, pour lire des valeurs stockées dans des cellules mémoire ou saisies ; et une instruction de stockage, pour stocker des données dans des cellules de mémoire, sont toutes nécessaires.

Ces trois codes d'instructions, également appelés codes d'opération (ou opcodes), forment un jeu d'instructions simpliste que le processeur de notre petit ordinateur peut traiter, un "mot" à la fois.

En incluant également un accumulateur - un registre stockant les opérations arithmétiques - nous pouvons proposer deux autres instructions :

ajouter et soustraire, qui ajouteront ou soustrairont, respectivement, une valeur stockée dans une cellule de mémoire avec le contenu de l'accumulateur.

Mais nous n'avons pas encore fini. Jusqu'à présent, nous ne pouvions exécuter un programme sur notre petit ordinateur que de manière strictement séquentielle, une adresse après l'autre. Pour plus de flexibilité, nous devons inclure une instruction de saut, qui nous permet de sauter inconditionnellement à n'importe quelle adresse que nous souhaitons.

Pour ajouter encore plus de flexibilité, incluons également une instruction d'appel, qui saute inconditionnellement à une adresse spécifiée mais stocke l'adresse avant le saut pour une utilisation future, ainsi qu'une instruction de retour qui rend le contrôle du programme à cette adresse stockée.

De plus, notre jeu d'instructions doit également contenir un saut conditionnel, c'est-à-dire un saut qui ne se produit que si une condition spécifiée est remplie.

Au lieu d'utiliser des nombres pour représenter les opcodes, nous pouvons utiliser des mnémoniques, tels que STO pour stocker ou ADD pour ajouter ou JMP pour saut inconditionnel.

En général, nous adhérons à ce format :

Mnémonique [destination],[source]

où [destination] et [source] font référence à des adresses mémoire.

Il existe plusieurs autres mnémoniques couramment utilisés qui méritent d'être mentionnés, à savoir PUSH et POP. Ces instructions sont associées à des "piles", un moyen d'allouer de la mémoire. Pensez à une seule pile de plateaux de cafétéria, où nous ne sommes autorisés qu'à ajouter un plateau au sommet de la pile ou à retirer le dernier plateau placé sur le dessus.

Cette idée est exprimée par l'acronyme LIFO : dernier entré, premier sorti.

Pour mettre un élément en haut de la pile, on le pousse ; pour enlever l'élément le plus haut, nous le retirons de la pile. Une erreur "débordement de pile" signifie que la pile est devenue trop grande pour être prise en charge par la mémoire.

Dans Go-del, Escher, Bach, Hofstadter illustre la nature récursive des piles en demandant au lecteur d'imaginer un cadre occupé qui met appelant après appelant en attente, conduisant à un ensemble imbriqué de conversations qui sont "sautées" de la pile par l'exécutif, un par un.

Avec l'ensemble de mnémoniques susmentionné, nous avons construit un langage machine simple pour l'ordinateur (bien qu'en utilisant des abréviations que les êtres humains peuvent facilement comprendre, plutôt que des chaînes de chiffres).

Chaque microprocesseur a un langage machine unique, mais la plupart des microprocesseurs offrent au moins le même jeu d'instructions de base décrit ci-dessus. La programmation en langage machine sur les premiers ordinateurs comme l'ENIAC était un processus laborieux et physiquement exigeant qui nécessitait une grande attention aux détails; câblage et fonction du tableau de connexion des tables étaient nécessaires, nécessitant l'insertion de nombreux fils et la rotation de nombreux cadrans pour programmer une seule instruction.

Au fur et à mesure de l'évolution de l'ordinateur à programme enregistré, la programmation en code machine - au niveau du processeur - est devenue plus facile mais n'est jamais devenue particulièrement facile. Dans son livre Code (2001), Charles Petzold observe qu'écrire en langage machine, c'est "comme manger avec un cure-dent. Les bouchées sont si petites et le processus si laborieux que le dîner prend une éternité".

Plutôt que de coder au niveau des zéros et des uns ou des mots de données, où l'utilisateur est explicitement tenu de définir des emplacements de mémoire pour les données via des adresses, l'utilisation d'un langage d'assemblage - où une telle gestion de la mémoire peut être effectuée dans les coulisses - est apparue comme un moyen alternatif. de programmation.

Maintenant, au lieu de

Mnémonique [destination],[source]

la commande générale pour notre ordinateur simple peut être raccourcie en

Mnémonique [opérande]

où [opérande] est une étiquette ou une référence à une autre commande, plutôt qu'une adresse mémoire spécifique. Mieux encore, le langage assembleur, contrairement au langage machine, autorise les variables.

Une variable n'est rien de plus qu'un raccourci pratique pour stocker des données : déclarez une variable par son nom et affectez-lui une valeur, qui peut être récupérée ultérieurement en appelant le nom de la variable.

L'assembleur stocke automatiquement le contenu de la variable dans une adresse disponible. Mais contrairement au code machine, qui peut être « compris » directement par l'ordinateur, le code assembleur nécessite un assembleur pour traduire le code source en code objet, lisible par la machine.

Notez que la discussion susmentionnée sur la machine et le langage d'assemblage ne s'applique qu'à un petit ordinateur à accumulateur unique, et non à des variétés de machines plus complexes.

Lorsque les transistors ont commencé à remplacer les tubes à vide, les langages de haut niveau (HLL) sont arrivés à maturité.

Les langages de haut niveau supprimaient encore plus les détails de traitement sous-jacents de l'utilisateur, offrant des commandes et des fonctions lisibles de type anglais.

John W. Backus, qui dans les années 1950 a dirigé le groupe IBM qui a développé FORTRAN (initialement appelé IBM Mathematical FORmula TRANslating System), le premier langage de haut niveau répandu, a rappelé les difficultés de programmation avant l'avènement des HLLs :

Avant 1954, presque toute la programmation se faisait en langage machine ou en langage assembleur. Les programmeurs considéraient à juste titre leur travail comme un art complexe et créatif qui nécessitait l'inventivité humaine pour produire un programme efficace.

Une grande partie de leurs efforts a été consacrée à surmonter les difficultés créées par les ordinateurs de l'époque : le manque de registres d'index, le manque d'opérations en virgule flottante [décimales] intégrées, les jeux d'instructions restreints... et les arrangements d'entrée-sortie primitifs.

Backus a énuméré un certain nombre de raisons pour lesquelles FORTRAN a été développé: l'inefficacité de la programmation dite automatique, une manière d'éviter la programmation sur une machine réelle au profit du codage sur un ordinateur «synthétique» ou virtuel utilisant un pseudocode:

 les coûts élevés associés à l'emploi de nombreux programmeurs ; le temps passé à déboguer les programmes ; le développement de l'IBM 704 , qui avait des opérations en virgule flottante intégrées; et même la paresse.

"Une grande partie de mon travail vient de ma paresse", a-t-il admis. " Je n'aime pas écrire des programmes, et donc, quand je travaillais sur l'IBM 701 (un des premiers ordinateurs), en écrivant des programmes pour calculer des trajectoires de missiles, j'ai commencé à travailler sur un système de programmation pour faciliter l'écriture de programmes."

Bien qu'influencé par les systèmes de programmation automatique de l'époque, le meilleur d'entre eux étant le système algébrique de Laning et Zierler, FORTRAN a été développé indépendamment chez IBM.

"Pour autant que nous le sachions, nous avons simplement inventé la langue au fur et à mesure", a déclaré Backus.

Lui et son "groupe de recherche en programmation" officiellement désigné pensaient que la conception du langage était secondaire par rapport à une préoccupation plus large : le codage d'un compilateur efficace (ou, comme on l'appelait alors, un "traducteur"), qui pourrait prendre des instructions HLL et les convertir en langage machine IBM 704 optimisé.

Après quelques années frustrantes et intenses, Backus et son groupe ont atteint leur objectif clé : écrire un langage qui "permettrait aux ingénieurs et aux scientifiques d'écrire eux-mêmes des programmes sur le 704".

Alors que les langages machine et assembleur étaient relativement indéchiffrables sans connaissance du matériel informatique, FORTRAN était le premier langage de programmation mature qui ressemblait plus à l'algèbre qu'aux hiéroglyphes informatisés.

Une seule instruction dans n'importe quel langage de haut niveau peut représenter des dizaines voire des centaines de commandes d'assemblage proportionnelles (par exemple, FORTRAN a réduit le nombre d'instructions de codage nécessaires pour un programme moyen d'au moins un facteur vingt); après tout, c'était la raison d'être des langages de haut niveau : un moyen de raccourcir les groupes récurrents de code assembleur.

Et contrairement à l'assemblage ou au code machine, les HLLs sont très cohérents d'un ordinateur à l'autre et ne dépendent donc pas du matériel, en supposant que des compilateurs fonctionnels (ou interpréteurs) ont été écrits en respectant les normes de langage.

Les langages de haut niveau permettent des constructions de programmation complexes telles que les types de variables créés par l'utilisateur, les tableaux (variables systématiquement indexées), les sous-programmes (code regroupé en blocs pouvant être appelés à partir d'un programme principal) et la récursivité (code qui s'appelle lui-même).

De plus, des instructions de contrôle, telles que des conditions et des boucles, étaient également proposées.

Fait intéressant, Backus a dit que "ce que FORTRAN a fait principalement était de mécaniser l'organisation des boucles."

Bien sûr, les ordinateurs modernes disposent de moyens de saisie conviviaux : clavier, souris, voix. Cependant, les claviers n'étaient pas toujours connectés aux moniteurs d'affichage.

Dans les années 1960 et au début des années 1970, des machines à écrire hybrides appelées Télétypes ont été utilisées pour imprimer du texte saisi par l'utilisateur et des invites d'ordinateur sur des rouleaux de papier et avaient même des lecteurs de bande de papier en option - pour lire les programmes stockés sous forme de trous perforés sur une bande de papier - et des imprimantes. —afin que des copies papier des programmes puissent être générées pour une utilisation ultérieure—intégré.

Notez que Télétypes était techniquement une sorte de téléimprimeur, puisque "Télétype" fait également référence à l'ensemble de téléimprimeurs de Teletype Corporation; mais Teletype est devenu un éponyme propriétaire semblable à Kleenex et Xerox, et sera utilisé de cette façon tout au long de ce livre; éventuellement IBM, pas seulement Teletype, des terminaux produits, tels que le 1050 et le 2741.

Notez également que dans les années 1970, les terminaux pouvaient être connectés à des moniteurs d'affichage, comme l'écran d'information IBM 3270 ou le Télétype Model 40 KDP—Keyboard Display Printer—Terminal.

Ces télétypes avaient des glyphes sur leurs touches que les machines à écrire standard n'offraient pas, tels que BREAK (interrompt l'opération en cours), REPT (répète un caractère) et RUBOUT (fait référence à un caractère non imprimable, qui supprimait généralement le dernier caractère qui a été tapé) ainsi que les glyphes couramment trouvés sur les machines à écrire, tels que SHIFT (mais pas pour les lettres minuscules, qui n'étaient généralement pas proposées ; SHIFT a été utilisé pour accéder à des caractères et des commandes supplémentaires).

De plus, de nombreux télétypes avaient des cadrans téléphoniques rotatifs et d'autres commandes utilisateur spéciales. La plupart du temps, les ordinateurs auxquels ces télétypes étaient connectés ne se trouvaient même pas dans la même pièce ou le même bâtiment.

Au fur et à mesure que le traitement par lots (un programme exécuté à la fois, de manière séquentielle; un programme consistait en une pile de cartes perforées qui devaient être encodées hors ligne à l'aide d'une machine à perforer; ces piles de cartes étaient ensuite introduites dans le trémie d'entrée d'un ordinateur par lots) a cédé la place aux systèmes à temps partagé (utilisation optimisée d'un ordinateur central par plusieurs utilisateurs exécutant des programmes presque simultanément), les terminaux Télétype étaient connectés aux systèmes à temps partagé via une ligne directe ou un téléphone (grâce à un ensemble de données ou à un coupleur acoustique).

Par exemple, dans BASIC Programming and Applications (1976), l'auteur C. Joseph Sass décrit le processus de connexion à un système de partage de temps avec le populaire Teletype Model ASR33 :

Dans le cas [d'une connexion en ligne directe], pour connecter le terminal à l'ordinateur, l'utilisateur appuie simplement sur la touche OR1G [pour "provenir"] et procède à la connexion....

Pour [la connexion du jeu de données], il faut appuyer sur la touche ORIG et composer le numéro de téléphone du système informatique. Le système répond normalement avec un son aigu et la procédure de connexion se poursuit. (Cependant, un signal téléphonique occupé peut être rencontré. Dans ce cas, appuyez sur la touche CLR, attendez quelques minutes et réessayez.)...

Avec un coupleur acoustique, le terminal doit être activé et le numéro de téléphone composé. Lorsque l'ordinateur répond par un son aigu, le récepteur doit être placé dans le coupleur acoustique et la procédure de connexion doit être terminée.

Selon le système de partage de temps, vous devrez peut-être taper GO puis appuyer sur RETURN (ce qui produit un retour chariot/saut de ligne sur le terminal), ou vous devrez peut-être appuyer sur CTRL et C puis sur la touche RETURN.

Le système tapera un caractère d'accusé de réception : peut-être un signe dièse (#), comme c'était le cas sur le Michigan Terminal System (MTS), ou un point (.).

Ensuite, une connexion est requise : peut-être en tapant SIGNON (MTS) et un numéro d'utilisateur, ou LOGIN et un numéro d'utilisateur ; en outre, la saisie d'un mot de passe peut être nécessaire.

Une fois connecté, vous êtes prêt à programmer en BASIC.

 

 

 

 

 

 

 

Recherche personnalisée