wake-up-neo.com

Wie kann ich ein kleines Betriebssystem auf einem alten Desktop-Computer erstellen?

Dies kann vergebens sein, da ich weiß, dass das Schreiben eines Betriebssystems (besonders von sich selbst) unerträglich kompliziert ist.

  • Ich erwarte nicht, das nächste Linux oder Windows zu bauen.

  • Ich weiß, dass es schrecklich und fehlerhaft sein wird und nicht funktionieren wird, aber das ist in Ordnung.

Ich möchte alles selbst schreiben, in Assembly, C und (einige) C++.

Dies ist ein zukünftiges Projekt, da ich im Moment mit einigen anderen Dingen beschäftigt bin und nicht sofort die Zeit habe, aber ich dachte, ich würde es jetzt fragen, also könnte ich vielleicht viele Antworten darauf bekommen und es könnte Bauen Sie eine nützliche Ressource für diese Art von Ansatz auf (alles andere, was ich bisher gesehen habe, beinhaltete das Bauen von Minix, das Verwenden eines vorhandenen Bootloaders, das Bauen in ein virtuelles Bootprogramm usw.).

Ich möchte einen meiner älteren Desktops mit einem Monitor, einer Tastatur und einer Maus einrichten und mit der Arbeit an einer leeren Festplatte beginnen.

Ich möchte lernen, wie ich meinen eigenen Bootloader schreibe (ich habe viele Ressourcen dazu gefunden, aber der Vollständigkeit halber fügen Sie bitte noch einige gute hinzu), meinen eigenen USB-Treiber (falls erforderlich), einen CD-Treiber (falls erforderlich) ) usw. Alles von Grund auf.

  • Wie bringe ich den Code in den Computer ein? Am besten mit einer Diskette? Können die meisten Computer dies von einem USB-Stick aus tun?

  • Welche Treiber benötige ich und können Sie Hinweise zum Erstellen dieser Treiber vorschlagen?

  • Nach der Bootsequenz - was dann? Wie komme ich in den geschützten Modus usw.

  • Wie verwalte ich den Speicher ohne die Hilfe eines Betriebssystems? Benutze ich nur die von mir gewünschten Adressen? Keine Initialisierung nötig?

  • Was wird mich zweifellos verwirren?

  • Wie kann ich es entweder zu einem Befehlszeilen-O/S oder zu einem grafischen machen?

  • Worauf baut ein grafisches Betriebssystem auf? Wie würde ich so etwas wie eine Befehlszeile mit einer Schriftart und einem Bild oben tun?

  • Wo kann ich Informationen zum Einrichten einer Multitasking-Umgebung finden? (dh mit zwei grafisch ähnlichen Befehlszeilen, die nebeneinander laufen).

  • Wie würde ich eine Art Fenstersystem einrichten? Wie zeige ich Grafiken auf dem Bildschirm an, wenn einfaches Multitasking eingerichtet ist?

Glauben Sie mir, ich verstehe, dass dies ein sehr kompliziertes Projekt ist, und ich werde wahrscheinlich nie dazu kommen, es fertig zu stellen oder irgendetwas zu schreiben, das irgendetwas nützt.

Es gibt noch viele andere Stücke, die ich nicht erwähnt habe. Wenn Sie an welche denken, können Sie diese gerne hinzufügen.

Bitte geben Sie pro Antwort ein "Thema" an - zum Beispiel USB-Treiber und dann möglicherweise eine Liste der Ressourcen, Dinge, auf die Sie achten müssen usw.

Schlagen Sie auch nicht vor, ein anderes Betriebssystem oder einen bereits vorhandenen Code aufzubauen. Ich weiß, ich werde lesen viel vorhandenen Code (wie den Linux-Kernel oder Beispielressourcen, vorhandene Treiber usw.), aber letztendlich möchte ich alles selbst schreiben. Ich weiß, dass ich sollte aus etwas anderem aufbauen kann, und es gibt viele andere Fragen zu SO), die ich lesen kann, wenn ich meine Meinung ändere und diesen Weg gehe Aber hier geht es darum, das Ganze von Grund auf neu zu machen.

Irgendwelche Vorschläge, wie man es grafisch bekommt? Verschiedene Videomodi und wie man damit arbeitet, etc?

