Halten Sie Managed OSes für eine gute Idee? [geschlossen]


15

Managed OSes wie Microsoft Singularity und JNode sind ein interessantes Konzept. Im Wesentlichen wird das Betriebssystem mit Code gebootet, der in einer einfachen Sprache (C / C ++ / Assembly) geschrieben ist, die im Wesentlichen eine virtuelle Maschine implementiert. Das restliche Betriebssystem (und alle Userland-Apps) werden auf der virtuellen Maschine ausgeführt. Es gibt einige großartige Dinge. Zum Beispiel machen Sie plötzlich beliebige Zeiger überflüssig. Und wenn es gut geschrieben ist, werden Sie eine Tonne Legacy-Crud los, die die meisten modernen Betriebssysteme derzeit haben.

Ein Nachteil ist jedoch, dass Sie sich viel weiter von der Hardware entfernen und als Entwickler die Fähigkeit verlieren, sich auf eine niedrigere Abstraktionsebene zu begeben und sich die Hände schmutzig zu machen.

Wie ist Ihre Meinung dazu?


Ich habe Angst zu antworten, da ich auf Hochsprachen eingestellt bin, da dies die einzigen Sprachen sind, die ich verwendet habe
TheLQ

2
Bei immer schnelleren Computern halte ich das für eine große Sache. Wenn MSFT es jedoch implementiert, wird es entweder großartig sein oder viel scheißen - es gibt kein dazwischen.
Job

Beachten Sie, dass der "Legacy Crud" dafür sorgt, dass vorhandene Anwendungen ausgeführt werden. Unterschätzen Sie nicht, wie wichtig es ist, tatsächlich etwas zu verwenden.

Antworten:


8

Ich denke, dass dies ein weiterer Fall ist, bei dem "es darauf ankommt".

Wenn Sie Anwendungen wie Webbrowser, Textverarbeitungsprogramme usw. schreiben, bei denen blitzschnelle Leistung nicht unbedingt ein Problem ist, hat dieser Ansatz seine Vorzüge. Mit diesem Ansatz können Sie Ihren Kunden ein sichereres und kontrollierteres Erlebnis bieten. Sie begrenzen nicht nur den durch Malware verursachten Schaden, sondern arbeiten auch in einer konsistenteren Umgebung.

Es ist wie der Unterschied zwischen Konsolenspielen und PC-Spielen. Erstere wissen genau, mit welcher Hardware sie arbeiten müssen, damit sie dieses Wissen nutzen können, während letztere in der Lage sein müssen, mit einer größeren Auswahl an Grafikkarten, Soundkarten, Festplattengeschwindigkeiten usw. umzugehen.

Es wird jedoch Anwendungen (wie Spiele!) Geben, die den Zugriff auf niedriger Ebene erfordern und weiterhin "nativ" ausgeführt werden müssen.

Wie bei verwalteten Sprachen müssen Sie das entsprechende Tool für den Job verwenden.


3
Ich stimme wirklich nicht zu. Es gibt keinen Grund, ein Spiel nativ laufen zu lassen, und es gibt keine wirkliche Notwendigkeit, nativ zu sein, wenn das Betriebssystem Ihnen den gesamten verwalteten Einstiegspunkt bietet, den Sie benötigen. Natürlich gibt es einige Leistungseinbußen (die bei der Verwaltung des gesamten Systems eigentlich vernachlässigbar sind), aber heute verfügen wir über ausreichend Rechenleistung und benötigen sehr zuverlässige Software.
Wizard79

@Lorenzo Games belasten Computer bereits genug, daher ist der Leistungsverlust wichtig. Ich bin mir jedoch nicht sicher, wie stark sich die Leistung auswirken würde, wenn die VM nur native Aufrufe
abwickeln würde

4
@TheLQ: Der Punkt ist, dass sich Spiele bereits nicht mit "low level stuff" auseinandersetzen müssen, da es immer Middleware gibt (DirectX, Open GL und so weiter). Natürlich sind sie rechenintensiv, aber die Verwendung einer Middleware ist bereits ein Leistungseinbruch. Es wäre nur eine verwaltete (und ausgelagerte) Middleware.
Wizard79

