Autor Thema: Bootbarer Mikrokernel mit Hypervisor für Semantischen Code  (Gelesen 20446 mal)

Dimension

  • Beiträge: 155
    • Profil anzeigen
Gespeichert
Hallo Lowlevel - Entwickler

Ist mein erster Beitrag hier im Forum, ich hoffe dass ihr mit meinem Anliegen etwas anfangen koennt. Ich suche speziell Kernel-Entwickler, die mein Projekt fuer interessant halten und auch etwas Zeit haben. Ich habe bereits ~30K code in Java, haenge jedoch gerade beim Export von Code mit bootbarem Hypervisor (speicher layout fuer paging etc.). Spaeter will ich die Plattform komplett importieren und eine bootbare Version exportieren. Subsysteme fuer Java etc. und Treiber kommen spaeter. Ich ueberarbeite Code haufig, habe meistens Ueberblick und bin etwas perfektionistisch.

Ich arbeite seit ein paar Monaten an einer neuen Mikroarchitektur. Die neue Architektur implementiere ich vorläufig als Emulator in Java. Ich schreibe gerade ein Export-Modul, welches einen bootbaren Mikrokernel erzeugt. Die Prozess-Strukturen werden in Pages organisiert. (genauer: Jede Variable bekommt einen eigenen Stack, mit dem rekursive Aufrufe von Code-Zweigen und Wiederherstellung von gespeicherten Zuständen möglich werden.) Die Speicherverwaltung und andere Dinge will ich in Hardware gießen.

Eigentliche Motivation für den Aufwand ist ein semantischer Editor, der gegenwärtige Probleme der Software-Entwicklung elegant zu lösen versucht. So wird der Code in einem Baum direkt bei der Eingabe geparst und Symbole doppelt verlinkt. Dies vereinfacht statische Analyse und ermöglicht beispielsweise die massiv parallele Ausführung. Weitere Anforderungen, wie die sichere Ausführung, werden durch "Sandboxes" implementiert. (genauer: in die Hardware verlagert). Grundsatz der Architektur soll eine strikte Trennung von Aufgabenbereichen sein.

Java-Code kann importiert werden. Bei Interesse habe ich noch ein beschreibendes Skript von November 2010 (leider auf Englisch)
« Letzte Änderung: 11. December 2011, 01:46 von Dimension »

erik.vikinger

  • Beiträge: 1 277
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 08. December 2011, 14:47 »
Äh, ja nee, is klar!

Also das ist meiner persönlichen Meinung nach mal ein echt tolles Beispiel dafür das SPAM nicht immer als solcher zu erkennen ist (womit IMHO das Thema mit der Adminfreischaltung des ersten Beitrages neuer User vom Tisch ist), ich will ja niemanden auf den Schlips treten aber dieser Text ergibt für mich absolut keinen Sinn. Mal abgesehen davon das jemand der an der Abendschule versucht sein ABI zu machen und damit in die Nanotechnologie will vielleicht etwas arg ambitioniert ist so sind in dem Text doch etliche verschiedene Themen ziemlich durcheinander. Also wie man von einem Micro-Kernel (soll es sich dabei wirklich um ein OS in Sinne dieses Forums handeln?) zu Landwirten und Lebensmittelanbau kommt ist mir schleierhaft.


Grüße
Erik
Reality is that which, when you stop believing in it, doesn't go away.

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 08. December 2011, 15:03 »
Mensch, Erik, ein kleines bisschen Zurückhaltung wär auch für dich manchmal angebracht. ;)

Ich glaube, das Nanozeug können wir mal ignorieren, das ist nicht unsere Baustelle. Aber mit einer Architektur und einem OS drauf solltest doch gerade du was anfangen können. Zugegeben, das klingt alles ein bisschen verrückt (noch verrückter als dein Projekt), aber das war hier ja noch nie ein Hindernis. Wenn es in diesem Bereich irgendwelche konkreten Fragen oder Ansätze gibt, denke ich schon, dass wir das diskutieren können.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

erik.vikinger

  • Beiträge: 1 277
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 08. December 2011, 15:24 »
Hallo,