110
Carson Myers

Das wichtigste zuerst. Lesen, lesen, lesen, lesen, lesen. Sie müssen ein sicheres Verständnis für die Funktionsweise des Betriebssystems haben, bevor Sie hoffen können, Ihr eigenes zu implementieren.

Besorgen Sie sich eines von Andrew Tanenbaums Büchern über Betriebssysteme. Dies ist die, die wir in meiner OS-Klasse am College verwendet haben:

Moderne Betriebssysteme PDF

Moderne Betriebssysteme bei Amazon

Trotz des lächerlichen Covers ist es eine fantastische Lektüre, besonders für ein Lehrbuch. Tanenbaum ist wirklich ein Experte auf diesem Gebiet und seine Erklärungen, wie das Betriebssystem unter der Haube funktioniert, sind klar und leicht zu verstehen. Dieses Buch ist größtenteils theoretisch, aber ich glaube, er hat auch ein Buch, in dem mehr über die Implementierung gesprochen wird. Ich habe es jedoch nie gelesen, daher kann ich keine Kommentare dazu abgeben.

Dies sollte Ihnen dabei helfen, Prozessmanagement, Speicherverwaltung, Dateisysteme und alles andere zu verbessern, was Ihr Betriebssystemkern tun muss, um einen bootfähigen Zustand zu erreichen. Ab diesem Zeitpunkt geht es im Wesentlichen darum, Gerätetreiber für die zu unterstützende Hardware zu schreiben und Implementierungen der C - Bibliotheksfunktionen anzubieten, um Kernelaufrufe für Dinge wie das Öffnen von Dateien und Geräten, das Lesen und Schreiben, das Weitergeben von Nachrichten zwischen Prozessen usw .

Informieren Sie sich über die x86-Assembly (vorausgesetzt, Sie entwerfen diese für einen x86-Computer). Das sollte viele Ihrer Fragen bezüglich des Wechsels zwischen den Prozessor-Betriebsmodi beantworten.

Wenn Sie sich mit Elektronik auskennen, ist es möglicherweise einfacher, ein Betriebssystem für ein eingebettetes Gerät zu schreiben, das eine umfassende Dokumentation enthält, da es im Allgemeinen einfacher ist als ein x86-PC. Ich wollte immer auch mein eigenes Betriebssystem schreiben und beginne mit dem Schreiben eines Mikrokernel-Embedded-Betriebssystems für This Development Board von Digilent. Es kann den Softcore-MicroBlaze-Prozessor von Xilinx ausführen, der über eine sehr gründliche Dokumentation verfügt. Es hat auch etwas RAM, Flash-Datenspeicher, LEDs, Schalter, Knöpfe, VGA-Ausgang, etc. Es gibt viel zu tun, um einfache Treiber zu schreiben.

Einer der Vorteile eines eingebetteten Geräts besteht auch darin, dass Sie das Schreiben eines VGA-Treibers möglicherweise für längere Zeit vermeiden können. In meinem Fall verfügt das Digilent-Entwicklungsboard über einen integrierten UART, sodass ich den seriellen Ausgang effektiv als meine Konsole verwenden kann, um das Ganze mit minimalem Aufwand auf eine Befehlszeile hochzufahren.

Stellen Sie einfach sicher, dass für jedes Ziel ein sofort verfügbarer und getesteter Compiler zur Verfügung steht. Sie wollen nicht gleichzeitig ein Betriebssystem und einen Compiler schreiben.

49
Bob Somers

http://www.osdev.org/ und http://www.osdever.net/

willkommen in der Welt der OS-Entwicklung.

Siehe auch andere x86-Dokumentationslinks in den SOs x86Tag-Wiki : Intel- und AMD-Handbücher, Compiler-/Assembler-Dokumente und verschiedene Handbücher.

Es wird auch empfohlen, BOCHS oder eine andere virtuelle Umgebung zum Debuggen zu verwenden, da Sie Ihren Bootloader in einem Schritt ausführen und die Register untersuchen können.

28
fnurglewitz