3
Wenn sich das Betriebssystem um das JITting kümmert, erhalten Sie verwalteten Code, der mehr oder weniger so schnell wie "systemeigener" Code ausgeführt wird. Denken Sie daran, wenn Sie das Programm wie eine Assembly steuern müssen , können Sie das Programm immer direkt im Bytecode verwenden.
Chinmay Kanchi

3
Afaik, MS Singularity wird eine deutliche Leistungsschub aus der Tatsache , dass es nicht zwischen Kernelmodus und Benutzermodus überhaupt Schalter benötigt. Auch das Gabeln wird deutlich günstiger.
9.

3

Im Allgemeinen denke ich, dass sie eine gute Idee sind, aber da nicht viele von ihnen in der Nähe sind oder fast fertig sind, ist es sehr schwer zu sagen, wie sie in der realen Welt abschneiden würden. Ich wünschte, MS hätte das Singularity-Projekt aktualisiert, damit wir sehen könnten, wohin das führen würde, aber ich vermute, dass ein Teil davon in einer Windows-Version verarbeitet wird


3

Ich denke, dass die Vorteile eines vollständig verwalteten Betriebssystems enorm sind und dass dies wirklich die Zukunft sein könnte, aber es wird noch viele Jahre dauern.

Ein gut verwaltetes Betriebssystem bietet Ihnen alle verwalteten Einstiegspunkte, die Sie benötigen, um alle erforderlichen Aufgaben auf niedriger Ebene auszuführen, unabhängig davon, ob sie verwaltet werden: Abfangen von Interrupts und Ausführen von E / A-Vorgängen mit Geräten. C # erlaubt auch unsicheren Code (Umgang mit Zeigern), wird aber nur in den "Gerätetreibern" (die nur eine andere Art von Software-isoliertem Prozess sind) erlaubt.

Die Vorteile in Bezug auf Sicherheit, Einheitlichkeit, Portabilität und insbesondere Zuverlässigkeit werden jeden Leistungsnachteil sicherlich übertreffen. Dann ist ein vollständig verwaltetes System überraschend schnell, da kein Kontextwechsel mehr erforderlich ist.


Sind Sie sicher, dass der Kontextwechsel nicht benötigt wird? Sie müssen immer noch mehrere Programme gleichzeitig ausführen.
Job

Wenn sowohl Programme als auch Code in der VM ausgeführt werden, ist möglicherweise kein Kontextwechsel möglich. Allerdings würde es erforderlich sein, MMU in HL-Sprache erneut zu implementieren, sodass ich wirklich bezweifle, dass es einen großen Leistungsvorteil geben würde.
Maciej Piechotka

2

Managed OSes ähneln wahrscheinlich einem Mikrokernel - Sie opfern die Leistung im Namen der Sicherheit.

Ähnliche Probleme können auftreten, da der Code in zwei Teile aufgeteilt werden muss:

  • Low-Level-Kernel in C / Assembler geschrieben
  • Übergeordneter Kernel in verwalteter Sprache

Abhängig von den Kosten für die sichere Eingabe / Ausgabe der HL-Sprache kann dies zu ähnlichen Problemen wie bei Mikrokernen führen - möglicherweise etwas schneller (HL zu verlassen ist schneller als die vollständige Kontextumschaltung, aber IIRC zum Beispiel JNI ist recht kostspielig).

Benutzeranwendungen benötigen wahrscheinlich auch separate Kontexte, da viele Apps auf anderen Plattformen (z. B. C, Java oder .Net) geschrieben sind. In den gleichen Fällen sind Anwendungen möglicherweise CPU-gebunden (Compiler, Musikkonverter usw.) und erfordern sogar eine Assembler-Optimierung, um eine ausreichende Geschwindigkeit zu erzielen. Außerdem ist der MMU-Schutz, der in HL-Sprache implementiert ist, wahrscheinlich nicht so schnell wie der Hardware-Schutz, selbst wenn er viel genauer abgestimmt ist.

