Autor Thema: API-Implementierung  (Gelesen 6782 mal)

Cheebi

  • Beiträge: 91
    • Profil anzeigen
    • Cheebis Webseite
Gespeichert
« am: 29. March 2007, 12:20 »
Hi Leute,

ich hab mich um die API in unserem OS gekümmert, nur stört mich irgendwie die Vorgehensweise. Ich habe einen bestimmten RAM-Bereich, in dem sind einfach nur Zeiger auf Kernel-Funktion abgelegt. Außerdem habe ich eine Bibliothek, die alle Kernel-Funktionen enthält, die wiederum die eigentlichen Kernel-Funktionen über die Informationen aus dem RAM-Bereich aufrufen. (naja, eigentlich egal)
Was ich nun wissen möchte, ist ob ihr das Problem der API ähnlich gelöst habt, oder ob ihr auf Softwareinterrupts zurückgreift, um Funktionen aus dem Kernel aufzurufen. Erklärt also einfach mal die Funktionsweise eurer API, bitte.

Gruß Cheebi
« Letzte Änderung: 29. March 2007, 18:31 von Cheebi »
0100 1001 0100 1100 0100 0001 0010 0000 0011 1010 0010 1101 0010 1010
http://www.cheebi.de

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #1 am: 29. March 2007, 14:05 »
Was ich nun wissen möchte, ist ob ihr das Probem der API ähnlich gelöst habt, oder ob ihr auf Softwareinterrupts zurückgreift, um Funktionen aus dem Kernel aufzurufen. Erklärt also einfach mal die Funktionsweise eurer API, bitte.
Im protected-mode nutze ich den interrupt 0xFF für die Kernel API im long-mode muss "syscall" herhalten, wobei ich ehrlich gesagt die umsetzung von syscall relativ bescheiden finde...
Mein kernel stellt in der Version V0.1 diese Funktionen bereit.

Funktionspointer halt ich für ne _sehr_ schlechte Idee, da es eigentlich den nicht cpl0 anwendungen nicht gestattet werden sollte kernel code auszuführen.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 29. March 2007, 22:31 »
Bei mir gibts ausser dem Schicken einer Nachricht (per INT) keine Kernelfunktionen. Alle Treiber usw. sind Module, welche per Nachricht angeschrieben werden können.

Gruss
Nooooooooooooos

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #3 am: 29. March 2007, 23:31 »
Darf man fragen, inwieweit das bereits implementiert ist Nos? Hört sich nämlich ziemlich idealistisch an :-P
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 30. March 2007, 21:28 »
Also alles bis auf die meisten Treiber ist vollständig abgeschlossen (+ hat in ASM übrigens in 4KB Platz)

Gruss
Noooooooooos

FreakyPenguin

  • Administrator
  • Beiträge: 301
    • Profil anzeigen
    • toni.famkaufmann.info
Gespeichert
« Antwort #5 am: 31. March 2007, 09:29 »
In LOST wird die API auch per Interrupt zur Verfügung gestellt.

Je nach dem, welche Ziele du mit deinem OS hast, wäre vielleicht auch sysenter und sysexit was für dich. Im Protected Mode habe ich micht aber noch nicht genauer mit denen beschäftigt.

Cheebi

  • Beiträge: 91
    • Profil anzeigen
    • Cheebis Webseite
Gespeichert
« Antwort #6 am: 31. March 2007, 18:22 »
hey FreakyPenguin,

Je nach dem, welche Ziele du mit deinem OS hast, wäre vielleicht auch sysenter und sysexit was für dich.

Was meinst du mit sysenter und sysexit???

Cheebi
0100 1001 0100 1100 0100 0001 0010 0000 0011 1010 0010 1101 0010 1010
http://www.cheebi.de

FreakyPenguin

  • Administrator
  • Beiträge: 301
    • Profil anzeigen
    • toni.famkaufmann.info
Gespeichert
« Antwort #7 am: 31. March 2007, 18:31 »
Die Prozessorbefehle ;-) Mehr dazu steht in den Intel-Manuals

Cheebi

  • Beiträge: 91
    • Profil anzeigen
    • Cheebis Webseite
Gespeichert
« Antwort #8 am: 01. April 2007, 21:20 »
uups... denken vor dem schreiben ... (is halt manchmal glücksache)

ich hab nur grad gelesen, dass Linux auch per Interrupt, kernelaufrufe realisiert. Dabei werden parameter über die Register übergeben, nur was macht man, wenn mehr daten übergeben werden solln, als mit regs realisierbar?

Cheebi
0100 1001 0100 1100 0100 0001 0010 0000 0011 1010 0010 1101 0010 1010
http://www.cheebi.de

FreakyPenguin

  • Administrator
  • Beiträge: 301
    • Profil anzeigen
    • toni.famkaufmann.info
Gespeichert
« Antwort #9 am: 01. April 2007, 21:29 »
In LOST werden die Daten entweder auf den Stack gepusht, oder es wird einfach ein Pointer uebergeben. Wir benutzen aber die Register nur zur Rückgabe von Daten. Die Argumente für den Aufruf landen auf dem Stack.

 

Einloggen