Il existe de nombreuses méthodes différentes pour charger un programme initial court dans un ordinateur. Ces méthodes vont d’une entrée physique simple à un support amovible pouvant contenir des programmes plus complexes.
Exemples de ROM de circuits pré-intégrésEdit
Les premiers ordinateursedit
Les premiers ordinateurs des années 1940 et 1950 étaient des efforts d’ingénierie uniques qui pouvaient prendre des semaines à programmer et le chargement du programme était l’un des nombreux problèmes à résoudre. Un premier ordinateur, ENIAC, n’avait aucun programme stocké en mémoire, mais était configuré pour chaque problème par une configuration de câbles d’interconnexion. L’amorçage ne s’appliquait pas à ENIAC, dont la configuration matérielle était prête à résoudre les problèmes dès que l’alimentation était appliquée.
Le système EDSAC, le deuxième ordinateur à programme stocké à construire, utilisait des commutateurs pas à pas pour transférer un programme fixe en mémoire lorsque son bouton de démarrage était enfoncé. Le programme stocké sur cet appareil, que David Wheeler a terminé à la fin de 1948, a chargé d’autres instructions à partir de ruban perforé, puis les a exécutées.
Premiers ordinateurs commerciauxdit
Les premiers ordinateurs programmables destinés à la vente commerciale, tels que l’UNIVAC I et l’IBM 701, comprenaient des fonctionnalités pour simplifier leur fonctionnement. Ils comprenaient généralement des instructions qui effectuaient une opération d’entrée ou de sortie complète. La même logique matérielle pourrait être utilisée pour charger le contenu d’une carte perforée (la plus typique) ou d’autres supports d’entrée, tels qu’un tambour magnétique ou une bande magnétique, contenant un programme d’amorçage en appuyant sur un seul bouton. Ce concept de démarrage a été appelé une variété de noms pour les ordinateurs IBM des années 1950 et du début des années 1960, mais IBM a utilisé le terme « Charge initiale du programme » avec le tronçon IBM 7030 et l’a ensuite utilisé pour leurs lignes mainframe, en commençant par le System / 360 en 1964.
L’ordinateur IBM 701 (1952-1956) avait un bouton « Charger » qui permettait de lecture initiée du premier mot de 36 bits dans la mémoire principale à partir d’une carte perforée dans un lecteur de carte, d’une bande magnétique dans un lecteur de bande ou d’une unité de tambour magnétique, en fonction de la position du sélecteur de charge. Le demi-mot de 18 bits gauche a ensuite été exécuté comme une instruction, qui lit généralement des mots supplémentaires en mémoire. Le programme de démarrage chargé a ensuite été exécuté, qui, à son tour, a chargé un programme plus important de ce support en mémoire sans autre aide de l’opérateur humain. Le terme « démarrage » est utilisé dans ce sens depuis au moins 1958.
D’autres ordinateurs IBM de cette époque avaient des caractéristiques similaires. Par exemple, le système IBM 1401 (c. 1958) utilisait un lecteur de carte pour charger un programme à partir d’une carte perforée. Les 80 caractères stockés dans la carte perforée étaient lus dans les emplacements de mémoire 001 à 080, puis l’ordinateur se ramifiait à l’emplacement de mémoire 001 pour lire sa première instruction stockée. Cette instruction était toujours la même: déplacer les informations dans ces 80 premiers emplacements de mémoire vers une zone d’assemblage où les informations des cartes perforées 2, 3, 4, etc. pouvaient être combinées pour former le programme stocké. Une fois ces informations déplacées vers la zone d’assemblage, la machine se ramifiait vers une instruction à l’emplacement 080 (lire une carte) et la carte suivante était lue et ses informations traitées.
Un autre exemple était l’IBM 650 (1953), une machine décimale, qui avait un groupe de dix commutateurs à 10 positions sur son panneau de commande qui étaient adressables comme un mot mémoire (adresse 8000) et pouvaient être exécutés comme une instruction. Ainsi, en réglant les commutateurs sur 7004000400 et en appuyant sur le bouton approprié, la première carte du lecteur de carte serait lue en mémoire (code op 70), à partir de l’adresse 400, puis sauterait à 400 pour commencer à exécuter le programme sur cette carte.
Les concurrents d’IBM offraient également une charge de programme à bouton unique.
- Le CDC 6600 (c. 1964) avait un panneau de démarrage mort avec 144 interrupteurs à bascule; le commutateur de démarrage mort a entré 12 mots des interrupteurs à bascule dans la mémoire du processeur périphérique (PP) 0 et a lancé la séquence de charge. PP 0 a chargé le code nécessaire dans sa propre mémoire, puis a initialisé l’autre PPs.
- Le GE 645 (c. 1965) avait un bouton « DÉMARRAGE DU SYSTÈME » qui, lorsqu’il était pressé, provoquait l’un des contrôleurs d’E / S à charger un programme de 64 mots en mémoire à partir d’une mémoire morte à diodes et à délivrer une interruption pour que ce programme commence à fonctionner.
- Le premier modèle du PDP-10 avait un bouton « READ IN » qui, lorsqu’il était pressé, réinitialisait le processeur et démarrait une opération d’E / S sur un périphérique spécifié par des commutateurs sur le panneau de commande, lisant un mot de 36 bits donnant une adresse cible et comptant pour les lectures de mots suivantes; lorsque la lecture était terminée, le processeur commençait à exécuter le code lu en sautant sur le dernier mot lu.
Une variante notable de ceci se trouve sur le Burroughs B1700 où il n’y a ni ROM d’amorçage ni opération IPL câblée. Au lieu de cela, une fois le système réinitialisé, il lit et exécute les opcodes séquentiellement à partir d’un lecteur de bande monté sur le panneau avant; cela configure un chargeur de démarrage dans la RAM qui est ensuite exécuté. Cependant, comme cela fait peu d’hypothèses sur le système, il peut également être utilisé pour charger des bandes de diagnostic (Routine de test de maintenance) qui affichent un code intelligible sur le panneau avant, même en cas de défaillance grave du processeur.
IBM System/360 et successorsEdit
Dans IBM System/360 et ses successeurs, y compris les machines z/Architecture actuelles, le processus de démarrage est appelé Chargement initial du programme (IPL).
IBM a inventé ce terme pour le 7030 (Stretch), l’a relancé pour la conception du System /360 et continue de l’utiliser dans ces environnements aujourd’hui. Dans les processeurs System / 360, une IPL est initiée par l’opérateur informatique en sélectionnant l’adresse de périphérique à trois chiffres hexadécimaux (CUU; C = Adresse de canal d’E / S, UU = Adresse de l’unité de commande et de l’appareil), puis en appuyant sur le bouton LOAD. Sur les modèles haut de gamme System / 360, la plupart des systèmes System / 370 et certains systèmes ultérieurs, les fonctions des commutateurs et du bouton de CHARGE sont simulées à l’aide de zones sélectionnables sur l’écran d’une console graphique, souvent un périphérique de type IBM 2250 ou un périphérique de type IBM 3270. Par exemple, sur le modèle System/370 158, la séquence de clavier 0-7-X (zéro, sept et X, dans cet ordre) entraîne un IPL à partir de l’adresse du périphérique qui a été saisie dans la zone de saisie. L’Amdahl 470V/6 et les processeurs associés prenaient en charge quatre chiffres hexadécimaux sur les processeurs sur lesquels l’unité de deuxième canal en option était installée, pour un total de 32 canaux. Plus tard, IBM prendrait également en charge plus de 16 canaux.
La fonction IPL dans le System/360 et ses successeurs, et ses compatibles tels que ceux d’Amdahl, lit 24 octets d’un périphérique spécifié par l’opérateur dans le stockage principal à partir de l’adresse réelle zéro. Les deuxième et troisième groupes de huit octets sont traités comme des mots de commande de canal (CCW) pour continuer à charger le programme de démarrage (le premier CCW est toujours simulé par la CPU et consiste en une commande IPL en lecture, 02h, avec un chaînage de commandes et une indication de longueur incorrecte supprimée). Lorsque les commandes de canal d’E / S sont terminées, le premier groupe de huit octets est ensuite chargé dans le mot d’état du programme (PSW) du processeur et le programme de démarrage commence l’exécution à l’emplacement désigné par ce PSW. Le périphérique IPL est généralement un lecteur de disque, d’où la signification particulière de la commande de type lecture 02h, mais exactement la même procédure est également utilisée pour l’IPL à partir d’autres périphériques de type entrée, tels que des lecteurs de bandes ou même des lecteurs de cartes, de manière indépendante du périphérique, permettant par exemple l’installation d’un système d’exploitation sur un ordinateur tout neuf à partir d’une bande magnétique de distribution initiale du système d’exploitation. Pour les contrôleurs de disque, la commande 02h amène également le dispositif sélectionné à rechercher le cylindre 0000h, la tête 0000h, simulant une commande de cylindre et de tête de recherche, 07h, et à rechercher l’enregistrement 01h, simulant une commande d’ID égal de recherche, 31h; les recherches et les recherches ne sont pas simulées par des contrôleurs de bande et de carte, car pour ces classes de dispositifs, une commande 02h est simplement une commande de lecture séquentielle, pas une commande IPL de lecture.
Le disque, la bande ou le jeu de cartes doit contenir un programme spécial pour charger le système d’exploitation réel ou l’utilitaire autonome dans le stockage principal, et à cette fin spécifique, le « texte IPL » est placé sur le disque par le programme autonome DASDI (Direct Access Storage Device Initialization) ou un programme équivalent fonctionnant sous un système d’exploitation, par exemple ICKDSF, mais les bandes et les jeux de cartes IPL sont généralement distribués avec ce « texte IPL » déjà présent.
MinicomputersEdit
Minicomputers, en commençant par le numérique Equipment Corporation (DEC) PDP-5 et PDP-8 (1965) ont simplifié la conception en utilisant le processeur pour faciliter les opérations d’entrée et de sortie. Cela a permis d’économiser des coûts, mais a rendu le démarrage plus compliqué que d’appuyer sur un seul bouton. Les mini-ordinateurs avaient généralement un moyen de basculer dans des programmes courts en manipulant un tableau de commutateurs sur le panneau avant. Étant donné que les premiers mini-ordinateurs utilisaient une mémoire à noyau magnétique, qui ne perdait pas ses informations lorsque l’alimentation était coupée, ces chargeurs d’amorçage resteraient en place à moins qu’ils ne soient effacés. L’effacement se produisait parfois accidentellement lorsqu’un bogue de programme provoquait une boucle qui écrasait toute la mémoire.
D’autres mini-ordinateurs avec une forme de démarrage aussi simple incluent la série HP 2100 de Hewlett-Packard (milieu des années 1960), le Data General Nova original (1969) et le PDP-11 de DEC (1970).
DEC a ajouté plus tard une mémoire en lecture seule à matrice de diodes optionnelle pour le PDP-11 qui stockait un programme d’amorçage pouvant contenir jusqu’à 32 mots (64 octets). Il s’agissait d’une carte de circuit imprimé, la M792, branchée sur l’Unibus et contenant un réseau de diodes semi-conductrices de 32 par 16. Avec les 512 diodes en place, la mémoire contenait tous les bits « un »; la carte était programmée en coupant chaque diode dont le bit devait être « zéro ». DEC a également vendu des versions de la carte, la série BM792-Yx, préprogrammée pour de nombreux périphériques d’entrée standard en omettant simplement les diodes inutiles.
Suivant l’approche plus ancienne, le PDP-1 antérieur dispose d’un chargeur matériel, de sorte qu’un opérateur n’a qu’à appuyer sur le commutateur « load » pour demander au lecteur de bande papier de charger un programme directement dans la mémoire centrale. La Supernova générale des données utilisait des commutateurs du panneau avant pour amener l’ordinateur à charger automatiquement des instructions en mémoire à partir d’un périphérique spécifié par les commutateurs de données du panneau avant, puis à passer au code chargé; les Nova 800 et 1200 avaient un commutateur qui chargeait un programme dans la mémoire principale à partir d’une mémoire morte spéciale et y sautait.
Exemples de chargeur de démarrage de mini-ordinateursedit
Dans un mini-ordinateur avec un lecteur de bande papier, le premier programme à s’exécuter dans le processus de démarrage, le chargeur de démarrage, lirait dans la mémoire principale soit le chargeur de démarrage de deuxième étape (souvent appelé Chargeur binaire) qui pouvait lire la bande papier avec la somme de contrôle, soit le système d’exploitation à partir d’un support de stockage extérieur. Le pseudocode pour le chargeur de démarrage peut être aussi simple que les huit instructions suivantes:
- Réglez le registre P sur 9
- Vérifiez que le lecteur de bande de papier est prêt
- Si ce n’est pas prêt, passez à 2
- Lisez un octet du lecteur de bande de papier à l’accumulateur
- Stockez l’accumulateur à adresser dans le registre P
- Si la fin de la bande, passez à 9
- Incrémentez le registre P
- Passez à 2
Un exemple connexe est basé sur un chargeur pour un mini-ordinateur de Nicolet Instrument Corporation des années 1970, utilisant l’unité de lecture-poinçon de bande de papier sur un téléimprimeur ASR Modèle 33 de Télétype. Les octets de son chargeur de deuxième étape sont lus à partir de la bande de papier dans l’ordre inverse.
- Réglez le registre P sur 106
- Vérifiez que le lecteur de bande papier est prêt
- Si ce n’est pas prêt, passez à 2
- Lisez un octet du lecteur de bande papier vers l’accumulateur
- Stockez l’accumulateur à adresser dans le registre P
- Décrémentez le registre P
- Passez à 2
La longueur du chargeur de deuxième étage est telle que l’octet final remplace l’emplacement 7. Après l’exécution de l’instruction dans l’emplacement 6, l’emplacement 7 commence l’exécution du chargeur de la deuxième étape. Le chargeur de la deuxième étape attend ensuite que la bande beaucoup plus longue contenant le système d’exploitation soit placée dans le lecteur de bande. La différence entre le chargeur de démarrage et le chargeur de deuxième étape réside dans l’ajout de code de vérification pour piéger les erreurs de lecture sur bande papier, un phénomène fréquent avec du matériel « à temps partiel » relativement peu coûteux, tel que le Télétype Modèle 33 ASR. (Les Flexowriters Friden étaient beaucoup plus fiables, mais aussi relativement coûteux.)
Démarrage du premier microordinateursedit
Les premiers microordinateurs, tels que l’Altair 8800 (sorti en 1975) et une machine similaire encore plus ancienne (basée sur le processeur Intel 8008) n’avaient pas de matériel d’amorçage en tant que tel. Au démarrage, le PROCESSEUR verrait une mémoire contenant du code exécutable contenant uniquement des zéros binaires – la mémoire a été effacée en réinitialisant lors de la mise sous tension. Les panneaux avant de ces machines portaient des interrupteurs à bascule pour la saisie d’adresses et de données, un commutateur par bit du bus de mots et d’adresses de la mémoire de l’ordinateur. De simples ajouts au matériel permettaient de charger un emplacement mémoire à la fois à partir de ces commutateurs pour stocker le code d’amorçage. Pendant ce temps, le processeur a été empêché de tenter d’exécuter le contenu de la mémoire. Une fois correctement chargé, le processeur a été activé pour exécuter le code d’amorçage. Ce processus était fastidieux et devait être sans erreur.
Mémoire morte à circuit intégré eraEdit
Le processus de démarrage des mini-ordinateurs et des micro-ordinateurs a été révolutionné par l’introduction de la mémoire morte à circuit intégré (ROM), avec ses nombreuses variantes, y compris les ROM programmées par masque, les ROM programmables (PROM), les ROM programmables effaçables (EPROM) et la mémoire flash. Ceux-ci permettaient aux programmes de démarrage du micrologiciel d’être inclus dans l’ordinateur. L’introduction d’une ROM (externe) était dans un élaborateur de commutation téléphonique italien, appelé « Gruppi Speciali », breveté en 1975 par Alberto Ciaramella, chercheur au CSELT. Gruppi Speciali était, à partir de 1975, une machine entièrement à bouton unique démarrant dans le système d’exploitation à partir d’une mémoire ROM composée de semi-conducteurs et non de noyaux de ferrite. Bien que le périphérique ROM n’était pas intégré de manière native dans l’ordinateur de Gruppi Speciali, en raison de la conception de la machine, il permettait également le démarrage de la ROM à un bouton dans des machines non conçues pour cela (par conséquent, ce « périphérique d’amorçage » était indépendant de l’architecture), par exemple le PDP-11. Le stockage de l’état de la machine après l’arrêt était également en place, ce qui était une autre caractéristique essentielle du concours de commutation téléphonique.
Typiquement, chaque microprocesseur, après une condition de réinitialisation ou de mise sous tension, effectue un processus de démarrage qui prend généralement la forme de « commencer l’exécution du code trouvé à partir d’une adresse spécifique » ou « rechercher un code multioctet à une adresse spécifique et sauter à l’emplacement indiqué pour commencer l’exécution ». Un système construit à l’aide de ce microprocesseur aura la ROM permanente occupant ces emplacements spéciaux de sorte que le système commence toujours à fonctionner sans l’aide de l’opérateur. Par exemple, les processeurs Intel x86 commencent toujours par exécuter les instructions commençant par F000: FFF0, tandis que pour le processeur MOS 6502, l’initialisation commence par lire une adresse vectorielle de deux octets àFFFFD (MS byte) etFFFFC (LS byte) et sauter à cet emplacement pour exécuter le code d’amorçage.
Apple Inc.le premier ordinateur, l’Apple 1 introduit en 1976, comportait des puces PROM qui éliminaient le besoin d’un panneau avant pour le processus de démarrage (comme ce fut le cas avec l’Altair 8800) dans un ordinateur commercial. Selon l’annonce d’Apple l’annonçant « Plus d’Interrupteurs, Plus de Lumières… le firmware dans PROMS vous permet d’entrer, d’afficher et de déboguer des programmes (tous en hexadécimal) à partir du clavier. »
En raison du coût de la mémoire morte à l’époque, la série Apple II a démarré ses systèmes d’exploitation de disques en utilisant une série de très petites étapes incrémentielles, chacune passant le contrôle à la phase suivante du processus de démarrage progressivement plus complexe. (Voir Apple DOS: Chargeur de démarrage). Parce que si peu de système d’exploitation de disque reposait sur la ROM, le matériel était également extrêmement flexible et prenait en charge un large éventail de mécanismes de protection contre la copie de disque personnalisés. (Voir Craquage De logiciels : Historique.)
Certains systèmes d’exploitation, notamment les systèmes Macintosh d’Apple d’avant 1995, sont si étroitement liés à leur matériel qu’il est impossible de démarrer nativement un système d’exploitation autre que le système standard. C’est l’extrême opposé du scénario utilisant des commutateurs mentionnés ci-dessus; il est très inflexible mais relativement résistant aux erreurs et infaillible tant que tout le matériel fonctionne normalement. Une solution courante dans de telles situations consiste à concevoir un chargeur de démarrage qui fonctionne comme un programme appartenant au système d’exploitation standard qui détourne le système et charge le système d’exploitation alternatif. Cette technique a été utilisée par Apple pour son implémentation Unix A/UX et copiée par divers systèmes d’exploitation freeware et BeOS Personal Edition 5.
Certaines machines, comme le micro-ordinateur Atari ST, étaient « instantanées », le système d’exploitation s’exécutant à partir d’une ROM. La récupération du système d’exploitation à partir d’un magasin secondaire ou tertiaire a donc été éliminée comme l’une des opérations caractéristiques de l’amorçage. Pour permettre le chargement automatique des personnalisations du système, des accessoires et d’autres logiciels de support, le lecteur de disquettes Atari a été lu pour des composants supplémentaires pendant le processus de démarrage. Il y avait un délai d’expiration qui donnait le temps d’insérer manuellement une disquette pendant que le système recherchait les composants supplémentaires. Cela pourrait être évité en insérant un disque vierge. Le matériel Atari ST a également été conçu pour que l’emplacement de la cartouche puisse fournir une exécution de programme native à des fins de jeu en tant que solution de rechange à l’héritage de fabrication de jeux électroniques d’Atari; en insérant la cartouche Spectre GCR avec la ROM du système Macintosh dans l’emplacement de jeu et en allumant l’Atari, il pourrait « démarrer nativement » le système d’exploitation Macintosh plutôt que les propres TOS d’Atari.
L’ordinateur personnel IBM comprenait un micrologiciel basé sur une ROM appelé BIOS ; l’une des fonctions de ce micrologiciel était d’effectuer un autotest de mise sous tension lorsque la machine était sous tension, puis de lire le logiciel à partir d’un périphérique de démarrage et de l’exécuter. Le micrologiciel compatible avec le BIOS de l’ordinateur personnel IBM est utilisé dans les ordinateurs compatibles IBM PC. L’interface de micrologiciel extensible a été développée par Intel, à l’origine pour les machines basées sur Itanium, et plus tard également utilisée comme alternative au BIOS des machines basées sur x86, y compris les Mac Apple utilisant des processeurs Intel.
Les stations de travail Unix avaient à l’origine un micrologiciel basé sur une ROM spécifique au fournisseur. Sun Microsystems a ensuite développé OpenBoot, plus tard connu sous le nom de Firmware ouvert, qui incorporait un interpréteur Forth, une grande partie du firmware étant écrite en Forth. Il a été normalisé par l’IEEE en tant que norme IEEE 1275-1994; le micrologiciel qui implémente cette norme a été utilisé dans les Mac basés sur PowerPC et d’autres machines basées sur PowerPC, ainsi que dans les propres ordinateurs basés sur SPARC de Sun. La spécification de calcul RISC avancée a défini une autre norme de micrologiciel, qui a été implémentée sur certaines machines basées sur MIPS et Alpha et les stations de travail basées sur SGI Visual Workstation x86.