Auch die HL-Sprache beherrscht die Operationen auf niedriger Ebene nicht. Während Software normalerweise mit "guter" Codierungspraxis entworfen wird, sind Treiber nicht erforderlich. Ich denke nicht, dass sie vor zumindest einigen Fehlern schützen, da Kernel manchmal manuelles Verwalten des Speichers erfordern.

Schließlich glaube ich nicht, dass ein solches Betriebssystem eine vollständige VM erfordern würde. Da das Betriebssystem nicht mit dem Prinzip kompiliert werden kann, würden sich einmal ausgeführte HL-Sprachen (auch mit GC & Co.) als bessere Kandidaten erweisen.

Zum Beispiel machen Sie plötzlich beliebige Zeiger überflüssig.

Betriebssystem ist von Natur aus Low-Level. Sie übergeben an die Hardware nicht nur einen "beliebigen Zeiger", sondern wahrscheinlich eine physikalische Adresse, anstatt eine virtuelle. Einige DMAs können nur die ersten 16 MB Speicher verarbeiten. Solch ein Betriebssystem kann viel vereinfachen, es wird jedoch keine Adressen entfernen.

Und wenn es gut geschrieben ist, werden Sie eine Tonne Legacy-Crud los, die die meisten modernen Betriebssysteme derzeit haben.

  1. Es gibt viele ältere Hardware. Viel mehr als in der Software. Sie starten zuerst im Real-Modus und aktivieren dann das A20-Tor (fragen Sie nicht). Wechseln Sie in den geschützten Modus und dann in den Long-Modus.
  2. API / ABI-Kompatibilität ist gut. Angenommen, sie haben ein solches Betriebssystem geschrieben - worauf würden Sie es ausführen? Firefox - Nope (C und C ++ mit WinAPI). Java - wahrscheinlich musste es portiert werden oder es gab einige kleinere Probleme über ikvm - es sei denn, es wurde JNI verwendet. Ich vermute, MSSQL (und sicher Oracle, MySQL, Postgresql ...) ist nicht in verwalteter Sprache geschrieben, so dass es nicht für Server geeignet wäre.
  3. Auch die Fehlerkompatibilität ist "gut". AFAIK MS verbringt viel Zeit damit, zu testen und zu überprüfen, ob eine Software die API nicht auf intelligente (falsche) Weise verwendet. Wie das Problem, Zeiger danach zu verwenden free, als Windows tatsächlich damit begann, Speicher freizugeben.

Ich denke, es wird ungefähr zur gleichen Zeit wie Mikrokerne an Popularität gewinnen.


2

Persönlich denke ich, dass die Idee eines verwalteten Betriebssystems ein bisschen wie der Kommunismus ist: gut in der Theorie, aber unpraktisch in der Implementierung.

Das Problem ist, dass ich einfach keine Möglichkeit sehe, das verwaltete Betriebssystem umzusetzen, ohne das Betriebssystem komplett neu zu schreiben (und ich hoffe, jemand kann mich in diesem Punkt als falsch erweisen). Wie können Sie jahrzehntelangen nicht verwalteten Code in ein verwaltetes Betriebssystem integrieren?

Die Kernel der beliebtesten Betriebssysteme sind kampferprobt und über ein paar Jahrzehnte gereift. Sie schreiben sie nicht einfach aus einer Laune heraus um. Ganz zu schweigen davon, dass die Geschichte voller Beispiele für Prozessordesigns und Kernel-Architekturen ist, die zweifellos besser waren, aber niemanden davon überzeugen konnten, dass sie die Kosten für eine Änderung wert waren.

Wie wird ein Unternehmen wie Microsoft oder Apple ein verwaltetes Betriebssystem an Kunden verkaufen? Ist es dem durchschnittlichen Computerbenutzer auch egal, ob sein Betriebssystem verwaltet oder nicht verwaltet wird?

