Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: Cheebi am 29. March 2007, 12:20

Titel: API-Implementierung
Beitrag von: Cheebi 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
Titel: Re: API-Implementierung
Beitrag von: bluecode 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 (https://opensvn.csie.org/traccgi/lightOS/wiki/KernelAPI) 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.
Titel: Re: API-Implementierung
Beitrag von: nooooooooos 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
Titel: Re: API-Implementierung
Beitrag von: bluecode am 29. March 2007, 23:31
Darf man fragen, inwieweit das bereits implementiert ist Nos? Hört sich nämlich ziemlich idealistisch an :-P
Titel: Re: API-Implementierung
Beitrag von: nooooooooos 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
Titel: Re: API-Implementierung
Beitrag von: FreakyPenguin 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.
Titel: Re: API-Implementierung
Beitrag von: Cheebi 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
Titel: Re: API-Implementierung
Beitrag von: FreakyPenguin am 31. March 2007, 18:31
Die Prozessorbefehle ;-) Mehr dazu steht in den Intel-Manuals
Titel: Re: API-Implementierung
Beitrag von: Cheebi 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
Titel: Re: API-Implementierung
Beitrag von: FreakyPenguin 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.