ja, taljeth, ich gebe Dir grundsätzlich recht. Aber von Architektur usw. sehe ich nicht sehr viel, aus meiner persönlichen Sicht herrscht in dem Beitrag etwas zu viel Chaos als das man da etwas konkretes raus lesen könnte. Also dann übe ich mich jetzt mal in Zurückhaltung und warte ab ob der OP dieses Wirrwarr deutlich lichten kann.


Grüße
Erik
Reality is that which, when you stop believing in it, doesn't go away.

chris12

  • Beiträge: 134
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 08. December 2011, 17:25 »
Was mich etwas stutzig macht, ist dass er anfangs die umlaute ausschreibt, dann aber zu ö,ä, ü wechselt (copy'n'past lässt hier, wahrscheinlich grüßen) zudem ist der angefügte breif sehr, sagen wir mal auffällig. zudem möchte ich mal behaupten, dass wenn ich was verstanden hab, davon wahrscheinlich nur die hälfte richtig verstanden hab. ich möchte niemandem was unterstellen, ich bin nur etwas verwirrt.

@themenstarter:
es wäre nett, wenn du das noch einmal etwas entwirrter schreiben könntest, denn wenn ich das recht verstanden habe, ist dein vorhaben eine komplette microarchitektur zu entwickeln, auf der man java nativ laufen lassen kann, was nur teilweise unser bereich ist. zudem, werter Aaron, wäre es für uns vielleicht recht interessant zu erfahren, wo denn dein problem liegt? denn darauf beruht ja ein austauschen.
ansonsten finde ich das projekt recht interessant und würde gern auf dem laufenden bleiben.

ach btw, das mit den landwirten ist mir auch sehr schleierhaft. Ach und nochwas, einen lebenslauf brauchst du hier nicht anbringen ^^

mfg
chris
OS? Pah! Zuerst die CPU, dann die Plattform und _dann_ das OS!

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 08. December 2011, 18:32 »
Das Projekt klingt irgendwie interessant. Ob es das auch ist, zeigt erst eine halbwegs ins Detail gehende Beschreibung, wie das alles zusammenhängen soll; da blicke ich nicht durch.

Die Art der Präsentation hier ist ... seltsam. Das klingt mir zu sehr nach "überall mal gepostet, schaunmermal, wer antwortet".
Wer nicht so recht weiß, an wen er sich wenden kann, sollte zumindest keinen Standardtext in die Welt schicken.

Gruß,
Svenska

Dimension

  • Beiträge: 155
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 08. December 2011, 22:48 »
Also erstmal vielen Dank für die vielen Antworten. Die formalen Aspekte bitte ich zu entschuldigen.

Ich benutze mein Android Phone zum posten, da ist die Tastatur nicht so komfortabel. Den ursprünglichen Text hatte ich in der Tat per mail verschickt, deshalb die Anrede. Das haettich noch entfernen sollen, das haette die Sache vermutlich weniger auffaellig gemacht. Mein problem ist vermutlich, dass ich mich schwer tue die wichtigen Aspekte kompakt zu formulieren, da mein Projekt sehr Umfangreich werden wird. Die Struktur ist allerdings dafuer ausgelegt, ich behaupte mal selbstsicher, dass ich weiss was ich tue...  :-D

Der Part mit den Nano-Strukturen gehört hier natürlich nicht rein.

Edit: ich lade am besten noch dokumente mit weiteren details hoch (auf englisch), wenn sich jemand die muehe macht diese zu lesen, waere das nett.
« Letzte Änderung: 08. December 2011, 22:55 von Dimension »

DerHartmut

  • Beiträge: 236
    • Profil anzeigen
    • Mein Blog
Gespeichert
« Antwort #7 am: 09. December 2011, 09:42 »
Ich finde die sehr harsche Vorgehensweise von erik nicht ganz toll...nur weil hier jemand sich mal etwas besser artikulieren kann und verrückte Ideen hat (wo ja genau HIER wohl der _beste_ Platz für ist :)) direkt auf Spam zu schließen - vor allem weil ich solche Art von Spam noch nie gesehen habe ^^