Ich hoffe, dass ich mich irre und dass verwaltete Betriebssysteme Realität werden. Ich bin aber skeptisch. Wenn wir es jemals sehen, wird es wahrscheinlich noch ein oder zwei Jahrzehnte dauern.


2
Der Betriebssystemkern ist für die Akzeptanz nicht sehr wichtig. MS hat einen völlig neuen NT-Kernel entwickelt, der mit nichts kompatibel ist, und es war ein Erfolg. Apple hat seine Kernel-Architektur drastisch geändert (und seine CPU-Architektur dreimal) und gedeiht immer noch. Der Schlüssel ist die Kompatibilität mit vorhandener Software und die einfache Portierung. Kompatibilitäts- und / oder Virtualisierungsebenen, die einen reibungslosen Übergang von altem Code zu neuem Code ermöglichen, sehen in einem verwalteten Betriebssystem nicht unangemessen schwierig aus.
9000,

2

Verwalteter Code ist nur eine Extrapolation dessen, was der Schutz des virtuellen Speichers heute für Sie bedeutet, nämlich die Fähigkeit des Computers, den Zugriff auf Ressourcen zu verweigern.

IBM tut dies bereits auf ihren Mainframe-Systemen (sie nennen es einfach etwas anderes), daher ist es meiner Meinung nach nur eine Frage der Zeit, bis dies auf Systemen geschieht, die der Öffentlichkeit zur Verfügung stehen.

Würde es Sie interessieren, ob ein Google-Laptop (auf dem Chrome und im Grunde nichts anderes ausgeführt wird) mit verwaltetem Code ausgeführt wird oder nicht?


1

Ein Nachteil ist jedoch, dass Sie sich viel weiter von der Hardware entfernen und als Entwickler die Fähigkeit verlieren, sich auf eine niedrigere Abstraktionsebene zu begeben und sich die Hände schmutzig zu machen.

Das ist eigentlich nicht wahr. In JNode gibt es beispielsweise eine UnsafeKlasse (und andere), mit der Sie auf Speicherorte usw. zugreifen können. Es gibt auch einige "magische" Klassen / Methoden, die vom JIT-Compiler in privilegierte Anweisungen übersetzt werden. Der Zugriff auf diese Klassen / Methoden wird (oder wird) vom Sicherheitsmanager, vom JIT-Compiler usw. eingeschränkt. Wenn Sie jedoch Code schreiben, der auf Betriebssystemebene ausgeführt wird, stehen Ihnen diese Funktionen zur Verfügung.

Der Vorbehalt ist (natürlich), dass die falsche Verwendung von Unsafeund verwandten Klassen sofort zu Abstürzen des Betriebssystems oder auf der Strecke führen kann.


0

Ich bezweifle ihre Nützlichkeit für Desktop-Computer. Aber die Zeit könnte mich in diesem Punkt als falsch erweisen.

Ein interessantes Potenzial ist in meinen Augen jedoch ein Serverbetriebssystem, genauer gesagt ein Gastbetriebssystem in einer virtualisierten Umgebung. Es war für mich nie richtig, eine vollständige Windows Server-Installation in einer virtuellen Server-Umgebung zu installieren, da ich wusste, wie viele unnötige Dienste ausgeführt werden, einschließlich der vollständigen GUI.

Das Installieren von Singularity auf einem virtuellen Server zum Hosten von ASP.NET-Anwendungen ist jetzt sinnvoller. Vorausgesetzt, sie können ein leichtes Betriebssystem beibehalten.


1
Es ist schön, Windows ganz fallen zu lassen, wenn Sie können.
Job

1
Die Tendenz zu Sandbox-Browsern und anderen mit dem Internet verbundenen Dingen zeigt wahrscheinlich, dass auch ein verwaltetes oder zumindest unterteiltes Betriebssystem oder ein Desktop wünschenswert ist.
9000,
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.