Autor Thema: Paging Error 14  (Gelesen 18027 mal)

mineorbit

  • Beiträge: 55
    • Profil anzeigen
Gespeichert
« Antwort #20 am: 12. May 2013, 18:53 »
 :grin: Ich glaube diesmal hats funktioniert!
Er hat mir nichtmehr die Exception ausgegeben sondern:01234
Hoffentlich sollte doch das dabei rauskommen?
Falls es das gewesen ist bin ich euch was schuldig!

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #21 am: 12. May 2013, 20:56 »
Hallo,

Könnte man das Paging Problem nicht so lösen, dass ein Manager den Prozessen eine Zeit einteilt um auf die Resourcen zuzugreifen und die zeit von einer Pit abgezähltwird (Korigiert mich bitte wenn das vollkommener Schwachsinn ist)
Es ist eine ziemlich dumme Idee, einem Programm mitten in der Arbeit den RAM abzuklemmen. :evil: Der Sinn von Paging liegt darin, dass du verschiedenen Programmen gleichzeitig verschiedene Teile vom RAM zuteilen kannst, ohne, dass die Programme davon etwas mitbekommen.

Es wird also nicht nach der Zeit, sondern nach den Ressourcen zugewiesen. Verantwortlich dafür ist der VMM (Virtual Memory Manager), ein Hauptbestandteil aller modernen Betriebssysteme.

Ansonsten würde ich sagen, fehlen dir ein paar Grundlagen, wie das mit dem Paging und so funktionieren soll. Lies dich da mal etwas ein, dann wird das auch viel klarer, warum man sowas macht (und warum das überhaupt eine gute Idee ist). Und dann sind die Tutorials auch weniger ein "ich muss das hier so schreiben" und mehr ein "aha, so funktioniert das also". :-D

Gruß,
Svenska

mineorbit

  • Beiträge: 55
    • Profil anzeigen
Gespeichert
« Antwort #22 am: 14. May 2013, 16:41 »
Danke das du mich korrigiert hast, Svenska!
Ja, ich rede ziemlich viel Schwachsinn aber ich muss mich noch sehr weit ins Thema einarbeiten.
Ich hätte noch eine Frage:Kann ich im test.bin im 3.Ring auf Funktionen des kernels, wie kprintf zugreifen,und wenn wie?
 
Vielen Dank für die Hilfe!
 

micha

  • Beiträge: 141
    • Profil anzeigen
Gespeichert
« Antwort #23 am: 14. May 2013, 18:29 »
Nein, kannst du nicht. :-P (schade aber auch :wink:)
Deine test.bin ist ja als extra elf gelinkt und nicht im kernel.
Du muss alle Funktionen, die dein Kernel den Programmen zur Verfügung stelle soll, über Syscalls anbieten

mineorbit

  • Beiträge: 55
    • Profil anzeigen
Gespeichert
« Antwort #24 am: 14. May 2013, 18:33 »
Hat sich schon erledigt! Hab gerade gemerktdas das falsch war.
 :lol:
Edit:Wie würde man den einen solchen Systemcall machen?
« Letzte Änderung: 14. May 2013, 21:04 von mineorbit »

Martin Erhardt

  • Beiträge: 165
    • Profil anzeigen
Gespeichert
« Antwort #25 am: 14. May 2013, 23:01 »
Es gibt verschiedene Möglichkeiten. Die einfachste(die auch in unserem tollen Tutorial(http://www.lowlevel.eu/wiki/Teil_6_-_Multitasking) angesprochen wird ist die Realisierung als soft-Interrupts).
Das heißt du registrierst einen neuen Interrupt-handler (bei Linux bspw. für Interrupt 0x80).

Diesen Interrupt kannst du nun vom Userspace mit asm volatile ("int $0x80"); oder sowas auffrufen.

Damit dein Syscall-Handler auch weiß, dass der print syscall gemeint ist empfiehlt es sich vorher ein Interrupt-nummer nach (z.B) EAX zu verschieben und ein pointer auf den zu printenden String kann man vorher (z.B) nach EDX verschieben.

mineorbit

  • Beiträge: 55
    • Profil anzeigen
Gespeichert
« Antwort #26 am: 15. May 2013, 15:17 »
Vielen Dank!
Das hätte sich dann auch erledigt!
Wie schließe ich diesen Thread?
Vielen Dank nocheinmal!
Mineorbit

 

Einloggen