Ich finde das Projekt sehr interessant und auch sehr amibtioniert, aber nichts ist unmöglich. Viel Glück dafür!
$_="krJhruaesrltre c a cnp,ohet";$_.=$1,print$2while s/(..)(.)//;
Nutze die Macht, nutze Perl ;-)

Dimension

  • Beiträge: 155
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 09. December 2011, 15:55 »
Architektur Überblick: neuer link siehe unten
Brainstorm zu semantic code: neuer link siehe unten

Weiss jemand, wo ich Code hochladen kann?
« Letzte Änderung: 12. December 2011, 12:03 von Dimension »

chris12

  • Beiträge: 134
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 09. December 2011, 16:32 »
codesnippets können z.b mit pastebin.net oä hochgeladen werden, dein ganzes projekt kannst du dann z.b. auf sourceforge.net oä hochstellen.

also ich habe mir mal deine ideenblätter durchgelesen und wenn ich das recht verstanden habe, dann sehe ich ein _großes_ sicherheitsproblem:
du behandelst code als daten und programmen können daten austauschen und ein programm kann auf die variablen und den code eines anderen programmes zugreifen. das macht deine plattform natürlich sehr anfällig für viren, die sich in andere programme einschleusen, dass ist ja dann sogar bei laufendem programm möglich. zudem wird es auf deiner plattform sehr leicht sein, für spiele hacks und trainer zu schreiben ;)

wenn ich was falsch verstanden hab, dann bitte ich das zu entschuldigen.

mfg
chris
OS? Pah! Zuerst die CPU, dann die Plattform und _dann_ das OS!

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 09. December 2011, 17:12 »
Weiss jemand, wo ich Code hochladen kann?
Wenn es Open Source ist, würde ich github vorschlagen.

Die Dokumente werde ich bei Gelegenheit mal anschauen (obwohl es mir widerstrebt, mich bei Google einzuloggen).
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

erik.vikinger

  • Beiträge: 1 277
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 09. December 2011, 20:42 »
Hallo,


Ich finde die sehr harsche Vorgehensweise von erik nicht ganz toll
Ja, auch mir passiert es hin und wieder das ich zwischen Lesen und Antworten vergesse in Ruhe darüber nachzudenken. Im Ursprungspost sind ein Haufen Dinge drin die mich persönlich zu aller erst an SPAM denken lassen (unterschiedliche Schreibweise, Bitte um Weiterleiten, kaum zwei Sätze handeln vom selben Thema, viel zu viele total unterschiedliche Informationsschnipselchen die irgendwie nicht zusammenpassen wollen, Personenbeschreibung usw.), mein erster Gedanke war das da ein Bot einfach hier im Forum nach Keywords gescannt und dann "passende" Sätze von irgendwo anders her zusammenkopiert hat. Wenn ich nicht zwischenzeitlich wüste das dieser Text von einem lebenden Menschen stammt wäre aus meiner persönlichen Sicht immer noch SPAM die Kategorie wo der Text mit höchster Wahrscheinlichkeit rein gehört. Es tut mir Leid das ich nicht meine Finger still halten konnte aber inhaltlich sehe ich nichts wirklich falsches an dem was ich gestern als erstes geschrieben hab (auch wenn die Formulierung wohl eher suboptimal ist), mir ist natürlich klar das es da auch andere Meinungen zu gibt.


@Dimension:
Sorry, das ich Deinen Beitrag zu erst für SPAM gehalten hab und das dann auch noch so ganz unverblümt hier geschrieben hab.

Nachdem ich nun eines Besseren belehrt wurde würde ich auch gerne mehr über Deine Ideen erfahren aber ich habe leider keinen Google-Account. Das kann man doch bestimmt irgendwie frei schalten das jeder zumindest lesen kann oder?


Grüße
Erik
Reality is that which, when you stop believing in it, doesn't go away.

Dimension

  • Beiträge: 155
    • Profil anzeigen
Gespeichert
« Antwort #12 am: 09. December 2011, 22:29 »
@chris12: in der Tat kann auf jede Information, die NICHT im Hypervisor Management bereich liegt sowohl lesend als auch schreibend zugegriffen werden. Das betrifft sowohl Threads, Prozesse als auch Computer im Netzwerk. Notwendige Bedingung für den Zugriff ist allerdings ein entsprechender Eintrag in der White-List des Prozesses. Der Hypervisor überprüft und verwaltet Berechtigungen auf Prozess-Basis.

