Die Betriebssysteme sind eng mit der Computerarchitektur verbunden. Ein Betriebssystem kümmert sich um alle Ein- und Ausgaben in einem Computersystem. Es verwaltet Benutzer, Prozesse, Speicherverwaltung, Drucken, Telekommunikation, Vernetzung usw. Es sendet Daten an eine Festplatte, den Drucker, den Bildschirm und andere an den Computer angeschlossene Peripheriegeräte.
Vor der Einführung des Betriebssystems
Was wurde in Computersystemen verwendet, um sie zum Laufen zu bringen?
Welches Konzept wurde für das Betriebssystem in unserer Computerentwicklung verwendet?
operating-systems
Itachi Uchiha
quelle
quelle
Antworten:
Frühe Computer † Es wurde jeweils ein Programm ausgeführt.
Programme wurden direkt von (z. B.) Papierbändern geladen, in die Löcher gestanzt waren.
Sie würden die frühesten Computer programmieren † durch Einstellen einer großen Anzahl von Ein-Aus-Schaltern.
Koloss:
Atlas:
Manchester:
† Ich verwende das Wort "Computer", um die Art von Gerät zu bezeichnen, die heutzutage in Milliardenhöhe existiert. Von dieser großen Anzahl von Computern sind bis auf eine unbedeutend kleine Anzahl digitale, elektronisch programmierbare Computer mit gespeicherten Programmen. Ich bin sicher, die ursprüngliche Frage ist nicht, wie Menschen mit der Berufsbezeichnung "Computer" ihren Arbeitstag verbracht haben. Zwischen diesen beiden Computertypen gibt es eine Reihe interessanter Geräte, die in dieser Antwort nicht behandelt werden.
quelle
Quelle: Geschichte der Betriebssysteme
Quelle: http://en.wikipedia.org/wiki/History_of_operating_systems
quelle
Zurück zum Start von Computersystemen, bei denen es keine einzelnen Computersysteme gab, sondern Mainframes.
Diese Großrechner liefen auf Lochkarten, die Ihr Programm (und häufig Ihre Daten) enthielten. Die Leute bekamen Zeit für diese Systeme, nahmen ihre Karten mit und steckten sie in die Maschinen, damit sie sie verarbeiten konnten. Die Maschine würde das Programm ausführen, bis es beendet ist, und dann würde der nächste Benutzer mit seinem Band und seinen Karten kommen.
Im Grunde hat es so funktioniert.
quelle
1890-1950 - Systemeigener Betrieb Die allerersten Computer hatten das Äquivalent zu dem, was ein Betriebssystem jetzt in sie eingebaut hat. Sie (der Operator) waren auch Teil des Betriebssystems. Sie haben die Registerschalter umgelegt (oder eine Lochkarte verwendet) und die Busleitungen physisch vertauscht (denken Sie an die altmodische Telefonzentrale), und der Speicher wurde (über physische Leitungen) direkt mit der Glühbirne (dem Monitor des Tages) und den Druckern verbunden ( Langzeitspeicher), so dass die Programmausgabe aufleuchtet und direkt auf das Gerät gedruckt wird, wenn es in den Ausgabespeicherpuffer gestellt wird. Für diese Dinge wurde kein Treiber benötigt, weil sie (aufgrund der Art und Weise, wie diese physischen Kabel verlegt wurden) einfach funktionierten (es gab heutzutage auch keinen Monitor). Tatsächlich würde es noch einige Jahrzehnte dauern Bis eine digitale numerische Anzeige erfunden wurde, damit Sie die Zahlen, die Sie bereits in das Register eingegeben hatten, und die Ausgabe tatsächlich als Dezimalzahlen sehen konnten, beherrschten die Drucker diese gesamte Ära bis zu den Monitoren Mit dem Wechsel von mechanisch (1890er Jahre) zu elektrisch analog (1910er Jahre) zu digital (1930er Jahre) änderte sich an dieser Stelle nicht wirklich viel. Diese Plug-N-Play-Architektur wurde in dieser Zeit durch das Interrupt-System ersetzt erst in den späten neunzigern wieder auftauchen, dann natürlich viel weniger einstecken, da die geräte mit interrupts CPU-zeit in anspruch nehmen durften, was architekturen ermöglichte, die nicht direkt an hardware gebunden waren, aber dafür mehrere generationen brauchten um wirklich der optimierte Prozess zu sein, den wir in x86 arch (und neuer) sehen; Frühe Systeme hatten oft schreckliche Rennbedingungen, Hardwarekompatibilitäts- und Verzögerungsprobleme und andere merkwürdige Verhaltensweisen bei Interrupts. Weil jede Maschine in dieser Zeit völlig andere (experimentelle) Architekturen benutzte; Fast alle Geräte wurden speziell für die Maschine angefertigt, an der sie gearbeitet haben.
1950-1973 - Betrieb innerhalb eines Systems In dieser Ära tauchten die meisten Funktionen auf, an die wir denken, wenn wir über ein echtes Betriebssystem sprechen. Debugging, Programmiersprachen, Mehrbenutzer, Multitasking, Terminals, Plattenlaufwerke, Netzwerke, Standardisierung von Komponenten usw. wurden in dieser Ära eingeführt. Diesmal war ein großer Fortschritt in Richtung Standardisierung zu verzeichnen, was bedeutete, dass wir mehr standardisierte Geräte hatten, aber dennoch jedes Betriebssystem von Hand für jede Maschine hergestellt wurde, was bedeutete, dass die Betriebssystemfunktionalität von den Ingenieuren, die das jeweilige System entworfen hatten, stark eingeschränkt wurde . Während dieser Zeit gab es eine beträchtliche Grauzone in einem Betriebssystem, da die verschiedenen Architekturen die Dinge sehr unterschiedlich handhaben und ein Mehrzweckcomputer viel mehr Betriebssystem benötigt als ein Computer, der Hardware enthält, um dieselben Jobs zu handhaben. Tatsache ist, dass Hardware immer schneller sein wird als Software, und praktisch alles, was in Software gemacht wird, kann theoretisch in Hardware gemacht werden (es ist Kosten \ Flexibilität \ Größe \ Zeit \ usw., die uns davon abhält, fast reine Hardwareversionen von allem zu erstellen) Tag). Ein Betriebssystem wurde für einen bestimmten Computer oder Computertyp erstellt. es würde anderswo nicht funktionieren. Für jedes neue Computerdesign musste die gesamte Betriebssystemsoftware von Grund auf neu geschrieben werden, um mit einem bestimmten Maschinenmodell zu arbeiten. Gegen Ende dieser Zeit erschien ein neues Betriebssystem, das dieses Paradigma bald ändern würde, UNIX, das von Ken Thompson und Dennis Ritchie in den Bell Labs geschrieben wurde.
1973 - Betrieb zwischen Systemen Ein einziges Programm hat dies alles geändert, aber es war nicht UNIX. Es war der C-Compiler (der von Ken Thompson und Dennis Ritchie in einer Garage hergestellt wurde, nachdem Bell Labs ihn geschnitten hatte). Bis zu diesem Zeitpunkt war es zu jedem Zeitpunkt, an dem Sie Code geschrieben haben, entweder Maschinencode (Code, den die Maschine direkt versteht, aber nicht portabel ist) oder er wurde in einer Sprache geschrieben, die Ihren Code in Byte-Code kompilierte (Code, der von einem anderen Programm als solcher interpretiert wird) läuft). Der große Unterschied für Betriebssysteme, den C mit sich brachte, war die Fähigkeit, das, was als Cross-Compilieren in Maschinencode bezeichnet wird, auszuführen. Dies bedeutete, dass Code einmal geschrieben und kompiliert werden konnte, um von Haus aus auf vielen verschiedenen Maschinentypen ausgeführt zu werden, solange ein Compiler für diese Maschine geschrieben worden war. Betriebssysteme müssen im Maschinencode geschrieben werden, da der Maschinencode buchstäblich der einzige Code ist, den die Maschine kennt.
Ich würde sagen, erst als Ken und Dennis den UNIX-Kernel mit einem C-Compiler kompilierten, wurde ein echtes Betriebssystem im modernen Sinne geboren. Davor war ein Betriebssystem entweder ein physisches Objekt oder einfach ein vorinitialisierter Speicherbereich, der speziell für eine bestimmte Maschine entwickelt wurde. Das Hinzufügen neuer Geräte zum System erforderte buchstäblich, dass der 'Kernel'-Code neu geschrieben wurde. Nun konnte das UNIX-Betriebssystem, das sie für eine bestimmte Maschine entworfen hatten, neu kompiliert und auf anderen Maschinen ausgeführt werden, ohne ALLES neu zu schreiben (solange diese Maschine einen C-Compiler aus einer Bootstrap-Umgebung kompilieren konnte, konnte der Rest des Betriebssystems geschrieben werden der relativ hohe C-Code).
quelle
Am Anfang waren die Programme fest in den Computer eingebunden, der das Programm beim Booten sofort von einem bestimmten Ort aus ausführte.
Dann wurden verschiedene Formen der Offline-Speicherung erfunden: Lochkarten, Bänder, Trommeln, sogar Platten. Viel flexibler. Aber nicht direkt von der CPU aus erreichbar. Das Programm muss in den Speicher geladen werden, bevor es ausgeführt werden kann. Sie schreiben also ein Programm, um Ihr Programm zu laden. Dies ist bekannt als Lader , oder Bootstrap (Aus dem Ausdruck "sich an den Bootstraps hochziehen").
Wenn das System komplizierter wird, kann es sein, dass ein einfacher Lader einen komplexeren Lader lädt. Dies begann mit Mikrocomputern: Der normale Bandlader war langsam, also laden Sie einen Dekomprimierer und laden Sie den Rest des Bandes schnell. Oder Festplatten-Speedloader, die als Kopierschutzsysteme fungierten, indem sie nicht standardmäßige Aufgaben mit der Festplatte erledigten.
Oder der Pre-UEFI-PC-Startvorgang: Der Prozessor wird im BIOS ausgeführt. Dies lädt den ersten Sektor von der Platte und springt dorthin. Das sucht nach einer aktiven Partition und lädt von dort einen Bootloader, der das Betriebssystem lädt. Ursprünglich wäre das COMMAND.COM für MSDOS gewesen; jetzt ist es normalerweise NTLDR.EXE für Windows.
quelle
Es sollte beachtet werden, dass in der frühen Hardware (vor 1960) die Ein- / Ausgabe viel einfacher war. Sie konnten eine Karte lesen oder eine Karte lochen oder eine Zeile auf dem Drucker drucken, und zwar jeweils mit einer einzigen Anweisung: Die Puffergröße und häufig auch die Pufferadresse waren festgelegt.
Selbst in den frühen 60er Jahren konnte man mit anspruchsvolleren Prozessoren (z. B. der 7090) noch Karten mit einer kleinen Routine (etwa 20 Anweisungen) lesen oder lochen, die leicht in jedes Programm kopiert werden konnte.
Da der Computer ausschließlich für einen einzelnen Auftrag vorgesehen war, spielte es keine Rolle, ob der Prozessor im Leerlauf war, während er darauf wartete, dass der Kartenleser zum Lesen der nächsten Karte bereit war, oder ob der Zeilendrucker die nächste Zeile einspeist.
Nun, es war wichtig, weil die Rechenzeit tatsächlich teuer war. Aus diesem Grund erfanden die Menschen Multi-Processing, Time-Sharing, asynchrone E / A sowie Interrupts und Gerätetreiber und Betriebssysteme. Die Schnittstellen der Hardwaregeräte wurden für den Programmierer komplexer und ermöglichten den Zugriff auf E / A-Register auf niedrigerer Ebene, was von den Gerätetreibern mehr Komplexität erforderte. Diese Komplexitätskosten (Speicher, Programmierzeit) wurden mit den vom Betriebssystem gemultiplexten Geräten "gleichzeitig" über die verschiedenen Programme amortisiert.
Noch in den 80ern benutzte ich einen Computer mit Mikroprozessor, der eines dieser älteren Systeme emulierte. Die Maschinenanweisungen hatten ein einheitliches Format über 80 Bits (10 Oktetts), und die Anweisung, den ersten Sektor der ersten Festplatte zu lesen und unter der Adresse 0 im Speicher abzulegen, war sehr praktisch: 0000000000. Der Startvorgang bestand also jeden Morgen Geben Sie diesen Befehl in das Terminal ein, in dem er unter der Adresse 0 gespeichert und ausgeführt wurde. Anschließend wird der Bootsektor geladen und die Ausführung mit dem nächsten Befehl fortgesetzt (unter der Adresse 10). Das Dateisystem bestand aus einer statischen Tabelle, die "Namen" von Sektorenbereichen zuordnet, die manuell zugewiesen wurden! I / O wurde in Assembler für diese Dateien ausgeführt, indem die Sektoren direkt gelesen oder geschrieben wurden, versetzt durch die Position der Datei auf der Festplatte, die durch die "open" -Routine wiederhergestellt wurde.
quelle
Die erste Generation von Computern, die für einen breiteren persönlichen Gebrauch entwickelt wurden, hatte einen sogenannten "Monitor" im ROM (Nur-Lese-Speicher).
Unmittelbar nach dem Booten stellte der Monitor eine sehr eingeschränkte Befehlszeilenschnittstelle zur Verfügung, um hauptsächlich Programme aus dem Datenspeicher wie z. B. ein Bandgerät zu laden und die Ausführung zu starten (einige andere Befehle standen für die manuelle Codeeingabe zur Verfügung, wurden aber selten benötigt). Es kann immer nur ein Programm ausgeführt werden.
Anders als das Betriebssystem hatte Monitor keinerlei Dateisystemunterstützung. Der menschliche Bediener war dafür verantwortlich, das richtige Band zu finden, es auf den Rekorder zu legen und zu Beginn des zu ladenden Programms zu positionieren.
Überwachen Sie kombinierte Funktionen des BIOS und des Betriebssystems und war bereits sehr deutlich eine Software.
Nach dem Einschalten setzte das kurze "Reset" -Signal den Programmzähler wie jeden anderen Zähler auf Null und schaltete gleichzeitig den Speicher-Mapper (falls vorhanden) so, dass die Adresse 0000 dem Monitor-ROM zugeordnet wurde. Es war üblich, eine Hardwareschaltung zu haben, um Monitor später in den hohen Adressraum neu zuzuordnen. Neben dem Start des Codes wurde auch die Schaltfläche "Zurücksetzen" verwendet, um das laufende Programm zu beenden und ein anderes Programm zu laden.
Die rudimentäre Schaltfläche "Zurücksetzen" ist auch in diesen Tagen auf einigen Desktop-PCs zu finden.
quelle
Der direkteste Vorgänger des Betriebssystems wäre eine Kombination aus Standardbibliotheken für die Schnittstelle zu Geräten und dem Bootstrap-Loader-System, mit dem ein Programm in den Speicher geladen und ausgeführt werden kann.
quelle