Ich würde vorschlagen, zumindest zunächst an Bochs oder einer anderen virtuellen Maschine zu arbeiten, da Sie diese an jedem beliebigen Ort mitnehmen können und das Debuggen einfacher ist (Sie können den genauen Status von sehen) die Hardware), und wenn Sie Hilfe von außen beim Debuggen benötigen, können sie genau dieselbe "Hardware" wie Sie verwenden.

Der nützlichste Rat, den ich habe, ist, sich in einen Zustand zu versetzen, in dem Sie C-Code so schnell wie möglich ausführen können - dh, Sie starten, richten Ihre Deskriptortabellen ein und gelangen zu einem Punkt, an dem es sicher ist, kompiliertes C auszuführen. Most Wenn nicht, sollte der gesamte Kernel in C sein, wenn Sie gesund bleiben und weiter daran arbeiten möchten. Die Montage ist zwar an einigen Stellen erforderlich, aber langwierig und in der Regel schwer zu debuggen.

15
hbar

Auf der untersten Ebene muss ein Betriebssystem mindestens in der Lage sein, die Hardware eines Systems auf irgendeine Weise anzutreiben und auf irgendeine Weise einen "Benutzercode" zum Ausführen zu laden. Wenn Sie mit einem PC beginnen möchten, müssen Sie Code schreiben, der von einem Gerät oder einem anderen geladen werden kann. Ältere PCs haben ein BIOS in der Firmware, das festlegt, wie die Hardware eine Initialisierung durchführt (mindestens Video, Tastatur und irgendeine Form von Speicher oder Bootloader). (Update Oktober 2017: Neuere PCs verfügen über EFI- oder UEFI-Firmware. Dies ist weitgehend ein umständlicher Unterschied. Diese dienen denselben Zwecken für diese Diskussion.).

Machen Sie sich zunächst mit den Details zur Verwendung des BIOS oder einer anderen Firmware auf Ihrem Zielsystem vertraut. Das heißt, Sie lernen, wie Sie ein Programm schreiben, das das BIOS laden und ausführen kann. Das wird sich irgendwann in Ihren Bootloader verwandeln. Fangen Sie klein an. Holen Sie sich einfach ein Programm, das druckt: "Hallo, Linus" direkt vom Firmware-Startvorgang (auf einer Diskette oder einem USB-Stick wäre ein guter Start ... oder auf einer Festplatte, wenn Sie möchten).

Von dort aus würde ich empfehlen, einen sehr einfachen seriellen Treiber zu schreiben. Aktualisieren Sie Ihren Bootloader, um eine serielle Schnittstelle zu initialisieren, und starten Sie dort einen Download. Dann kann es den Code ausführen, den es herüberzieht. Von dort aus schreiben Sie ein bisschen bootstrap, das in eine andere Gruppe von Blöcken schreiben kann (wir haben noch kein Dateisystem implementiert ... nicht einmal das Parsen von Partitionstabellen; wir würden uns also nur darum kümmern Rohbereiche von Blöcken auf der Platte zuerst).

An diesem Punkt sollte Ihr Bootloader in der Lage sein, neuen Code über die serielle Leitung zu ziehen, ihn in eine Partition zu kopieren (ja, eine Art Partitionstabellenbehandlung implementieren ... ob er den Standard-PC-Konventionen entspricht, liegt an diesem Punkt bei Ihnen ), und führen Sie es aus.

Von dort aus sollten Sie in der Lage sein, an weitaus komplexeren Funktionen zu arbeiten. Von dieser Basis aus können Sie einen neuen "Kernel" schreiben und kompilieren. Starten Sie Ihr Testbed neu und lassen Sie den neuen Kernel darauf implementieren.

(Ihr Bootloader sollte ein Signal wie BREAK over the Serial Handshaking als Befehl zum Überspringen des Downloads und zum einfachen Booten des vorhandenen Abbilds empfangen und auf diese Weise auch eine gewisse Zeitüberschreitung bewältigen.).

Von dort schreiben Sie eine sehr einfache Terminal-Ebene und Kommando-Shell? Ein Dateisystem? Implementieren Sie Befehle, um andere ausführbare Inhalte als den Kernel (Dateien oder Objekte) herunterzuladen. Und so weiter.