@erik: meines wissens geht der link unabhängig davon, ob du eingeloggt bist oder nicht. Allerdings habe ich massive Probleme mit google docs, so dass ich nach einer Alternative ausschau halten werde.

Mir ist vorhin im Auto auf dem Weg zur Schule noch eingefallen, dass ich in dem Text noch was vergessen habe: Persistenz soll allein durch Swapping von Pages realisiert werden. Sowas wie FAT kommt erst später.

Ich kann leider erst morgen abend was hochladen, da mein System aus ist und ich wenig Zeit habe, da wir dieses Wochenende sehr viele Arbeiten schreiben. Gruss Aaron

erik.vikinger

  • Beiträge: 1 277
    • Profil anzeigen
Gespeichert
« Antwort #13 am: 10. December 2011, 12:18 »
Hallo,


meines wissens geht der link unabhängig davon, ob du eingeloggt bist oder nicht.
Nein, leider nicht. Ich habe auch schon probiert das "/edit" am Ende weg zu lassen oder gegen "/view" auszutauschen aber ich werde grundsätzlich gebeten mich einzuloggen und da ich kein Google-Konto habe (und mir auch keines zulegen möchte) bleibe ich leider draußen.

Allerdings habe ich massive Probleme mit google docs, so dass ich nach einer Alternative ausschau halten werde.
Nimm doch einfach irgendein Offline-Programm und lade das ganze dann als PDF ins iNetz. Ich persönlich nutze für fast meine gesamte Dokumentation direkt HTML, das ist einfach, flexibel, mächtig und kann überall angeschaut werden, nur für meine OpCode-Tabellen nutze ich OpenOffice-Calc (und exportiere als PDF wenn ich möchte das andere drüber schauen).


Grüße
Erik
Reality is that which, when you stop believing in it, doesn't go away.

Dimension

  • Beiträge: 155
    • Profil anzeigen
Gespeichert
« Antwort #14 am: 11. December 2011, 01:45 »
text:
Architektur Überblick: http://pastebin.com/euyT0Ddh
Brainstorm zu Semantic Code: http://pastebin.com/dZ72sg8n

relevant:
Operation.java http://pastebin.com/wMi2f0M4
Hypervisor.java http://pastebin.com/SzHXnjS6
Import.java http://pastebin.com/U0ynp8N1
Export.java http://pastebin.com/svHNmynB [update1]
ExportOpcode.java http://pastebin.com/snjPxG69 [update1]
ExportStructure.java http://pastebin.com/gXMVMhB7 [update1]
CodeOut.java http://pastebin.com/7gVa6aRp

weiter:
BuiltinType.java http://pastebin.com/JqMAjR2U
Structure.java http://pastebin.com/VdrYUdGd

listings:
operator http://pastebin.com/x0Mf4Hsq [update1]
special http://pastebin.com/BA2fT4R7 [update1]
misc http://pastebin.com/dte8xeKE [update1]

Generell  enthalten die Codes keine Dokumentation, jedoch viele Notizen. Konfuses einfach ignorieren.
Btw: Tabs sind auf 4 Zeichen ausgerichtet, pastebin nimmt jedoch 8. Sehe keine Möglichkeit das auf pastebin.com zu konfigurieren. Im Zweifelsfall den Original-Text unten in einen Editor kopieren.
CodeOut: habe die DisplayScripts für den Editor entfernt.
Export: enthält außer Notizen und einem groben Layout noch keine Implementierung. Die Ziele sind:
  • Image erzeugen, das einen Hypervisor mit Komponenten (Scheduler, Speicherverwaltung, Hash Maps, Interrupt-handler) bootet
  • Bootstrap-Code aus C/ASM zu Bytecode übersetzen und diesen in Layout aufnehmen (Edit: nehme GRUB)
  • Hypervisor soll Operationen nicht emulieren, sondern Prozeduren anspringen (Folgen von Befehlen mit JMP zurück zum Hypervisor)
  • Wir brauchen quasi eine Art Opcode-Assembler. Neben ein paar administrativen Instruktionen nur (bedingte) Sprünge, Integer, etwas Floating Point. SIMD lassen wir vorerst weg.
  • Mikrokernel-Code greift auf feste Speicheradressen zu und unterliegt bestimmten Einschränkungen (zB. nicht-reentrant, flacher callstack)
  • Erster Prozess bekommt dann alle wichtigen Aufgaben eines kernels
  • Timing interrupts werden im Scheduler nur verwendet um Timeouts zu entdecken

