Ist es eine gute Idee, ein Betriebssystem in einer Skriptsprache zu schreiben? [geschlossen]


8

Ist es eine gute Idee, ein Betriebssystem zu erstellen, das in einer Skriptsprache geschrieben ist?

Wie wäre es zum Beispiel mit dem Erstellen eines Betriebssystems mit Python?



Es gibt virtuelle Maschinen in Javascript geschrieben ...
user16764

3
Eine so gute Idee wie ein Auto aus Plastik und ohne Metall zu bauen.
Job

Emacs ist ein nettes Betriebssystem, und elisp ist in der Tat eine Skriptsprache, sowohl aufgrund seiner Verwendung als auch aufgrund seines dynamischen Umfangs.
SK-Logik

Antworten:


15

Es ist nicht nur eine schlechte Idee. Es ist so ziemlich unmöglich.

Wie implementieren Sie E / A mit einer Sprache, deren E / A-Funktionen vollständig vom Host-Betriebssystem abhängen?

Wie können Sie die primitive Zeitplanung ohne nützliche Interrupt-Primitive implementieren?

Wie können Sie einen Gerätetreiber in einer Sprache schreiben, die ein bestimmtes Byte nicht adressieren kann?

Bearbeiten: - Nur um ein bisschen zu klären. Sie können kein "echtes" Betriebssystem schreiben, das in einer "Skriptsprache" direkt mit dem Computer interagiert. Sie können jedoch eine verwendbare "virtuelle Maschine" schreiben, wenn die Skriptsprache flexibel genug ist. Zum Beispiel wurden Implementierungen von Donald Knuths theoretischer MIX (s) -Maschine und eines ZX80- Emulators, der gut genug ist, um Pacman auszuführen, in JavaScript geschrieben.


2
@ClintNash wirklich? JavaScript per Definition befindet sich in einer Laufzeitumgebung, die auf einem Betriebssystem ausgeführt werden muss. Sicher, es ist theoretisch möglich, es zu binär vorkompilieren, aber das ist so gut wie unbekannt. Node.js muss auf einem Host-Betriebssystem ausgeführt werden. JavaScript hat keinen nativen Zugriff auf die Konstrukte, die zum Schreiben eines echten Betriebssystems erforderlich sind. Sicher, sobald Sie auf einem ausreichend hohen Abstraktionsniveau sind, können Sie mit der Verwendung von Skripten beginnen, aber etwas darunter erfordert echte, nackte Metallfähigkeiten, um mit der Hardware zu interagieren.
Bunglestink

Ich glaube du bist richtig @bunglestink. Ich bezog mich auf die Verwendung von JS / OS auf einer höheren Abstraktionsebene. Ich bin mir nicht sicher, auf welcher Ebene Windows 8 JS integriert.
Jack Stone

1
Lisp hat keine Interrupt- oder E / A-Grundelemente und kann nicht auf den Rohspeicher zugreifen. Es ist dynamisch getippt. Das Betriebssystem der Lisp-Maschinen wurde jedoch in Lisp geschrieben.
Nikie

1
@nikie - ja, aber es ist kein echtes Betriebssystem, das sich immer noch auf das zugrunde liegende Betriebssystem für alle Basisdienste stützt.
James Anderson

6
@ nikie Lisp-Maschinen wurden auf spezieller Hardware aufgebaut, die die virtuelle Lisp-Maschine im Grunde auf Hardwareebene implementierte. Also ja, in einigen Fällen ist dies möglich, aber an diesem Punkt implementieren Sie Ihr Betriebssystem tatsächlich in der primitivsten Form, die möglich ist - auf Mikrocode-Ebene.
Bunglestink

6

Bevor Sie sich für das Wie entscheiden , müssen Sie das Was angeben . Was wird dieses neue Betriebssystem tun? Wo wird es laufen? Warum sollte sich jemand die Mühe machen, es zu benutzen? usw. Als nächstes müssen Sie die Eigenschaften des Betriebssystems bestimmen. Geschwindigkeit, Sicherheit, Threading, Speicherverwaltung, Multitasking, Dateiformate, Sprachunterstützung, unterstützte Prozessoren usw.

Durch Beantwortung der oben genannten Fragen und Berücksichtigung der vielen Eigenschaften Ihres Betriebssystems können Sie bestimmen, mit welchem ​​Tool Sie Ihre Ziele erreichen möchten.

Wollen Sie das alles wirklich tun?

Ich gehe davon aus, dass Python teilweise zum Schreiben von Teilen von Linux verwendet wurde - Siehe: In welchen Sprachen sind Windows, Mac OS X und Linux geschrieben?


3

Ich weiß, dass dies keine richtige Antwort ist, aber dieses Projekt zeigt ein funktionierendes Betriebssystem mit einem in JavaScript geschriebenen Kernel:

https://github.com/charliesome/jsos/

