Mir ist gerade aufgefallen, dass wenn Sie ein Betriebssystem schreiben, worauf schreiben Sie es dann? Ich frage dies, während ich ein Grundlagenbuch über Mikroprozessoren aus dem Jahr 1980 lese, und diese Frage tauchte in meinem Kopf auf:
Wie wurde der erste Mikroprozessorchip programmiert?
Die Antwort mag offensichtlich sein, aber es nervt mich.
microprocessor
Dean
quelle
quelle
Antworten:
Ich werde Ihre Frage wörtlich nehmen und hauptsächlich auf Mikroprozessoren eingehen, nicht auf Computer im Allgemeinen.
Alle Computer haben eine Art Maschinencode. Eine Anweisung besteht aus einem Opcode und einem oder mehreren Operanden. Beispielsweise wurde der ADD-Befehl für den Intel 4004 (den allerersten Mikroprozessor) als 1000RRRR codiert, wobei 1000 der Operationscode für ADD ist und RRRR eine Registernummer darstellt.
Die allerersten Computerprogramme wurden von Hand geschrieben, wobei die Einsen und Nullen von Hand codiert wurden, um ein Programm in Maschinensprache zu erstellen. Dies wird dann in den Chip einprogrammiert. Die ersten Mikroprozessoren verwendeten ROM (Nur-Lese-Speicher); dies wurde später durch EPROM (Erasable Programmable ROM, das mit UV-Licht gelöscht wurde) ersetzt; Jetzt werden Programme normalerweise in ein EEPROM ( "Electrically ...- EPROM" , das auf dem Chip gelöscht werden kann) oder speziell in einen Flash-Speicher programmiert .
Die meisten Mikroprozessoren können jetzt Programme aus dem RAM ausführen (dies ist so ziemlich der Standard für alles außer Mikrocontrollern), aber es muss überhaupt eine Möglichkeit geben, das Programm in den RAM zu laden. Wie Joby Taffey in seiner Antwort betonte, handelte es sich hierbei um Kippschalter für den Altair 8080, der von einem Intel 8080 (der auf den 4004 und 8008 folgte) angetrieben wurde. In Ihrem PC befindet sich ein Stück ROM, das BIOS, das zum Starten des Computers und Laden des Betriebssystems in den Arbeitsspeicher verwendet wird.
Die Maschinensprache wird sehr schnell langweilig, daher wurden Assembler-Programme entwickelt, die eine mnemonische Assemblersprache verwenden und diese, normalerweise eine Zeile Assembler-Code pro Anweisung, in Maschinencode übersetzen. Anstelle von 10000001 würde man also ADD R1 schreiben.
Aber der allererste Assembler musste in Maschinencode geschrieben werden. Dann könnte es in seinem eigenen Assembler-Code umgeschrieben und die maschinensprachliche Version verwendet werden, um es das erste Mal zusammenzusetzen. Danach konnte sich das Programm selbst zusammenstellen. Dies wird als Bootstrapping bezeichnet und wird auch mit Compilern durchgeführt. Sie werden in der Regel zuerst in Assembler (oder einer anderen höheren Sprache) geschrieben und dann in ihrer eigenen Sprache neu geschrieben und mit dem ursprünglichen Compiler kompiliert, bis der Compiler sich selbst kompilieren kann.
Da der erste Mikroprozessor lange nach dem Bestehen von Großrechnern und Minicomputern entwickelt wurde und der 4004 ohnehin nicht für die Ausführung eines Assemblers geeignet war, hat Intel wahrscheinlich einen Cross-Assembler geschrieben, der auf einem seiner großen Computer ausgeführt und den Assembler-Code für übersetzt wurde die 4004 in ein binäres Abbild, das in die ROMs programmiert werden könnte. Auch dies ist eine übliche Technik, mit der Compiler auf eine neue Plattform portiert werden ( Cross-Compiling ).
quelle
Ursprünglich wurden Programme auf Papier geschrieben und dann auf die Eingabemethoden des Computers übertragen. Dies ging von Knöpfen, Schaltern und Überbrückungskabeln an den ersten Computern über Lochkarten bis hin zu Tastaturen / Platinen.
Die folgende Abbildung zeigt, was heutzutage echte Programmierer verwenden:
quelle
Nun, ich war dabei, als Mikros herauskamen, wir haben Cross-Assembler und Compiler auf Großrechnern und Minis geschrieben, dann haben wir sie auf 8-Bit-Hardware gebootet. Die Leute haben sich nicht wirklich die Mühe gemacht, Compiler / Assembler auf Mikros zu bauen, bis sie genug lokalen Speicher hatten mach es nützlich
quelle
Eine frühe Form des Nur-Lese-Speichers war ein Raster, in dem die Adresse eine Zeile auswählte (sie nach unten zog) und die Spalten Daten darstellten. Jede Spalte hätte ein Pull-up, und an jeder Kreuzung wäre eine Diode eingelötet, um eine "Null" darzustellen, oder es könnte keine Diode, um eine "Eins" darzustellen Anzahl benötigter Dioden]. Jedes gewünschte Bitmuster könnte durch Einlöten der richtigen Dioden "programmiert" werden.
Dieses Design wurde in Form eines Fuse-PROM in die Welt der integrierten Schaltkreise gebracht. Im Wesentlichen war ein Sicherungs-PROM eine Schaltung wie die oben beschriebene, die auf einem Chip aufgebaut war, mit der Ausnahme, dass alle Dioden bestückt waren und jede Diode eine schwache Sicherung in Reihe hatte. Im Auslieferungszustand würde ein PROM an allen Stellen "0" lesen. Man könnte jedoch selektiv Dioden entfernen, indem man die entsprechende Adresse auswählt und die entsprechenden Datenleitungen "hart" hoch treibt.
Sicherungsprogrammierte PROMs wurden von Halbleiterspeichern abgelöst, die Bits speichern, indem Ladungen auf interne Kondensatoren implantiert werden. Solche Speicher sind nicht nur kompakter als Fuse-PROMs, sondern können auch gelöscht und wiederverwendet werden, wenn sie in UV-transparenten Gehäusen untergebracht sind. Beachten Sie, dass selbst sogenannte "einmal programmierbare" Speicher fast immer dasselbe Design verwenden, sondern einfach in UV-undurchlässigen Gehäusen untergebracht sind.
Diodenmatrix-Kontrollspeicher des 1950 MIT Whirlwind Computer
Transistor-Matrix-Steuerspeicher von 2005 der MT15-CPU
quelle
Ich bin mir nicht sicher, ob irgendjemand die eigentliche Frage des OP angesprochen hat: "Woher weiß der Computer, wie er anfangen soll?" , also mache ich mal eine Pause.
Beginnen Sie mit einer Analogie. "Woher weiß ein Transistor, wie man anfängt?" Natürlich nicht, es funktioniert nur in Übereinstimmung mit der Physik und der Ingenieur baut die Schaltung so auf, dass sie in einem bekannten Zustand startet.
Computer wissen, wie man anfängt, weil sie Schaltkreise sind (natürlich sehr kompliziert) und dafür gebaut sind, in einem bestimmten Zustand zu starten. In einer modernen Maschine kann dieser Zustand einer sein, in dem der Hauptbus einen Teil des Adressraums neu zuordnet, um ein ROM auf der Hauptplatine als wenig Speicher zu verwenden (das ROM wurde mit einem BIOS gebrannt). In einer Maschine der ersten Generation war der Anfangszustand möglicherweise die angehaltene CPU, der Programmzähler auf Null und das aktive Speicherschalt-Subsystem.
quelle
Ein Betriebssystem ist ein Computerprogramm, das direkt auf dem Prozessor ausgeführt wird. Es kann in jeder Sprache geschrieben werden, die nach Maschinenanweisungen kompiliert oder zusammengestellt werden kann. Assembly und C sind gängige Optionen.
Der Code wird von einem Speicher - einem ROM oder RAM - einzeln in die Prozessoren geladen.
Der Z3 , der erste programmierbare Prozessor, wurde aus elektromechanischen Relais gebaut und liest Anweisungen aus gelochtem Film.
Der Altair 8800, der erste Personal Computer, wurde mit Kippschaltern programmiert.
Informationen zum Aufbau eines Prozessors aus digitaler Logik finden Sie unter https://electronics.stackexchange.com/questions/5516/a-fun-book-to-learn-computer-architecture-for-not-exactly-beginners
Eine Historie finden Sie unter http://en.wikipedia.org/wiki/History_of_computing_hardware
quelle
Hier ist ein bisschen über wirklich alte Computer:
Soweit ich weiß, hatten Sie damals ein großes Computer-Bedienfeld, über das sie programmiert wurden. Grundsätzlich war jede Speicherzelle in diesen Computern mit Switches verbunden. Sie würden den Speicher mit Strom versorgen und dann mit Schaltern Daten in jeder Zelle einstellen. Auf diese Weise würden Sie das Programm Stück für Stück in den Arbeitsspeicher des Computers eingeben. Dann setzen Sie den Startpunkt des Programms und starten die Ausführung.
Im Zuge des technischen Fortschritts wurden sogenannte Bootloader-Programme entwickelt. Es handelt sich um kurze Programme, bei denen es darum geht, ein anderes Programm aus dem Speicher des Computers zu starten. Das Problem bei der schrittweisen Eingabe von Programmen (und der späteren Eingabe von mehr als einem Bit unter Verwendung von Oktal- und späteren Hexadezimalzahlen) bestand darin, dass es sehr langsam war und die Wahrscheinlichkeit groß war, dass der Bediener beim Laden des Programms einen Fehler machte. So würden kurze Programme verwendet, um größere Programme zu laden, die im Speicher des Computers gespeichert sind. Mit der Zeit nahm der Anteil des Codes ab, der von Hand eingegeben werden musste, und in modernen Computern haben wir oft Bootloader, die in einer Art ROM oder sogar Flash-Speicher geschrieben sind.
quelle
Ich bin vor ein paar Jahren auf einen Mikrocontroller-Programmierer gestoßen, der eine vierstellige Sieben-Segment-Anzeige und eine Hex-Tastatur hatte. Ich bin mir sicher, dass kein Mikrocontroller an Bord war und dass Sie den Maschinencode direkt byteweise eingeben konnten.
Dies würde es Ihnen ermöglichen, eine Liste von Op-Codes (schmerzhaft) manuell nacheinander zusammenzustellen und sie in den Chip einzugeben.
Ich habe keine Ahnung, ob Sie sie noch bekommen können, aber ich vermute, dass etwas Ähnliches verwendet wurde, als Mikrocontroller noch relativ neu waren.
quelle
Die ersten Mikroprozessoren wären mit Hilfe vorhandener Computer programmiert worden, die nicht auf Mikroprozessoren basierten. Bevor die erste CPU auf einem Chip hergestellt wurde, gab es bereits fortschrittliche Computerarchitekturen, die eher aus diskreten Komponenten als aus Mikroprozessoren aufgebaut waren. Schauen Sie sich IBM 360 an.
quelle