Grundsatz soll sein "so einfach wie möglich". Ausgrund der Ausrichtung der Architektur müsste nur der Bootstrap-Code in C/ASM geschrieben werden. Der rest vom Hypervisor geht dann in Java, welches wir importieren. Der Export nach x86 wird unterschieden nach hypervised und fixed.
« Letzte Änderung: 27. December 2011, 16:04 von Dimension »

Dimension

  • Beiträge: 155
    • Profil anzeigen
Gespeichert
« Antwort #15 am: 12. December 2011, 14:47 »
Ich habe mich gestern abend mal hingesetzt um den Opcode-Assembler zu schreiben.
Dazu habe ich meiner Assembler-Referenz einfach die Opcodes entnommen. Operationen laufen nur über ax, cx (bzw. dx für DIV/IDIV). RAM lese/schreibe ich über (bx).

Btw: Ich schreibe ax, bc, cx meine aber ausschliesslich 32 bit.

Für binäre Logik brauche ich verhältnismässig viele Bytes, da ich mit CMP(0)/SETx arbeite. Ich überlege doch lieber CMOVx zu verwenden. Wie sieht es mit der Verfügbarkeit aus? Ich möchte nur eine einzige Version schreiben, und CPUID höchstens beim Booten zum Abbrechen verwenden.

Den Code kann ich erst demnächst hoch laden. Vorher lasse ich mir mal alle Bytecodes raus und deassembliere sie, nur um sicherzugehen.

Dazu sind einige Fragen aufgetaucht:
Kann ich komplett auf den Stack verzichten? Auch mit interrupts?
Ich mache meinen eigenen fixed call stack mit return pointern und current index.
Ich brauche keine CALLs. Brauche ich IRET für Interrupts?
Wofür kann ich Tasks noch brauchen, eigentlich habe ich ja den Hypervisor.
Call-Gates gefallen mir nicht. Kann man die auch weg lassen?
Kann ich den Hypervisor in level 0, aber die Prozesse in level 3 laufen lassen? Auch ohne CALLs nur mit JMP?

Denke mal das reicht für den Anfang. Zu bootstrap code, diversen vector/descriptor tabellen, paging, nx und privileges werde ich aber wohl noch die eine oder andere Frage stellen.
Brauche ich LEA im Protected Mode? Gehen mit (ebx) auch physikalishe Adressen?

Dimension

  • Beiträge: 155
    • Profil anzeigen
Gespeichert
« Antwort #16 am: 12. December 2011, 14:49 »
Dämliches Android, blendet mir die letzte Zeile im Textfeld aus.

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #17 am: 12. December 2011, 15:34 »
Moment... Du hast oben was von einer eigenen Architektur geschrieben, warum hangelst du dich jetzt so eng an x86 entlang und fragst nur, was du davon rauswerfen kannst?

Ich glaube, wir müssen hier nochmal einen Schritt zurückgehen: Was sind die Gründe, aus denen du eine eigene Architektur haben willst? Wenn du sowieso nur x86 nachbaust, wäre es nicht vielleicht eine Option, die heutige Hardwarevirtualisierung (SVM/VMX) für deine VM zu nutzen? Was gewinnst du damit, überhaupt eine VM zu haben, im Vergleich dazu, den Code direkt auf der Hardware laufen zu lassen?

Ohne dich demotivieren zu wollen, deine Frage klingen nicht danach, als würde ich dich damit beauftragen, eine Prozessorarchitektur zu entwickeln. Und zwar aus dem einfachen Grund, dass es nicht so aussieht als wärst du mit vielen anderen Architekturen vertraut und könntest aus ihren Vorteilen und Fehlern lernen.

