Autor Thema: multitasking verständnis  (Gelesen 6688 mal)

maumo

  • Beiträge: 182
    • Profil anzeigen
    • http://maumo.50webs.com/
Gespeichert
« am: 08. May 2005, 17:36 »
ich denke ich hab jetzt multitasking verstanden, aber da es bei mir
nicht so funtzt wie es sollte, korregiert mich bitte:

ich hab den TimerIRQ als TaskGate definiert und in der GDT ein TSS für den Timer und eins für ALLE Prozesse ZUSAMMEN gesetzt.

Wenn jetzt der Timer Int ausgelöst wird speichert die CPU ihren zustand im TSS welches im TR steht, das TSS für die Prozesse und lädt das TSS welches im TaskGate definiert ist, das vom Timer. Im TimerHandler speichere ich den inhalt des TSS in einer eigenen struktur des jetzigen Prozesses, wähle dann einen neuen und lade dann die werte aus dem Prozess in das TSS der Prozesse. Dann wird ein IRET ausgelöst und die CPU läd ihren Zustand aus dem TSS der Prozesse.

hoffe das hab ich richtig verstanden. Mein problem ist jetzt: wie starte ich das ganze? ich hab versucht einfach ein IRET mit gesetztem NT bit zu machen, funtzt aber nicht... Langsam verzweifle ich... :cry:

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #1 am: 08. May 2005, 22:06 »
oder du mapps den kernel und machst einfach ein intgate auf den timer, was leichter wird, denk ich ;) und kernel musste so oder so mappen!
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,...

maumo

  • Beiträge: 182
    • Profil anzeigen
    • http://maumo.50webs.com/
Gespeichert
« Antwort #2 am: 09. May 2005, 07:06 »
ich möchte aber bei einem timer aufruf einen Taskwechsel auslösen.
Das geht nur wenn der timer als TaskGate definiert ist...

DDR-RAM

  • Beiträge: 184
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 09. May 2005, 09:49 »

jmp far taskgate:0x12345678


das geht zwar so nicht, da vom asm nicht assembled, aber so muss es gehen.


db 0xEA
dd 0x12345678
dw taskgate


Kann jetzt gerade falsch sein, also der Opcode.
Kann zu Hause nochmal nachgucken.

MfG
DDR-RAM

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #4 am: 09. May 2005, 13:47 »
Der Opcode müsste stimmen! oder du machst:

"jmp dword 0x1234x0x12345678"

und passt es während der laufzeit an.

aber warum willst du nen taskwechsel auslösen?
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,...

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #5 am: 09. May 2005, 13:49 »
weil er den Taskwechsler als eignen Task haben will? Hab ich auch so^^
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #6 am: 09. May 2005, 13:52 »
(ironie) ehrlich? ach ne! (/ironie)
aber WARUM? was is der sinn dahinter? ich checks net ;)
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,...

Roshl

  • Beiträge: 1 128
    • Profil anzeigen
    • http://www.lowlevel.net.tc
Gespeichert
« Antwort #7 am: 09. May 2005, 13:56 »
Ist simpler weil der Taskhandler dann nicht vorher die Werte sichern muss^^
[schild=1]Wieder ein wertvoller(?) Beitrag von Roshl[/schild]

Legend

  • Beiträge: 635
    • Profil anzeigen
    • http://os.joachimnock.de
Gespeichert
« Antwort #8 am: 09. May 2005, 17:57 »
Na ja, zehntausend sachen drumrum bauen um sich ein "pusha" zu ersparen, würde ich zumindestens nicht als einfacher empfinden.
*post*

maumo

  • Beiträge: 182
    • Profil anzeigen
    • http://maumo.50webs.com/
Gespeichert
« Antwort #9 am: 09. May 2005, 17:58 »
@Legend: wie würdest du es machen???

 

Einloggen