Autor Thema: Process Emulation  (Gelesen 8182 mal)

osDeveloper93

  • Beiträge: 31
    • Profil anzeigen
    • Homepage
Gespeichert
« am: 22. August 2009, 12:35 »
Hallo,

ich will in meinem Betriebssystem einen Process Emulator einbauen.

Was ich mir darunter vorstelle ist, dass die Processe/Programme nicht mehr direkt als Maschinencode in den Arbeitsspeicher "gemappt" werden,
sondern das ein Interpreter (oder so was ähnliches) "dazwischen geschaltet" wird.
Dadurch kann der User keine befehle wie lgdt benutzen, sondern nur die befehle die ich erlaube (mov, add, ...).

Ich weiß dass es schwierig ist,
jedoch frage ich mich ob sowas sinnvoll ist?

Arbeitsspeicherschutz gibt es ja halbwegs schon (zB. Paging).
Jedoch keinen Schutz vor unerlaubten Befehlen (soweit es mir bekannt ist).

Also die Fragen:
  • Ist sowas sinnvoll?
  • Wird mein Betriebssystem dadurch langsamer (Das es ein bisschen langsamer wird weiß ich selbst, jedoch kann es zB. eine kurze zeit einfrieren)?
  • Kann man meine Idee noch verbessern?

Ich hoffe ihr habt verstanden was ich meine. :wink:

Mit freundlichen Grüßen
osDeveloper93
Pear3DEngine - a modular opensource game engine:
http://sourceforge.net/projects/pear3dengine/

"Ein glücklicher Mensch ist zu zufrieden mit der Gegenwart, um sich viele Gedanken über die Zukunft zu machen." - Albert Einstein (September 1896)

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 22. August 2009, 13:09 »
Ganz so dilettantisch ist Intel dann doch nicht rangegangen. ;)

lgdt und ähnliches ist nur in Ring 0 erlaubt, in Ring 3 gibt es einen GPF.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

osDeveloper93

  • Beiträge: 31
    • Profil anzeigen
    • Homepage
Gespeichert
« Antwort #2 am: 22. August 2009, 15:03 »
Das ist gut.

Dann brauch ich dieses Ding nicht mehr.

Wo kann man es herausfinden, was erlaubt ist und was nicht (Ring 3)?
Pear3DEngine - a modular opensource game engine:
http://sourceforge.net/projects/pear3dengine/

"Ein glücklicher Mensch ist zu zufrieden mit der Gegenwart, um sich viele Gedanken über die Zukunft zu machen." - Albert Einstein (September 1896)

MNemo

  • Beiträge: 547
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 22. August 2009, 15:33 »
AMD64 Architecture Programmer's Manual Volume 3: General-Purpose and System Instructions
  • Kapitel 3 listet die Allzweck Instuktionen auf, die überall erlaubt sind
  • Kapitel 4 listet die System-Instructions auf die nur in RING 0 ausgeführt werden dürfen.
„Wichtig ist nicht, besser zu sein als alle anderen. Wichtig ist, besser zu sein als du gestern warst!“

DaCodaaa

  • Gast
Gespeichert
« Antwort #4 am: 22. August 2009, 16:32 »
Ein Prozess Emulator hat aber trotzdem noch einen Vorteil:

man kann Programme von anderen Systemem mit ein bisschen trixerei auch auf seinem eigenen Betriebssystem einfacher zum laufen bringen, oder sehe ich das falsch?

Gruss DaCodaaa

Cjreek

  • Beiträge: 104
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 22. August 2009, 16:52 »
Ein Prozess Emulator hat aber trotzdem noch einen Vorteil:

man kann Programme von anderen Systemem mit ein bisschen trixerei auch auf seinem eigenen Betriebssystem einfacher zum laufen bringen, oder sehe ich das falsch?

Gruss DaCodaaa

Ich glaube du siehst das falsch. Hauptproblem ist ja dass jedes OS seine eigene API hat. Und daran ändert so ein Emulator auch nichts.
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."

osDeveloper93

  • Beiträge: 31
    • Profil anzeigen
    • Homepage
Gespeichert
« Antwort #6 am: 22. August 2009, 17:12 »
Stimmt,

jedoch wenn das Betriebssystem mehrere Architekturen unterstützt, kann sowas von Vorteil sein.
Auch wenn man sowas auch anders machen kann.
Pear3DEngine - a modular opensource game engine:
http://sourceforge.net/projects/pear3dengine/

"Ein glücklicher Mensch ist zu zufrieden mit der Gegenwart, um sich viele Gedanken über die Zukunft zu machen." - Albert Einstein (September 1896)

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 22. August 2009, 17:19 »
Naja, wenn ich Programme einer anderen Plattform laufen lassen will, dann portiere ich "einfach" qemu. Da arbeiten nämlich schon ein paar Leute ein paar Jahre lang dran, das mit halbwegs akzeptabler Geschwindigkeit hinzubekommen. ;)
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

osDeveloper93

  • Beiträge: 31
    • Profil anzeigen
    • Homepage
Gespeichert
« Antwort #8 am: 22. August 2009, 17:41 »
Stimmt,

aber QEMU ist ein externes Programm.
Und ich finde dass es schon ein unterschied ist wenn das Betriebssystem sowas anbietet, als das du dir es manuel besorgen musst.
Außerdem emuliert QEMU doch ein ganzes PC ohne Betriebssystem.
Pear3DEngine - a modular opensource game engine:
http://sourceforge.net/projects/pear3dengine/

"Ein glücklicher Mensch ist zu zufrieden mit der Gegenwart, um sich viele Gedanken über die Zukunft zu machen." - Albert Einstein (September 1896)

stultus

  • Beiträge: 486
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 22. August 2009, 19:36 »
Wenn du Programme für andere OS laufen lassen willst, schau dir an wie WINE (http://winehq.org/) das macht.

Wenn du auch Architekturgrenzen überwenden oder Befehle sperren willst, wäre ne Art JIT-Compiler eher der passende Weg - ist aber noch deutlich mehr Entwicklungsaufwand, und erfordert natürlich auch Bibliotheken um irgendwas zu machen ;)

In beiden Fällen wäre eine Integration innen Kernel aber eher doof - bringt dir keinerlei Vorteile (jedenfalls keine die ich mir denken kann), nur mehr Risiken was Abstürze und Sicherheit anbelangt. Und auch wenns ne Anwendung ist, kanns ja ein Teil des Betriebssystems sein ;)
MSN: planetconquestdm@hotmail.de
ICQ: 190-084-185

... Wayne?

osDeveloper93

  • Beiträge: 31
    • Profil anzeigen
    • Homepage
Gespeichert
« Antwort #10 am: 22. August 2009, 21:02 »
Ins Kern soll es ja garnicht.
Es soll ein Modul sein.
Pear3DEngine - a modular opensource game engine:
http://sourceforge.net/projects/pear3dengine/

"Ein glücklicher Mensch ist zu zufrieden mit der Gegenwart, um sich viele Gedanken über die Zukunft zu machen." - Albert Einstein (September 1896)

 

Einloggen