Abgesehen davon stellt sich auch noch die Frage, ob der Befehlssatz für eine reine VM-Architektur nicht anders aussehen sollte als für eine echte CPU in Hardware.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

erik.vikinger

  • Beiträge: 1 277
    • Profil anzeigen
Gespeichert
« Antwort #18 am: 12. December 2011, 15:38 »
Hallo Dimension,


ich hatte mir gestern Abend noch Deine hochgeladenen Texte angesehen und muss ehrlich sagen das ich den Wald vor lauter Bäumen noch immer nicht sehen kann. Du erklärst kaum ein Detail in vollständigen Sätzen sondern meistens nur mit (viel zu) kurzen Stichpunkten. Auch handeln dort kaum zwei Abschnitte vom selben Thema. Mir fehlt da einfach der logische Zusammenhang und so ein gewisser roter Faden um dazu überhaupt etwas konkretes schreiben zu können, sorry.

Ich überlege doch lieber CMOVx zu verwenden. Wie sieht es mit der Verfügbarkeit aus?
Ist ab PentiumPRO, also >=686 verfügbar. Das würde ich persönlich auch als Minimum nehmen da ab dieser Zeit auch APICs verfügbar sind.

Kann ich komplett auf den Stack verzichten? Auch mit interrupts?
Nein.

Brauche ich IRET für Interrupts?
Eigentlich schon, vor allem wenn Du dabei auch den Ring wechseln willst. Theoretisch könnte man IRET bestimmt auch emulieren aber wozu wenn die CPU das auch direkt kann.

Call-Gates gefallen mir nicht. Kann man die auch weg lassen?
Ja, dann musst Du INT oder SYSCALL oder SYSENTER nutzen um vom Ring 3 in Ring 0 zu kommen. Ich persönlich würde eines der letzten 2 empfehlen aber die sind noch nicht so lange verfügbar was wieder die potentiellen CPUs reduziert.

Kann ich den Hypervisor in level 0, aber die Prozesse in level 3 laufen lassen?
Ja, bestimmt, dann ist Dein Hypervisor quasi der OS-Kernel.

Auch ohne CALLs nur mit JMP?
Diese Frage verstehe ich nicht. Wieso sollte man auf CALL verzichten? Das ergibt für mich persönlich nicht wirklich Sinn.

Brauche ich LEA im Protected Mode?
Nein, das kann man auch immer mit anderen Befehlen emulieren aber diese sind oft langsamer da LEA eine spezielle Adressberechnungs-ALU nutzt und auch keine Flags modifiziert (diese bleiben also erhalten und ermöglichen Dir z.B. die Addressberechnung für spätere Speicherzugriffe schon vorzuziehen, sogar zwischen ein CMP/TEST/.. und dem zugehörigen Jcc und das ist deswegen so wichtig weil das Jcc ja vom CMP/TEST/.. abhängig ist und diese 2 Befehle oft mehr als 5 Takte durch die Pipeline benötigen und in der Zeit oft nicht viel passiert und wenn Du da ein LEA rein legst bekommst Du das von der Ausführungszeit quasi geschenkt).

Gehen mit (ebx) auch physikalishe Adressen?
Solange das Paging aktiv ist kannst Du überhaupt nicht direkt auf physische Adressen zugreifen sondern Du musst immer erst ein passendes Mapping erstellen und mit einer äquivalenten virtuellen Adresse arbeiten. Das Paging dauernd an und ab zu schalten ist auf jeden Fall keine gute Idee.


Grüße
Erik
Reality is that which, when you stop believing in it, doesn't go away.

Dimension

  • Beiträge: 155
    • Profil anzeigen
Gespeichert
« Antwort #19 am: 12. December 2011, 17:34 »
@taljeth:
"Fahrplan": Java-Emulator -> x86 Mikrokernel -> HW-Design
Ziel ist eine Architektur in Silizium/FPGA, in welcher ein Teil des Kernels in Hardware implementiert ist. Bis es soweit ist, wird noch einige Zeit vergehen. Um Dinge besser zu verstehen, versuche ich x86 an meine Vorstellungen anzupassen. Ich mache keine VM. Der Emulator in Java is nur der erste Schritt um die Funktionalität zu implementieren. Ich hoffe das Prinzip:
Java-> Import -> Semantic Code -> Export -> Bootbares Image
ist nachvollziehbar.

