Es gibt viele verschiedene Methoden, um ein kurzes Anfangsprogramm in einen Computer zu laden. Diese Methoden reichen von einfachen, physischen Eingaben bis hin zu Wechselmedien, die komplexere Programme enthalten können.
Pre integrated-circuit-ROM examplesEdit
Frühe Computeredit
Frühe Computer in den 1940er und 1950er Jahren waren one-of-a-kind-Engineering-Bemühungen, die Wochen dauern konnte, zu programmieren und Programm Laden war eines von vielen Problemen, die gelöst werden mussten. Ein früher Computer, ENIAC, hatte kein Programm im Speicher gespeichert, wurde aber für jedes Problem durch eine Konfiguration von Verbindungskabeln eingerichtet. Bootstrapping galt nicht für ENIAC, dessen Hardwarekonfiguration bereit war, Probleme zu lösen, sobald Strom angelegt wurde.
Das EDSAC-System, der zweite zu bauende Speichercomputer, verwendete Schrittschalter, um ein festes Programm in den Speicher zu übertragen, wenn seine Starttaste gedrückt wurde. Das auf diesem Gerät gespeicherte Programm, das David Wheeler Ende 1948 abschloss, lud weitere Anweisungen von Lochband und führte sie dann aus.
Erste kommerzielle Computerbearbeiten
Die ersten programmierbaren Computer für den kommerziellen Verkauf, wie der UNIVAC I und der IBM 701, enthielten Funktionen, um ihre Bedienung zu vereinfachen. Sie enthielten normalerweise Anweisungen, die eine vollständige Eingabe- oder Ausgabeoperation ausführten. Dieselbe Hardwarelogik könnte verwendet werden, um den Inhalt einer Lochkarte (die typischsten) oder anderer Eingabemedien wie einer Magnettrommel oder eines Magnetbandes, die ein Bootstrap-Programm enthielten, durch Drücken einer einzigen Taste zu laden. Dieses Boot-Konzept wurde eine Vielzahl von Namen für IBM-Computer der 1950er und frühen 1960er Jahre genannt, aber IBM verwendete den Begriff „Initial Program Load“ mit dem IBM 7030 Stretch und später für ihre Mainframe-Linien, beginnend mit dem System / 360 im Jahr 1964.
Der IBM 701-Computer (1952-1956) hatte eine „Load“ -Taste, die das Lesen des ersten 36-Bit-Wortes in den Computer initiierte hauptspeicher von einer Lochkarte in einem Kartenleser, einem Magnetband in einem Bandlaufwerk oder einer Magnettrommeleinheit, abhängig von der Position des Lastwahlschalters. Das linke 18-Bit-Halbwort wurde dann als Anweisung ausgeführt, die normalerweise zusätzliche Wörter in den Speicher las. Das geladene Bootprogramm wurde dann ausgeführt, was wiederum ein größeres Programm von diesem Medium in den Speicher ohne weitere Hilfe des menschlichen Bedieners lud. Der Begriff „Boot“ wird in diesem Sinne seit mindestens 1958 verwendet.
Andere IBM-Computer dieser Zeit hatten ähnliche Funktionen. Beispielsweise verwendete das IBM 1401-System (um 1958) einen Kartenleser, um ein Programm von einer Lochkarte zu laden. Die in der Lochkarte gespeicherten 80 Zeichen wurden in die Speicherplätze 001 bis 080 eingelesen, dann würde der Computer zur Speicherstelle 001 verzweigen, um seine erste gespeicherte Anweisung zu lesen. Diese Anweisung war immer dieselbe: Verschieben Sie die Informationen in diesen ersten 80 Speicherplätzen in einen Montagebereich, in dem die Informationen in den Lochkarten 2, 3, 4 usw. zu dem gespeicherten Programm kombiniert werden konnten. Sobald diese Informationen in den Montagebereich verschoben wurden, verzweigte sich die Maschine zu einer Anweisung an Position 080 (Karte lesen), und die nächste Karte wurde gelesen und ihre Informationen verarbeitet.
Ein weiteres Beispiel war die IBM 650 (1953), eine Dezimalmaschine, die eine Gruppe von zehn 10-Positionsschaltern auf ihrem Bedienfeld hatte, die als Speicherwort (Adresse 8000) adressierbar waren und als Anweisung ausgeführt werden konnten. Wenn Sie also die Schalter auf 7004000400 setzen und die entsprechende Taste drücken, wird die erste Karte im Kartenleser in den Speicher (OP-Code 70) gelesen, beginnend bei Adresse 400, und dann zu 400 gesprungen, um mit der Ausführung des Programms auf dieser Karte zu beginnen.
IBMs Konkurrenten boten auch Single-Button-Programm laden.
- Der CDC 6600 (c. 1964) hatte ein Totstartfeld mit 144 Kippschaltern; Der Totstartschalter gab 12 Wörter von den Kippschaltern in den Speicher des peripheren Prozessors (PP) 0 ein und leitete den Ladevorgang ein. PP 0 lud den erforderlichen Code in seinen eigenen Speicher und initialisierte dann die anderen PPs.
- Der GE 645 (um 1965) hatte eine „SYSTEM BOOTLOAD“ -Taste, die, wenn sie gedrückt wurde, einen der E / A-Controller veranlasste, ein 64-Wort-Programm aus einem Dioden-Nur-Lese-Speicher in den Speicher zu laden und einen Interrupt zu liefern, um das Programm zum Laufen zu bringen.
- Das erste Modell des PDP-10 hatte eine „READ IN“ -Taste, die, wenn sie gedrückt wurde, den Prozessor zurücksetzte und eine E / A-Operation auf einem Gerät startete, das durch Schalter auf dem Bedienfeld spezifiziert wurde, wobei ein 36-Bit-Wort eingelesen wurde, das eine Zieladresse und eine Zählung für nachfolgende Wortlesungen angab; Wenn der Lesevorgang abgeschlossen war, begann der Prozessor, den eingelesenen Code auszuführen, indem er zum letzten eingelesenen Wort sprang.
Eine bemerkenswerte Variante davon findet sich auf dem Burroughs B1700, wo es weder ein Bootstrap-ROM noch einen fest verdrahteten IPL-Betrieb gibt. Stattdessen liest und führt das System nach dem Zurücksetzen Opcodes nacheinander von einem Bandlaufwerk aus, das auf der Frontplatte montiert ist. Dies richtet einen Bootloader im RAM ein, der dann ausgeführt wird. Da dies jedoch nur wenige Annahmen über das System macht, kann es ebenso gut verwendet werden, um Diagnosebänder (Wartungstestroutinen) zu laden, die selbst bei einem groben CPU-Ausfall einen verständlichen Code auf der Frontplatte anzeigen.
IBM System/360 und nachfolgerEdit
In IBM System/360 und seinen Nachfolgern, einschließlich der aktuellen z/Architecture-Maschinen, wird der Startvorgang als Initial Program Load (IPL) bezeichnet.IBM hat diesen Begriff für den 7030 (Stretch) geprägt, ihn für das Design des Systems / 360 wiederbelebt und verwendet ihn auch heute noch in diesen Umgebungen. In den System / 360-Prozessoren wird ein IPL durch den Computerbediener initiiert, indem die drei hexadezimale Geräteadresse (CUU; C = E / A-Kanaladresse, UU = Steuergerät und Geräteadresse) ausgewählt und anschließend die LOAD-Taste gedrückt wird. Bei den High-End-System / 360-Modellen, den meisten System / 370- und einigen späteren Systemen, werden die Funktionen der Schalter und der Lasttaste mithilfe auswählbarer Bereiche auf dem Bildschirm einer Grafikkonsole simuliert, häufig ein IBM 2250-ähnliches Gerät oder ein IBM 3270-ähnliches Gerät. Beispielsweise führt beim System/370-Modell 158 die Tastaturfolge 0-7-X (Null, Sieben und X in dieser Reihenfolge) zu einer IPL von der Geräteadresse, die in den Eingabebereich eingegeben wurde. Der Amdahl 470V / 6 und verwandte CPUs unterstützten vier hexadezimale Ziffern auf den CPUs, auf denen die optionale zweite Kanaleinheit installiert war, für insgesamt 32 Kanäle. Später würde IBM auch mehr als 16 Kanäle unterstützen.
Die IPL-Funktion im System/ 360 und seinen Nachfolgern sowie seinen kompatiblen Geräten wie Amdahls liest 24 Bytes von einem vom Bediener angegebenen Gerät in den Hauptspeicher, beginnend mit der realen Adresse Null. Die zweite und dritte Gruppe von acht Bytes werden als Kanalbefehlswörter (Channel Command Words, CCWs) behandelt, um das Laden des Startprogramms fortzusetzen (der erste CCW wird immer von der CPU simuliert und besteht aus einem Read IPL-Befehl, 02h, wobei die Befehlskette und die falsche Längenangabe unterdrückt werden erzwungen). Wenn die E / A-Kanalbefehle abgeschlossen sind, wird die erste Gruppe von acht Bytes in das Programmstatuswort (PSW) des Prozessors geladen, und das Startprogramm beginnt mit der Ausführung an der von diesem PSW angegebenen Stelle. Das IPL-Gerät ist normalerweise ein Plattenlaufwerk, daher die besondere Bedeutung des Befehls vom Typ 02h read, aber genau das gleiche Verfahren wird auch verwendet, um IPL von anderen Eingabegeräten, wie Bandlaufwerken oder sogar Kartenlesern, auf geräteunabhängige Weise auszuführen, was beispielsweise die Installation eines Betriebssystems auf einem brandneuen Computer von einem Betriebssystem auf einem Magnetband ermöglicht. Bei Plattencontrollern bewirkt der Befehl 02h auch, dass das ausgewählte Gerät nach Zylinder 0000h, Kopf 0000h sucht, wobei ein Befehl Seek cylinder and head, 07h, simuliert wird, und nach Datensatz 01h sucht, wobei ein Befehl Search ID Equal, 31h simuliert wird; Suchen und Suchen werden von Band- und Kartencontrollern nicht simuliert, da für diese Geräteklassen ein Befehl 02h einfach ein sequentieller Lesebefehl ist, kein Befehl Read IPL.
Die Festplatte, das Band oder das Kartendeck muss ein spezielles Programm enthalten, um das eigentliche Betriebssystem oder das eigenständige Dienstprogramm in den Hauptspeicher zu laden, und zu diesem speziellen Zweck wird „IPL-Text“ durch das eigenständige DASDI-Programm (Direct Access Storage Device Initialization) oder ein gleichwertiges Programm, das unter einem Betriebssystem ausgeführt wird, z. B. ICKDSF, auf die Festplatte gelegt, aber IPL-fähige Bänder und Kartendecks werden normalerweise mit diesem bereits vorhandenen „IPL-Text“ verteilt.
MinicomputersEdit
Minicomputer, beginnend mit der Digital Equipment Corporation (DEC) PDP-5 und PDP-8 (1965) vereinfachtes Design durch Verwendung der CPU zur Unterstützung von Eingabe- und Ausgabevorgängen. Dies sparte Kosten, machte das Booten jedoch komplizierter als das Drücken einer einzigen Taste. Minicomputer hatten normalerweise eine Möglichkeit, kurze Programme einzuschalten, indem sie eine Reihe von Schaltern auf der Vorderseite betätigten. Da die frühen Minicomputer Magnetkernspeicher verwendeten, der beim Ausschalten seine Informationen nicht verlor, blieben diese Bootstrap-Loader an Ort und Stelle, es sei denn, sie wurden gelöscht. Das Löschen geschah manchmal versehentlich, wenn ein Programmfehler eine Schleife verursachte, die den gesamten Speicher überschrieb.Andere Minicomputer mit einer so einfachen Form des Bootens sind Hewlett-Packards HP 2100-Serie (Mitte der 1960er Jahre), der ursprüngliche Data General Nova (1969) und Decs PDP-11 (1970).
DEC fügte später einen optionalen Diodenmatrix-Festwertspeicher für den PDP-11 hinzu, der ein Bootstrap-Programm mit bis zu 32 Wörtern (64 Byte) speicherte. Es bestand aus einer gedruckten Schaltungskarte, der M792, die an den Unibus angeschlossen war und eine 32 x 16-Anordnung von Halbleiterdioden enthielt. Mit allen 512 Dioden enthielt der Speicher alle „ein“ Bits; Die Karte wurde programmiert, indem jede Diode abgeschnitten wurde, deren Bit „Null“ sein sollte. DEC verkaufte auch Versionen der Karte, die BM792-Yx-Serie, die für viele Standard-Eingabegeräte vorprogrammiert war, indem einfach die nicht benötigten Dioden weggelassen wurden.
Dem älteren Ansatz folgend, verfügt der frühere PDP-1 über einen Hardware-Loader, so dass ein Bediener nur den „load“ -Schalter drücken muss, um den Papierbandleser anzuweisen, ein Programm direkt in den Kernspeicher zu laden. Die Data General Supernova verwendete Frontplattenschalter, um den Computer zu veranlassen, automatisch Anweisungen von einem Gerät, das durch die Datenschalter der Frontplatte spezifiziert wurde, in den Speicher zu laden und dann zu geladenem Code zu springen; Die Nova 800 und 1200 hatten einen Schalter, der ein Programm aus einem speziellen schreibgeschützten Speicher in den Hauptspeicher lud und zu ihm sprang.
Frühe Minicomputer-Bootloader-Beispiele
In einem Minicomputer mit einem Papierbandleser würde das erste Programm, das im Bootprozess ausgeführt wird, der Bootloader, entweder den Bootloader der zweiten Stufe (oft Binärlader genannt), der Papierband mit Prüfsumme lesen könnte, oder das Betriebssystem von einem externen Speichermedium in den Kernspeicher einlesen. Pseudocode für den Bootloader könnte so einfach sein wie die folgenden acht Anweisungen:
- Setzen Sie das P-Register auf 9
- Überprüfen Sie, ob der Papierbandleser bereit ist
- Wenn nicht bereit, springen Sie zu 2
- Lesen Sie ein Byte vom Papierbandleser zum Akkumulator
- Speichern Sie den Akkumulator als Adresse im P-Register
- Wenn Bandende, springe zu 9
- Erhöhen Sie das P-Register
- Springe zu 2
Ein verwandtes Beispiel basiert auf ein Lader für einen Minicomputer der Nicolet Instrument Corporation aus den 1970er Jahren unter Verwendung der Papierbandleser-Stanzeinheit auf einem Fernschreiber Modell 33 ASR. Die Bytes seines Laders der zweiten Stufe werden in umgekehrter Reihenfolge vom Papierband gelesen.
- Setzen Sie das P-Register auf 106
- Überprüfen Sie, ob der Papierbandleser bereit ist
- Wenn nicht bereit, springen Sie zu 2
- Lesen Sie ein Byte vom Papierbandleser zum Akkumulator
- Speichern Sie den Akkumulator als Adresse im P-Register
- Dekrementieren Sie das P-Register
- Springen Sie zu 2
Die Länge des Laders der zweiten Stufe ist so, dass das letzte Byte den Speicherort 7 überschreibt. Nachdem die Anweisung in Position 6 ausgeführt wird, startet Position 7 die zweite Stufe der Ausführung. Der Lader der zweiten Stufe wartet dann darauf, dass das viel längere Band, das das Betriebssystem enthält, in den Bandleser eingelegt wird. Der Unterschied zwischen dem Bootloader und dem Lader der zweiten Stufe besteht in der Hinzufügung von Überprüfungscode zum Abfangen von Papierbandlesefehlern, ein häufiges Auftreten bei relativ kostengünstiger „Teilzeit“ -Hardware wie dem Fernschreibmodell 33 ASR. (Friden Flexowriter waren weitaus zuverlässiger, aber auch vergleichsweise teuer.)
Booten der ersten Mikrocomputerbearbeiten
Die frühesten Mikrocomputer wie der Altair 8800 (erstmals 1975 veröffentlicht) und eine noch frühere, ähnliche Maschine (basierend auf der Intel 8008 CPU) hatten keine Bootstrapping-Hardware als solche. Beim Start würde die CPU Speicher sehen, der ausführbaren Code enthält, der nur binäre Nullen enthält. Die Frontplatten dieser Maschinen trugen Kippschalter zur Eingabe von Adressen und Daten, einen Schalter pro Bit des Computerspeicherwortes und des Adressbusses. Einfache Ergänzungen der Hardware ermöglichten es, jeweils einen Speicherplatz von diesen Switches zu laden, um Bootstrap-Code zu speichern. In der Zwischenzeit wurde die CPU daran gehindert, Speicherinhalte auszuführen. Nach dem korrekten Laden konnte die CPU den Bootstrapping-Code ausführen. Dieser Prozess war langwierig und musste fehlerfrei sein.
Integrated circuit read-only memory eraEdit
Der Boot-Prozess für Minicomputer und Mikrocomputer wurde durch die Einführung des Nur-Lese-Speichers (ROM) mit seinen vielen Varianten revolutioniert, darunter maskenprogrammierte ROMs, programmierbare ROMs (PROM), löschbare programmierbare ROMs (EPROM) und Flash-Speicher. Diese ermöglichten es, Firmware-Boot-Programme als Teil des Computers aufzunehmen. Die Einführung eines (externen) ROM erfolgte in einem italienischen Telefonvermittlungsausarbeiter namens „Gruppi Speciali“, der 1975 von Alberto Ciaramella, einem Forscher am CSELT, patentiert wurde. Gruppi Speciali war ab 1975 eine vollständig einknopfige Maschine, die von einem ROM-Speicher, der aus Halbleitern und nicht aus Ferritkernen bestand, in das Betriebssystem bootete. Obwohl das ROM-Gerät nicht nativ in den Computer von Gruppi Speciali eingebettet war, erlaubte es aufgrund des Designs der Maschine auch das Booten von ROM mit einer Taste in Maschinen, die nicht dafür ausgelegt waren (daher war dieses „Bootstrap-Gerät“ architekturunabhängig), z. B. das PDP-11. Die Speicherung des Zustands der Maschine nach dem Ausschalten war ebenfalls vorhanden, was ein weiteres kritisches Merkmal im Telefonschaltwettbewerb war.Typischerweise führt jeder Mikroprozessor nach einem Reset oder einer Einschaltbedingung einen Startvorgang durch, der normalerweise die Form von „begin execution of the code that is found starting at a specific address“ oder „look for a multibyte code at a specific address and jump to the indicated location to begin execution“ annimmt. Ein System, das unter Verwendung dieses Mikroprozessors gebaut wird, wird das permanente ROM haben, das diese speziellen Stellen besetzt, so dass das System immer ohne Bedienerunterstützung zu arbeiten beginnt. Beispielsweise beginnen Intel x86-Prozessoren immer mit der Ausführung der Anweisungen, die bei F000:FFF0 beginnen, während für den MOS 6502-Prozessor die Initialisierung mit dem Lesen einer Zwei-Byte-Vektoradresse bei $ FFFD (MS-Byte) und $ FFFC (LS-Byte) beginnt und zu diesem Speicherort springt, um den Bootstrap-Code auszuführen.Apple Inc.der erste Computer, der 1976 eingeführte Apple 1, verfügte über PROM-Chips, die die Notwendigkeit einer Frontplatte für den Startvorgang (wie beim Altair 8800) in einem kommerziellen Computer überflüssig machten. Laut Apples Anzeige, die es ankündigt „Keine Schalter mehr, keine Lichter mehr … mit der Firmware in PROMS können Sie Programme (alle in Hex) über die Tastatur eingeben, anzeigen und debuggen.“Aufgrund der Kosten für schreibgeschützten Speicher zu dieser Zeit bootete die Apple II-Serie ihre Festplattenbetriebssysteme mit einer Reihe sehr kleiner inkrementeller Schritte, von denen jeder die Kontrolle an die nächste Phase des allmählich komplexeren Bootvorgangs weitergab. (Siehe Apple DOS: Bootloader). Da so wenig des Disk-Betriebssystems auf ROM angewiesen war, war die Hardware auch extrem flexibel und unterstützte eine breite Palette von kundenspezifischen Disk-Kopierschutzmechanismen. (Siehe Software Cracking: Geschichte.)
Einige Betriebssysteme, insbesondere Macintosh-Systeme von Apple vor 1995, sind so eng mit ihrer Hardware verwoben, dass es unmöglich ist, ein anderes Betriebssystem als das Standard-Betriebssystem nativ zu starten. Dies ist das entgegengesetzte Extrem des oben erwähnten Szenarios mit Switches; Es ist sehr unflexibel, aber relativ fehlersicher und narrensicher, solange die gesamte Hardware normal funktioniert. Eine übliche Lösung in solchen Situationen besteht darin, einen Bootloader zu entwerfen, der als Programm des Standardbetriebssystems fungiert, das das System entführt und das alternative Betriebssystem lädt. Diese Technik wurde von Apple für seine A / UX Unix-Implementierung verwendet und von verschiedenen Freeware-Betriebssystemen und BeOS Personal Edition 5 kopiert.Einige Maschinen, wie der Atari ST-Mikrocomputer, waren „Instant-on“, wobei das Betriebssystem von einem ROM ausgeführt wurde. Das Abrufen des Betriebssystems aus dem sekundären oder tertiären Speicher wurde somit als eine der charakteristischen Operationen für das Bootstrapping eliminiert. Damit Systemanpassungen, Zubehör und andere Support-Software automatisch geladen werden können, wurde das Diskettenlaufwerk des Atari während des Startvorgangs auf zusätzliche Komponenten ausgelesen. Es gab eine Zeitüberschreitungsverzögerung, die Zeit zum manuellen Einlegen einer Diskette bot, während das System nach den zusätzlichen Komponenten suchte. Dies könnte durch Einlegen einer leeren Diskette vermieden werden. Die Atari ST-Hardware wurde auch so konzipiert, dass der Cartridge-Steckplatz die native Programmausführung für Spielzwecke als Überbleibsel aus Ataris Erbe elektronischer Spiele ermöglichen konnte; Durch Einsetzen der Spectre GCR-Cartridge mit dem Macintosh-System-ROM in den Spieleschlitz und Einschalten des Atari konnte das Macintosh-Betriebssystem anstelle von Ataris eigenem TOS „nativ gestartet“ werden.
Der IBM Personal Computer enthielt eine ROM-basierte Firmware namens BIOS; Eine der Funktionen dieser Firmware bestand darin, beim Einschalten des Computers einen Einschalt-Selbsttest durchzuführen und dann Software von einem Startgerät zu lesen und auszuführen. Firmware, die mit dem BIOS auf dem IBM Personal Computer kompatibel ist, wird in IBM PC-kompatiblen Computern verwendet. Die erweiterbare Firmware-Schnittstelle wurde von Intel ursprünglich für Itanium-basierte Computer entwickelt und später auch als Alternative zum BIOS in x86-basierten Computern verwendet, einschließlich Apple Macs mit Intel-Prozessoren.
Unix-Workstations hatten ursprünglich herstellerspezifische ROM-basierte Firmware. Sun Microsystems entwickelte später OpenBoot, später bekannt als Open Firmware, das einen Forth-Interpreter enthielt, wobei ein Großteil der Firmware in Forth geschrieben wurde. Es wurde von der IEEE als IEEE-Standard 1275-1994 standardisiert; Firmware, die diesen Standard implementiert, wurde in PowerPC-basierten Macs und einigen anderen PowerPC-basierten Computern sowie in Suns eigenen SPARC-basierten Computern verwendet. Die Advanced RISC Computing Specification definierte einen weiteren Firmware-Standard, der auf einigen MIPS-basierten und Alpha-basierten Maschinen und den SGI Visual Workstation x86-basierten Workstations implementiert wurde.