Versteh ich nicht ganz...



  • Also, was ich nicht verstehe ist wie ein anderes Programm auf die Funktionen eines Kernels zugreifen kann der ja auch selber ein Programm ist.

    Also könnte mir vielleicht jemand sagen wie das aber trotzdem funktioniert?
    Oder mach ich da einfach nur nen Denkfehler?



  • Ich würde sagen ein Denkfehler. Ich weiss nicht genau, wie Kernelfunktionen von anderen Programmen benutzt werden, dies ist sehr Systemabhängig, oft wird das aber über Interrupts oä. gemacht. Der Kernel bleibt ja ständig im RAM (bzw. die wichtigen Teile) und wenn der Kernel nun ein Interrupt erhält, startet er die Routinen um diese ab zu arbeiten. (Naja ich glaub ich hab das sehr sehr schlecht erklärt).



  • Hi,

    ich weiß es auch nicht mehr genau. Aber man hat es mir mal so erklärt...

    Ein Windows- Programm bekommt 4 GB (!) virtuellen Speicher zugewiesen. In diesen Speicher werden zum eigenen Code noch Teile des Betriebssytems (oder Kernels) und die benötigten Dlls geladen. Somit hat quasi jedes Programm seine "eigenen" Betriebssytemfunktionen mit dabei. Es ist also kein Zugriff auf fremde Speicherbereiche im eigentlichen Sinn notwendig.

    Grüße, Volle.

    P.S.: Achso, ich bin jetzt mal vom aktuellen Windows- OS ausgegangen ohne zu berücksichtigen, dass du vielleicht ein anderes OS meinst. Aber wie bereits gesagt wurde, ist das vermutlich auch nicht immer genau gleich gelöst. Da kocht wohl jeder Hersteller ein eigenes, wenn auch ähnliches Süppchen.

    [ Dieser Beitrag wurde am 15.01.2003 um 08:53 Uhr von Volle editiert. ]



  • Ich verstehe nicht, was daran unverständlich ist. kingruedis Erklärung mit den Irqs trägt ja auch nicht direkt zur Erklärung bei.

    Btw, die Sache mit dem virtuellen Speicher (halt nicht zwangsläufig 4GB) wird auf praktisch jedem System so gelöst (Win, OS/2, Linux, VMS, usw). Die konkrete Ausgestaltung hängt auch von der CPU ab, aber die Idee ist immer da.

    Nein, für die Kernel-Zugriffe ist das eigentlich ganz primitiv gelöst: man hat einfach eine Liste aus Adressen, und die Anfangsadresse der Liste ist immer fest. Eigentlich die einzig feste Adresse im System (abgesehen von Hardware).

    Will ich jetzt z.B. die Kernel-Funktion DeleteFile haben, so ist irgendwann bei der Kernelerstellung festgelegt worden, daß diese Funktion den Offset 164 hat. Um die Funktion aufzurufen springt man nun (das wäre wohl index-relativ mit Indirektion) auf JMP (Basis-Adresse_der_Funktionsliste + 164) und ruft dadurch die Funktion auf. Welche Parameter in den Registern oder auf dem Stack liegen müssen ergibt sich aus der Kernel-Doku. Teilweise wird der Sprung eben auch durch Irqs ausgeführt, es muß nicht unbedingt ein echter Jump sein, ein Irq ist ja auch eine Art Sprungbefehl. Das ist aber bereits ein Implementationsdetail des jeweiligen Betriebssystems.

    Diese Lösung ist uralt, das war schon im ZX81 so gemacht - wenn auch der Kernel damals ein bißchen kleiner war. 😉



  • @Marc++us

    Danke, jetzt begreiff ich`s endlich.

    @Volle

    Ich bin Linux, Unix und anderen Systemen ausgegangen die OpenSource sind.
    Bei Windows wusste ich schon wie das läuft. Trotzdem danke für den Erklärungsversuch.



  • @K.M: ´ ist kein Apostroph!



  • wo siehst du da ein '´'?



  • Entschuldigung, da steht ein `, was aber auch kein Apostroph ist.



  • @'s

    Da steht ich`s

    ich's steht für ich es, das ist eine Auslassung und da macht man sehr wohl nen ' oder ´ oder ` oder was auch immer



  • nö man macht kein ` oder ´ sondern '

    😃

    PS: ich bin nicht <'s>



  • Also eigentlich ist es ja egal. 😃


Anmelden zum Antworten