Ich kenne RISC bisher nur aus Dokumenten/Spezifikationen (IBM Power, Sun SPARC, HP PA-RISC), fühle mich jedoch definitiv von den Eigenschaften überzeugt. Speziell die Many-Core-Varianten (60+) haben es mir angetan.

@erik:
Danke für die Antworten. Bitte entschuldige meine Art Gedanken festzuhalten. Abgesehen davon vermute ich, dass es nicht unbedingt notwendig ist, alle Aspekte des Projekts zu kennen. Für uns sind in erster Linie Details zur Implementierung interessant, die im Dokument "Überblick der Architektur" sowieso nicht angesprochen werden. Wobei ich mich natürlich über jegliches Interesse freue und jede Frage gerne beantworten werde.

@erik 2:
Zitat
Kann ich komplett auf den Stack verzichten? Auch mit interrupts?
Nein.
Ich habe es geahnt. Ich werde einen kleinen Stack anlegen müssen um den Status vor der Unterbrechung wiederherzustellen. Interrupts kommen bei mir generell nur in eine Art Event-Queue, die vom root-Prozess regelmäßig bearbeitet wird. Deshalb leite ich die Einträge der IVT zu einem Interrupt-Handler-Proxy (Bezeichnung adäquat?)

Zitat
Call-Gates gefallen mir nicht. Kann man die auch weg lassen?
Ja, dann musst Du INT oder SYSCALL oder SYSENTER nutzen um vom Ring 3 in Ring 0 zu kommen. Ich persönlich würde eines der letzten 2 empfehlen aber die sind noch nicht so lange verfügbar was wieder die potentiellen CPUs reduziert.
Der Hypervisor führt immer nur kleine Prozeduren aus und springt dann wieder zurück. Diese Prozeduren kommen aus einem Code-Cache mit x86-Bytecode. Dieser wird aus Semantic Code exportiert (hypervised Export). Diese Prozeduren sollen im Ring 3 laufen, der Hypervisor in Ring 0. Die Prozedur in Ring 3 beinhaltet keine Sprünge (zumindest nicht nach außerhalb der Prozedur).

Wann treten Call-Gates sonst noch auf?

Zitat
Auch ohne CALLs nur mit JMP?
Diese Frage verstehe ich nicht. Wieso sollte man auf CALL verzichten? Das ergibt für mich persönlich nicht wirklich Sinn.
Da ich keinen Stack über SP verwende (Und damit auch kein CALL, RET, PUSH, POP und alle anderen Instruktionen für den Stack), springe ich vom Hypervisor in die Prozedur und am Ende dieser an eine feste Adresse zurück in den Hypervisor. Die Frage ist: kann ich während diesen JMPs den Ring ändern? So wie ich das verstanden habe, wird der Ring im Segment festgelegt.

Zitat
Gehen mit (ebx) auch physikalische Adressen?
Solange das Paging aktiv ist kannst Du überhaupt nicht direkt auf physische Adressen zugreifen sondern Du musst immer erst ein passendes Mapping erstellen und mit einer äquivalenten virtuellen Adresse arbeiten.
Andersrum gefragt: kann ich nur mit der Seitennummer aus dem Page Directory und dem Offset direkt auf physikalischen Speicher zugreifen? (Page Tables nutze ich erstmal nicht). Da meine Speicherverwaltung nur Virtuelle Adressen zurückgibt, brauche ich wohl kein LEA?

Es sind noch ein paar Dinge offen, ich schreibe sie hier noch mal hin, damit sie nicht untergehen. Nicht gedrängt fühlen.
Wofür kann ich Tasks noch brauchen, eigentlich habe ich ja den Hypervisor?
falls nicht, dann brauche ich wohl auch kein TSS / TSR
Was haben Tasks mit Multi-Core zu tun? Was bedeutet mehrere Threads per Core?

 

Einloggen