15 Stimmen

Wie viel von einem Betriebssystem könnte z. B. in Python geschrieben werden?

Dies ist eine ziemlich theoretische Frage, aber

Wie viel von einem Betriebssystem könnte in einer Sprache wie Python, Ruby, Perl oder Lisp, Haskell usw. geschrieben werden?

Es scheint, als ob vieles, wie z.B. init.d, trivialerweise in einer Skriptsprache erledigt werden könnte. Eines der Firewall-Device-OS's ( m0n0wall ) verwendet PHP für seine Systemkonfiguration (auch beim Booten). Und man könnte argumentieren, dass "emacs ein Betriebssystem ist, das größtenteils in Lisp geschrieben ist"

Natürlich gibt es Bits, die Assembler/C sein müssten, aber wie viel könnte aus normalen .py/rb/.pl/.el/.hk-Dateien bestehen...? Es mag nicht die beste Leistung haben, aber es wäre bei weitem das am einfachsten zu modifizierende Betriebssystem überhaupt...

23voto

Serafina Brocious Punkte 29935

Technisch gesehen ist das alles möglich, wenn man einen entsprechenden Compiler schreibt. Betriebssysteme wurden bereits in Java (JNode), .NET (MOSA, Singularity, SharpOS, Cosmos), Haskell (HOUSE), Python (Unununium) usw. entwickelt.

Edit: Ich sehe, dass viele Leute davon sprechen, dass die unterste Ebene ein Bereich ist, in dem dies nicht möglich ist; das stimmt nicht.

Es gibt keinen Grund, warum der Compiler für die Sprache X nicht erweitert werden kann, um jede Low-Level-Operation zu verarbeiten und sie der Sprache zugänglich zu machen. Alle Funktionen können mit jeder Sprache erreicht werden, es geht nur darum, das richtige Werkzeug für die Aufgabe auszuwählen. Manchmal ist das Python, manchmal ist es C, manchmal ist es Assembler.

Schauen Sie sich Projekte wie Cosmos und SharpOS an, um ein reines High-Level-Betriebssystem zu sehen, das richtig gemacht wurde (TM).

8voto

Ich bin überrascht, dass niemand Java-Hardware erwähnt hat. Sie sollte uns dazu inspirieren, die Evolution der Hardware durch die Entwicklung eines noch leistungsfähigeren Prozessors voranzutreiben.

Es gibt ein weiteres Projekt, das ich gerade gefunden habe: " Pycorn ".

Wenn es einen Python-Bytecode-Prozessor gäbe, wäre es möglich, ein schnelles Betriebssystem in 100% Python zu erstellen. Der Prozessor könnte den gesamten CPython-Bytecode implementieren, oder alles, was mit der Python-Sprache kompatibel ist (aber keine C-Module!). Der Prozessor müsste mit Referenzzählung, Klassen und Objekten umgehen können. Natives Hashing für Dicts wäre sehr hilfreich, alle komplexen Datenstrukturmanipulationen, die Python derzeit in Software benötigt, sollten rein in Hardware erfolgen. Es gäbe kein Konzept von Zeigern, was ich als Hauptmotivation für den Bau eines solchen Prozessors ansehe, da es unmöglich wäre, den Stack zu zerstören.

Alles wäre ein Objekt! Der Kernel selbst würde Methoden auf dem Speicherobjekt aufrufen, obwohl Sie es nicht viel berühren müssten, da die Hardware sowieso die Zuweisung und die Garbage Collection übernimmt. Interrupt-Handler können einfach auf Python-Methoden gesetzt werden. MSRs, Caches, Debug-Register und I/O-Ports sind Objekte.

Es gibt eine interessante Diskussion über die Implementierung von Python auf einem FPGA aquí .

Auf eine andere Anmerkung, (in Bezug auf eine Python O/S auf einem nicht-Python-Prozessor) zu den Menschen, die behaupten, dass Sie nicht Inline-Assembler Pythonic machen können, ist es ziemlich einfach, nur Assembler von einer Abstraktion, z. B. emittieren:

asm = MetaASM()
asm.r1 = 1234
asm.r2 = r1 + 5
asm.io.out(r1)

Sie können bei Bedarf auf architekturspezifische Assemblierung oder architekturspezifische Operationen/Register umschalten:

asm = ASM("IA-32")
asm.xor(asm.eax, asm.eax)
asm.cr0 = asm.eax
asm.invtlb
asm.fs.0x00123456 = asm.eax
asm.al = 123
asm.dword.ptr.eax = 1234 # mov dword ptr [eax], 1234
asm.push(asm.eax)

CorePy Interesse an diesem Thema aufkommt.

4voto

Matt J Punkte 41229

Python bietet von Haus aus keine Konstrukte, um direkt mit der Hardware zu kommunizieren, wie z.B. rohe Zeiger für Memory-Mapped I/O und viele andere Konstrukte, die von C/ASM bereitgestellt werden. Es gibt jedoch Beweise dafür, dass fast alles in einem Betriebssystem in einer abstrakteren Sprache geschrieben werden kann; die Singularity OS von Microsoft ist fast ausschließlich in Varianten von C# geschrieben. Es gibt einen extrem geringen Anteil an C/ASM für Interrupt-Handler und ähnliches, aber alles andere, einschließlich dessen, was die meisten von uns als "den Kernel" betrachten, kann im Wesentlichen in jeder Turing-kompletten Sprache geschrieben werden.

Es sollte angemerkt werden, dass Singularitys Entscheidung, diese Low-Level-Konstrukte in C/ASM zu implementieren, nicht als grundsätzliche Einschränkung der Syntax oder anderer Aspekte von Hochsprachen interpretiert werden sollte. Man könnte sicherlich eine Variante von Python entwickeln, die den notwendigen Assembler-Code ausgibt und entsprechend behandelt.

3voto

ADEpt Punkte 5434

House - Betriebssystem und Umgebung für Haskell-Benutzer . Es ist sogar innerhalb einer VM bootfähig und man kann damit spielen.

Die Quellen sind sehr lesenswert, IMO.

3voto

Matthew Scharley Punkte 121038

Neben dem Kernel (und damit meine ich den Kernel im Mikrokernel-Stil) und etwas zum Kompilieren der Laufzeiten für jede der besagten dynamischen Sprachen gibt es so ziemlich alles COULD sein, wenn Sie Ihr eigenes Betriebssystem entwickeln würden. Es ist einfach nicht praktikabel. Verdammt, init.d ist hauptsächlich in sh soweit mir bekannt ist. Aber sh ist zwar nicht sehr leistungsfähig, aber SEHR leicht und, soweit ich weiß, effizient in dem, was es tut. Höhere Sprachen wie Python, Perl, etc, könnte es gut behandeln, aber es wäre viel langsamer, und würde viel mehr Speicher für Instanzen von Interpreter nehmen.

Es ist möglich, nur nicht praktisch.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X