Die Treiber für VGA und die Tastatur wurden ebenfalls mit Interrupts in JavaScript geschrieben. Ich habe vor einiger Zeit selbst eine Implementierung von OpenGL 1.1 dafür entwickelt und es funktioniert ziemlich gut.


5
Eigentlich sieht das so aus, als ob der Bootloader und die Low-Level-Funktionen in c und Assembly geschrieben sind ... Außerdem ist die gesamte virtuelle Maschine von js in c ...
bunglestink

An dieser Stelle könnte man auch argumentieren, dass Betriebssysteme nicht in C geschrieben werden können, da Teile in x86 geschrieben werden müssen.
Overv

1
Guter Punkt, kann damit nicht streiten. Asm wird immer auf einer bestimmten Ebene erforderlich sein; obwohl ich glaube, dass das einzige Stück, das unbedingt in asm auf x86 geschrieben werden muss, der Bootloader ist. Danach verfügen die meisten C-Implementierungen über Inline-Assembly-Funktionen, mit denen Sie darüber hinausgehende Elemente erstellen können. Dies steht im Gegensatz zu einer Skriptsprache, in der immer eine geringere Abstraktion einer Laufzeitumgebung vorhanden sein muss, da sie die Hardware niemals berührt, ohne die Laufzeitabstraktion zu durchlaufen.
Bunglestink

3

Nein, es ist nicht einmal möglich (ausschließlich)

Warum? Folgendes berücksichtigen:

Was ist eine Skriptsprache?

Nehmen wir die folgenden zwei Annahmen zur Definition einer "Skriptsprache" an:

  1. Die Sprache lebt in einer Laufzeitumgebung.
  2. Die Sprache hat keinen Zugriff auf Rohspeicherzeiger.

Was ist ein Betriebssystem?

Nehmen wir an, dass das Hauptziel eines Betriebssystems wie folgt vereinfacht werden kann:

  • Bereitstellung einer Abstraktion zwischen Benutzerprogrammen und der Hardware, auf der sie ausgeführt werden

Aufgrund dieser Definitionen ist es logisch unmöglich, dass eine Skriptsprache ein Betriebssystem ist. Warum?

  1. Ein Betriebssystem muss uneingeschränkten Zugriff auf den Arbeitsspeicher eines Computers haben, um mit der Hardware kommunizieren zu können. Da Skriptsprachen keinen Zugriff auf Rohspeicherzeiger haben, können sie dies nicht tun.
  2. Da für eine Skriptsprache eine Laufzeitumgebung erforderlich ist, sie jedoch nicht direkt mit der Hardware kommunizieren kann, muss die Umgebung in einer anderen Sprache codiert werden, die über diese Fähigkeit verfügt. In diesem Fall muss (wie bei JSOS, das in anderen Posts erwähnt wurde) eine niedrigere Sprache verwendet werden, um eine Schnittstelle zum Computer herzustellen.

Es ist möglich, eine Mindestmenge an Code in einer "rohen" Sprache wie C zu schreiben, aber per Definition wird immer eine kompilierte Rohsprache benötigt. Sobald dies geschehen ist, können andere Teile des Betriebssystems in einer Skriptsprache implementiert werden, eine Skriptsprache kann jedoch niemals alleine verwendet werden.


Um fair zu sein, richtet ein typisches Betriebssystem eine Laufzeit für C ein und macht grundlegende Hardware-Abstraktionen verfügbar, bevor C-Code tatsächlich ausgeführt wird. Sie können das Gleiche tun, indem Sie einfach eine JavaScript-Laufzeit bereitstellen. Diese Laufzeit liegt ein gutes Stück über C, aber sobald sie verfügbar ist, handelt es sich im Wesentlichen um ein modernes Komponentenobjektmodell, mit der Ausnahme, dass JSON sinnvoller als ini ist und Javascript standardmäßig selbstbeschreibend ist, sodass Sie keine Typbibliotheken benötigen. JavaScript ist so selbstbeschreibend, dass es die Funktionen des Objekts über toString abrufen, bearbeiten und wieder auf der Festplatte speichern kann. Es ist nicht undenkbar, es für einen Kernel zu verwenden.
Dmitry

0

Ich muss behaupten, dass es grundsätzlich möglich ist, ein Betriebssystem in Python zu schreiben. Sie müssten einen Python-to-Low-Level-Sprachcompiler erstellen und der Standardbibliothek Module hinzufügen, die den Zugriff auf die Low-Level-Teile Ihres Computers ermöglichen. Aber wenn diese beiden Teile vorhanden wären, wäre es möglich.

Jedoch,

  1. Es wird sehr schwierig sein, einen Compiler zu schreiben, der effizienten Code erzeugt
  2. Python wird für den Zugriff auf Details auf niedriger Ebene umständlich sein

3
Außerdem würde Python in diesem Szenario nach keiner vernünftigen Definition mehr als "Skriptsprache" gelten.
tdammers

@tdammers, ich betrachte die Skriptsprache sowieso als ein schlecht definiertes Konzept.
Winston Ewert
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.