Autor Thema: Swapping/Paging  (Gelesen 3814 mal)

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« am: 20. December 2004, 14:56 »
hiho zusammen!

mein MultiTasking funktioniert jetzt. Wie vielleicht manche wissen hat jedes Programm eine Page. und die mappe ich immer unter 1MB, um sie auszuführen. in dieser page is auch der stack des progies. und immer, wenn meine copyroutine versucht, diesen stack zu kopieren, stürzt es ab. ich hoffe, dass sich da jemand auskennt. vielleicht hat ja der stack im FRM/RM, in dem ich bin sowas, wie einen schutz, dass man net drinne rumschreiben/lesen kann, denn wenn ich den stack aus der page verlege, dann geht es wunderbar. allerdings geht das ja net, weil sonst die proggys sich selber überschreiben. wie gesagt, ich hoffe, jemand kann mir helfen! danke im vorraus!

mfg

JN!
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 20. December 2004, 15:16 »
hi,

du solltest darauf achten, dass während des kopierens der stackpointer nicht irgendwo in den zu kopierenden stack zeigt. das gibt nur probleme wenn du da irgendwelche rücksprung adressen überschreibst (beim kopieren des stacks vom über 1mb nach unter 1mb) oder nicht mitkopierst (ich könnte jetzt aber keinen fall konstruieren, wo das passieren könnte, aber man weiss ja nie).

porkchicken
Dieser Text wird unter jedem Beitrag angezeigt.

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #2 am: 20. December 2004, 15:19 »
ah... ne, ich will ja den kompletten stack sammt returnadressen kopieren und wieder zurück, da müsste es ja danach wieder so sein, wie davor, oder?
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

clemensoft

  • Beiträge: 92
    • Profil anzeigen
    • http://www.clemensoft.de
Gespeichert
« Antwort #3 am: 22. December 2004, 14:41 »
Eine Zeitaufwändige Methode wäre, ein Stackelement vom Stack in der Page zu poppen, SP auf die neue <1MB Adresse zu setzen und dann zu pushen.

PS. Irgendwie krieg ich bei nasm immer ne Fehkermekdung, wenn ich eip oder ip sichern will., Sozusagen:


mov ip,ax

oder

mov eip, eax


Dann kommt die Fehlermeldung

src\kernel.asm:6: error: symbol `ip' undefined

Als ob nasm IP gar nicht kennt...

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #4 am: 22. December 2004, 15:21 »
1. IP kann man nicht bearbeiten, das kann man nur durch jumps beeinflussen.
2. geht net, weil man im FRM den stack nur unter 1 MB haben darf.
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

clemensoft

  • Beiträge: 92
    • Profil anzeigen
    • http://www.clemensoft.de
Gespeichert
« Antwort #5 am: 22. December 2004, 16:42 »
Und wie sicherst du dann den IP? Wird der beim Aufrufen vom Interrupt auf den Stack gepoppt?

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #6 am: 22. December 2004, 19:32 »
jo, cs, ip und flags werden beim intcall auf den stackgepusht, und mit nem iret wieder runtergeholt.
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

 

Einloggen