Natürlich hätten Sie mit einem Konsolentreiber über die PC-Tastatur und das Video beginnen können (BIOS INT 0x16h bzw. INT 0x10H, wenn ich mich richtig erinnere). Ich würde jedoch empfehlen, mit einem seriellen Treiber zu beginnen, da Sie dann Ihren Build/Deployment/Test-Zyklus von jedem anderen vorhandenen (funktionalen) System aus automatisieren können. Da Ihr neues Betriebssystem als ein cross-kompiliertes Projekt gestartet wird, ist es für Sie von wesentlicher Bedeutung, über eine optimierte Vorgehensweise zu verfügen.

Ich weiß nicht, wie weit Sie Ihr Projekt bringen wollen. Ein einigermaßen beeindruckendes Ziel wäre es, "Self-Hosting" zu erreichen. Wenn Sie einen einfachen Assembler/Compiler erstellen können, mit dem Sie mit Ihrem neuen Betriebssystem eine funktionierende Version Ihres neuen Betriebssystems (neu) erstellen, verknüpfen und booten können ... dann haben Sie dieses Ziel erreicht. (Beachten Sie, dass dies keine Voraussetzung ist. Viele eingebettete Systeme werden sich niemals selbst hosten und daran ist nichts auszusetzen.).

14
Jim Dennis

Wenn es Ihnen nichts ausmacht, Hardware-Virtualisierung zu verwenden, gibt es einen Kurs (Buch + Vorlesungen + Software), der Sie "Von Nand zu Tetris" führt. Sie erstellen ein vollständiges Computersystem vollständig selbst vom (für diese Zwecke atomaren und vorgegebenen) elektrischen NAND-Gatter bis hin zum Erstellen des Betriebssystems, einer Sprache und schließlich zum Codieren eines einfachen Spiels auf Ihrem PC.

Ich denke, es ist eine großartige Idee und etwas, woran ich festhalten werde. Das Buch ist überraschend günstig und ich glaube, der Kurs wird am MIT unterrichtet. Ich kann mir kein besseres Gefühl vorstellen, als das vollständige Wissen über ein ganzes System zu haben, das Sie selbst von Grund auf aufgebaut haben.

Link: http://www1.idc.ac.il/tecs/

12
Sam

Ich würde klein anfangen und ein eingebettetes 8086-Entwicklungskit kaufen und darauf ein Multitasking-Betriebssystem entwickeln. Sobald Sie einen Kernel haben und mit der Arbeit auf Hardware-Ebene vertraut sind, sind Sie bereit, etwas Herausfordernderes zu tun.

Sogar ein VGA-Display-DOS-Klon zu erstellen, ist eine ziemlich herausfordernde Sache. Die Details sind enorm. :-)

spezifische Themen.

Wie bringe ich den Code in den Computer ein? Am besten mit einer Diskette? Können die meisten Computer dies von einem USB-Stick aus tun?

Das BIOS führt elementares Bootstrapping durch.


Welche Treiber benötige ich und können Sie Hinweise zum Erstellen dieser Treiber vorschlagen?

alles, was keine direkten CPU-/Speicheroperationen sind. Alles, was nicht direkt im CPU-Referenzhandbuch steht.


Nach der Bootsequenz - was dann? Wie komme ich in den geschützten Modus usw.

Der geschützte Modus ist Teil der Startsequenz.

dann starten Sie Multitasking und finden heraus, wie Prozesse gestartet werden.


Wie verwalte ich den Speicher ohne die Hilfe eines Betriebssystems? Benutze ich nur die von mir gewünschten Adressen? Keine Initialisierung nötig?

Richtig. Sie werden wahrscheinlich irgendwann ein virtuelles Speichersystem aussortieren wollen.


Was wird mich zweifellos verwirren?

keine Debugging-Tools, keine E/A


Wie kann ich es entweder zu einem Befehlszeilen-O/S oder zu einem grafischen machen?

Mit Trauer. Suchen Sie nach Windows 3.1 und Linux, insbesondere nach X-Windows.


Worauf baut ein grafisches Betriebssystem auf? Wie würde ich so etwas wie eine Befehlszeile mit einer Schriftart und einem Bild oben tun?

Schlage in X-Fenstern nach.


