Autor Thema: Ring-Wechsel und Multitasking!  (Gelesen 11818 mal)

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« Antwort #20 am: 29. November 2005, 16:53 »
Zitat von: bitmaster
Zitat
softwaremultitasking mit tss
Nennt sich dies nicht Hardwaremultitasking?

Für Software-Multitasking braucht man pro CPU ein TSS, um einen Ring-Wechsel durchführen zu können. Bei Hardware-Multitasking hat jeder Prozess ein TSS.

Osbios

  • Beiträge: 247
    • Profil anzeigen
Gespeichert
« Antwort #21 am: 30. November 2005, 09:46 »
Und ohne TSS kann man keine Ports sperren!

Da ist mir übrigens was aufgefallen. Wenn man nach diesem Tut geht: http://www.fh-zwickau.de/doc/prmo/pmtutor/text/p_spez2.htm müsste der Wert 0 in der I/O Permission Bitmap Base zur Sperrung aller Ports führen. Tut er aber nicht. Anstelle davon kann man aber das Ende vom TSS-Segment angeben (meist 104).
Und man bekommt endlich einen GPF bei in oder out.  \:D/
db 0x55AA

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #22 am: 30. November 2005, 15:30 »
Also wie mache ich das jetzt mit dem ltr? Den muss ich doch nur ein einziges mal ausführen nicht wahr? Dann muss ich diesen außerhalb von dem Timer-IRQ schreiben. Als Selektor muss ich dem ltr dann den ersten zu ladenden TSS-Deskriptor übergeben, oder wie? Und im Timer-IRQ dann einfach mit jmp die nächsten TSS-Deskriptore anspringen? Ist das so richtig? Wenn nein, wie?

Danke!!!
In the Future everyone will need OS-64!!!

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #23 am: 30. November 2005, 15:56 »
Also in meinem Theard haben die mir gesagt, dass die Methode mit dem jmp im Timer-IRQ nicht geht, aber JN hat das in seinem Tut so geschrieben.

Und so wie ich verstanden habe, muss in einen Codeteil springen, der in einem TSS angegeben habe und dort das tr Register mit ltr laden. Also so, dass es auch stimmt, denn im tr Register muss ja der Aktuelle Task sein.

Allerdings bin ich da auch nicht so sicher -> Korrigiert mich unbedint.

Gruss
Noooooooooos

zacK

  • Beiträge: 216
    • Profil anzeigen
    • http://www.domae.ch
Gespeichert
« Antwort #24 am: 30. November 2005, 17:18 »
schnell eine kurze frage die in eine andere richtung geht:
wie kann ich die pagetables vor veränderungen durch den task schützten. mappen muss ich sie ja sonst geht das übersetzen von virtueller in physische adresse net...

thx

SSJ7Gohan

  • Beiträge: 398
    • Profil anzeigen
Gespeichert
« Antwort #25 am: 30. November 2005, 18:48 »
Du kannst über ein paar Bits in den Einträgen der Pagedirectories und der Pagetables die Zugriffsrechte für jede einzelne Page ändern.

Osbios

  • Beiträge: 247
    • Profil anzeigen
Gespeichert
« Antwort #26 am: 01. December 2005, 18:53 »
Zitat von: bitmaster
Also wie mache ich das jetzt mit dem ltr? Den muss ich doch nur ein einziges mal ausführen nicht wahr?Dann muss ich diesen außerhalb von dem Timer-IRQ schreiben. Als Selektor muss ich dem ltr dann den ersten zu ladenden TSS-Deskriptor übergeben, oder wie? Und im Timer-IRQ dann einfach mit jmp die nächsten TSS-Deskriptore anspringen? Ist das so richtig? Wenn nein, wie?


LTR muss nur ein einziges mal ausgeführt werden um den ersten TSS-Descriptor zu laden. Was du mit "außerhalb des Timers" meinst weiß ich nicht, aber LTR wird hald nur ein einziges mal beim Starten des OS aufgerufen. (normalerweise)
Beim Wechsel im Timer-IRQ ist das nicht so einfach, da ich ein halbes Softwaretasking benutze (oder eher gesagt, gerade progge) kann ich dir nicht genau sagen wie das mit nem jmp zu einem anderem TSS-Deskriptor aussieht. Aber ich benutze in meiner Softwarevariante einfach den IRET Befehl indem ich die Rücksprungadresse, die auf dem Stack gespeichert ist, speicher und mit der Adresse eines anderen Tasks überschreibe.
db 0x55AA

 

Einloggen