abschließender Rat: studieren Sie Linux/x-Fenster. Es ist nicht perfekt, aber es vermittelt ein Verständnis des one Ansatzes. Studieren Sie auch eingebettete Systeme.

10
Paul Nathan

Wenn dies auf echter Hardware ausgeführt werden soll, benötigen Sie vor allem eine Kopie des Handbuchs Ihres Prozessors. Die Intel-Handbücher ( http://www.intel.com/products/processor/manuals/ ) sind von unschätzbarem Wert. Sie gehen alles durch, vom Umschalten des Modus (real/geschützt) über die Verwaltung des virtuellen Speichers (wenn Sie sich dazu entschließen, so weit zu gehen) bis hin zum Ausführen von Systemaufrufen (wenn Sie jemals den Benutzermodus verwenden). Vor allem erklären sie sehr detailliert eine Reihe von Dingen, die eingerichtet werden müssen, damit Dinge funktionieren, wie das TSS und die Segmentregister, die die meisten OS-Texte Diskutieren Sie nicht, weil es ihnen mehr um übergeordnete Konzepte als um prozessorspezifische Details geht.

8
csgordon

Ich sehe viele gute Referenzen zu OS-Entwicklungsseiten, daher beschreibe ich einen anderen Ansatz:

Wenn Sie ein Betriebssystem aus dem Nichts heraus implementieren möchten, gibt es eine bessere Auswahl an Hardware als bei einem alten PC. Mit der PC-Architektur verbringen Sie einen übermäßigen Teil Ihrer Zeit damit, uninteressante Artefakte aus der 30-jährigen Designgeschichte zu programmieren. Zum Beispiel hat wahrscheinlich nur der Bootloader-Teil des Projekts so manchen mutigen Programmierer ausgebrannt.

Zum Beispiel benötigen Sie einen Treibersatz, um Ihren Kernel von der Festplatte und/oder vom Netzwerk zu lesen. Dann benötigen Sie Code, um in den geschützten Modus zu gelangen. Zu diesem Zeitpunkt benötigen Sie einen weiteren Treibersatz! Sehr wenig von der Arbeit, die Sie tun, um den Chip in den geschützten Modus zu versetzen, ist danach übertragbar. Sie möchten es auf einem anderen PC + - 4 Jahre laufen lassen und benötigen noch einen weiteren Treibersatz.

Schauen Sie sich das Bootstrapping eines ARM oder eines anderen 32-Bit "eingebetteten" Chips an. Preiswerte Entwicklungsboards sind erhältlich, oder Sie können Ihre eigenen löten! Einige haben integriertes Ethernet und USB. Ich denke, Sie werden es tun Viel Spaß beim Arbeiten an einer vernünftigen, nicht verkrusteten Architektur und möglicherweise mit einigen wiederverwendbaren Fähigkeiten.

8
Marsh Ray

Die OS Development Series @ BrokenThorn könnte Sie interessieren.

8
tomzx

Versuchen Sie, den Code eines kleinen Open Source-Betriebssystems wie MikeOS zu lesen.

Alternativ schlage ich folgende Schritte vor (soll Spaß machen!):

  1. Schreiben Sie eine virtuelle Maschine. Definieren Sie alle Prozessoranweisungen, damit Sie Ihr System in- und auswendig kennen. Verbinden Sie es mit SDL für Tastatur, Maus, Bildschirm und Audiozugriff. Halten Sie es einfach, so dass Sie alles auf einmal in Ihren Kopf passen können. Es muss sich nicht um eine hochmoderne virtuelle Maschine handeln, sondern nur um eine, die die Funktion eines "echten" Computers emulieren kann.
  2. Schreiben Sie einen Assembler für den Prozessor Ihrer virtuellen Maschine. Denken Sie daran, dass dieser Assembler kein Programm sein muss, das in der Sprache der virtuellen Maschine geschrieben ist, sondern alles, was Ihre Assemblersprache in Maschinencode konvertieren kann.
  3. Definieren Sie ein ausführbares Format und schreiben Sie einen einfachen Linker.
  4. Sie haben jetzt alle Teile, um Ihr Betriebssystem zu schreiben! Schreiben Sie es in der Assemblersprache, stellen Sie es zusammen ... usw .. Sie brauchen keinen so komplizierten Boot-Ladevorgang, sondern lassen Ihren Computer zuerst Ihr Betriebssystem ausführen.

Die obigen Schritte mögen für das Schreiben eines einfachen Betriebssystems ein bisschen dumm erscheinen, aber hey, es macht verdammt Spaß.

8
ouiliame

Sie haben ein ehrgeiziges Ziel. Aber die Ausführung ist der Schlüssel.

Die meisten strukturierten Ansätze (Lehrbuch oder Hochschulklasse) werden Sie durch den Prozess führen, aber sie enthalten einen Großteil des winzigen Codes, der die geheimen Details Ihrer gewählten Plattform verdeckt und Sie sich auf die Gesamtideen konzentrieren lässt: Prozessplanung, Speicherverwaltung, Deadlock-Verhinderung, E/A usw.

Mein Rat lautet: Reduzieren Sie Ihre Erwartungen und beginnen Sie mit einer grundlegenden Frage.

Was ist ein Betriebssystem?

Ein Informatiker wird (hoffentlich) nie sagen, dass ein Betriebssystem eine grafische Benutzeroberfläche oder ein Webbrowser ist oder eine Möglichkeit, USB-Geräte oder alles, was ein Benutzer tatsächlich sehen oder berühren kann, anzuschließen. Stattdessen sind ein Betriebssystem auf seiner grundlegendsten Ebene die Dinge, die ich oben erwähnt habe. Sie alle fallen unter einen großen Dach: Ressourcenmanagement.

Ein Betriebssystem ist nichts anderes als ein Programm, das die Hardwareressourcen des Computers verwaltet: Speicher, CPU und Peripheriegeräte.

Hier ist ein einfaches Betriebssystem: Mit einem Programm kann der Benutzer ein Programm (hexadezimal oder binär) über eine serielle Verbindung eingeben. Sobald das Programm eingegeben wurde, wird es ausgeführt. Wenn das Programm beendet ist, wird die Steuerung an den Benutzer zurückgegeben, wo er das Programm entweder erneut ausführen oder ein neues eingeben kann.

Tun Sie dies auf einer "sauberen" Architektur wie einem eingebetteten ARM Prozessor mit 64 KB Arbeitsspeicher oder so. Sie können dies in Assembly nach einigen Tagen des Erlernens der Vor- und Nachteile von ARM codieren Und voila! , du hast selbst ein Betriebssystem.

Es macht alles, was ein Betriebssystem tun soll:

  • Es verwaltet den Speicher, indem der Benutzer das Betriebssystem selbst nicht überschreiben darf.
  • Sie plant die Ausführung eines einzelnen Prozesses.
  • Es handhabt die E/A für das einzelne serielle Peripheriegerät.

Dies gibt Ihnen einen Baustein, von dem aus Sie beginnen können. Sie haben jetzt viele Möglichkeiten. Vielleicht wäre eine davon, zwei Programme in den Speicher laden zu lassen und den Benutzer entscheiden zu lassen, welches als nächstes ausgeführt werden soll.

Oder Sie können den Benutzer die Ausführung eines Programms anhalten, zum anderen wechseln, anhalten und zurückschalten lassen. Dies ist rudimentäres Multitasking, obwohl es vollständig manuell ist.

Ihre Auswahlmöglichkeiten sind unbegrenzt, aber jede ist ein kleiner Schritt von dem, was Sie zuvor hatten.

Es macht Spaß, wenn Sie Ihre Ziele nicht zu hoch setzen!

6
Barry Brown

check out MikeOS . Es ist ein ziemlich einfaches Betriebssystem, das lesbar ist (wie in der kommentierten Assembly). Obwohl es ziemlich einfach ist, hat es eine GUI und unterstützt einige Netzwerk- und Multimedia-Funktionen.

edit : MenuetOS ist grafisch. Sein auch geschriebenes ist gerade asm, aber sein höher entwickeltes als MikeOS

6
Alex

Ich führe eine Liste von Ressourcen in StackOverflow: Wie fange ich mit der Betriebssystementwicklung an? . Bitte füge neue Ressourcen hinzu, wenn du anfängst, ein Abenteuer zu werden (ich fange gleich an :))

5
Giovanni Galbo

Viele Schulen haben OS-Klassen, die viel von dem, was Sie beschreiben, tun. Meine Schule (CMU) unterrichtete OS in C, und wir schrieben einen Kernel, ein Dateisystem und eine Shell und erhielten Code für einen Bootloader.

Leider konnte ich im Internet keine endgültige Ressource für diesen Kurs (15-412) finden, und er hat sich im Laufe der Zeit weiterentwickelt. Aber vielleicht könnten Leute Links zu Quellen und Aufgaben für Schulen posten, die gute Ressourcen im Web haben.

4
Drew Hoskins

Vielleicht möchten Sie einen Blick auf Betriebssystemkonzepte werfen, von Abraham Silberschatz - Das Verständnis der Konzepte der Systemprogrammierung ist eine grundlegende Voraussetzung. Werfen Sie einen Blick auf F/OSS-Kernel-Interna der Betriebssysteme Linux * BSD und GNU/Linux , insbesondere früherer Versionen, die wahrscheinlich etwas mehr dokumentiert sind. alt textalt text

3
amaterasu

Studieren Sie das A2-System (früher als Oberon-System bezeichnet) nach Ideen, die Sie stehlen können. Es ist ein grafisches Betriebssystem, das nur von zwei Personen erstellt wurde, obwohl einer davon zugegebenermaßen Niklaus Wirth ist. Erstmals veröffentlicht um 1990 und die Geschwindigkeit ist erstaunlich gut. Es gibt ein Buch von Gutknecht.

3
Norman Ramsey

Über die Low-Level-Grafikprogrammierung erhalten Sie viele Informationen: http://www.osdever.net/FreeVGA/home.htm . (Es ist auch für den Textmodus sehr interessant.)

Was wird mich zweifellos verwirren?

Sie werden feststellen, dass auf dem PC eine Menge Dinge unklar sind: Der x86-Befehlssatz selbst ist kompliziert, und wenn Sie direkten Zugriff auf Hardware erhalten, kann es eine Weile dauern, bis Sie verstehen, wie Sie ein einzelnes Zeichen auf dem Bildschirm schreiben .

Machen Sie sich keine Gedanken über Disketten und ähnliches. Meistens verwenden Sie einen Emulator wie Bochs oder QEmu.

3

Vielleicht gefällt Ihnen this Tutorial mit dem Titel "Roll your own toy UNIX-clone OS", das sehr aufschlussreich ist und Ihnen auf Ihrem Weg helfen sollte.

Viel Glück.

3
blacky

Schauen Sie sich Minix an. Lesen Sie den Quellcode zusammen mit " Betriebssystemdesign und -implementierung ". Erwägen Sie, Beiträge zum Projekt zu leisten. Ich denke, Minix ist ein wirklich gutes und vielversprechendes Betriebssystem. Es ist auch ein gut finanziertes Projekt. Das heißt, Sie könnten sogar für Ihre Beiträge bezahlt werden!

2
Vijay Mathew

Es ist sehr einfach, da im BIOS bereits viele Eingabe-/Ausgabefunktionen zum Ändern des Bildschirmmodus, zum Ändern der Pixelfarbe, zum Schreiben von Text auf den Bildschirm und vielen anderen Dingen integriert sind. Es enthält jedoch keine Unterstützung für Dateisysteme. Dies ist eines der wenigen Dinge, die Sie in Ihr Betriebssystem integrieren müssen.

Das BIOS lädt den ersten Sektor auf die Festplatte und startet die Ausführung des Codes von dort aus. Daher muss Ihr Betriebssystem mit der ersten Anweisung im ersten Sektor auf der Festplatte platziert werden.

Dieser Wikipedia-Artikel soll Ihnen den Einstieg in BIOS-Interrupts erleichtern, mit denen Sie Text auf den Bildschirm schreiben, Tasten von der Tastatur und andere Funktionen empfangen können. https://en.wikipedia.org/wiki/BIOS_interrupt_call

Selbst wenn Sie vorhaben, c ++ zu verwenden, empfehle ich Ihnen dringend, sich mit der Assembly-Programmierung vertraut zu machen, da es wichtig ist, die Funktionsweise der Hardware zu verstehen.

1
Alpha_Pi