Autor Thema: Interrupt Vector Table und Protected Mode  (Gelesen 9467 mal)

bscreator

  • Gast
Gespeichert
« am: 20. June 2004, 19:29 »
Hi Leute,

Wie jedem bekannt ist, können Interrupts ja nur im Real-Mode voll "ausgeschöpft" werden. Wenn man sich den Aufwand gemacht hat, eigene Interrupts anzulegen und in der Tabelle zu registrieren, der Rechner jedoch nach dem Bootvorgang im Protected Mode läuft, ist die Arbeit doch für die Katz´ gewesen, oder ?
(Da Ports die Aufgabe von Interrupts im Protected Mode übernehmen)

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #1 am: 20. June 2004, 20:34 »
Du siehst das falsch.

Im Protected Mode gibt es auch Interrupts und eine Interrupt Tabelle.
Diese wird aber anders angelegt als im Real-Mode.

Und die Interrupts des BIOS kannst du im PMode nicht benutzen, da der Code für 16-Bit Real-Mode geschrieben ist.

Du musst also eigene Interrupt-Handler für den Pmode schreiben und die IDT selbst anlegen.

Das BIOS benutzt ebenfalls Ports um die Funktionen der Interrupts zu realisieren.
----------------------
Redakteur bei LowLevel

bscreator

  • Gast
Gespeichert
« Antwort #2 am: 20. June 2004, 21:53 »
1. Wie man eine IDT im und für den Real-Mode anlegt, ist ja schon in
   Ausgabe 3 behandelt worden. Ist das Anlegen von IDT´s im PM schwerer ?

2. Da Interrupts im PM nicht mehr funktionieren, kann man auch die Video-
    BIOS Interrupts vergessen. Muss man dann bei allen Funktionen zur
    Ausgabe von Zeichen die wesentlichen komplizierteren Ports verwenden ?

mastermesh

  • Beiträge: 341
    • Profil anzeigen
    • http://www.kostenloser-laptop.de/
Gespeichert
« Antwort #3 am: 20. June 2004, 22:15 »
Zitat
bscreator posteteDa Interrupts im PM nicht mehr funktionieren, kann man auch die Video-BIOS Interrupts vergessen. Muss man dann bei allen Funktionen zur Ausgabe von Zeichen die wesentlichen komplizierteren Ports verwenden ?
1. Interrupts funktionieren, bloß BIOS-Interrupts (=> auch Video-BIOS funktioniert nicht).

2. Ausgabe von Zeichen im Textmode läuft nicht über Ports, sondern über den Videobuffer (0xB8000), also über den direkten Zugriff zum RAM.

3. Wenn du doch den Video-BIOS brauchst, kannst du nen Virtual86-Monitor schreiben, der bei Bedarf zurück in den Real Mode schaltet (ist allerdings nicht einfach zu realisieren).

bscreator

  • Gast
Gespeichert
« Antwort #4 am: 21. June 2004, 08:23 »
Zitat
mastermesh :
Interrupts funktionieren, bloß BIOS-Interrupts nicht.
Also ich muss sagen, außer den BIOS-Interrupts (Sektoren lesen, Bildschirmausgabe, Drucker, etc.) kenn ich nur die von DOS und Windows. Und die kann man ja schlecht verwenden (Wenn man ein BS programmieren will). Die selbsterstellten im Real-Mode kann man wohl auch nicht verwenden, da die in 16-Bit-Code geschrieben sind.
Meinst Du also solche Interrupts, die man mit 32-Bit-Code im PM selbst geschrieben hat, oder welche meinst Du sonst ?

mfg, bscreator

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #5 am: 21. June 2004, 12:45 »
du musst ein Int selbst schreiben und halt mit EAX statt AX usw. für den PM & du darfst keine Ints vom BIOS benutzen... Man könnte aber doch ein eigenes Int0x13 schreiben und dann alles umbiegen, 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,...

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #6 am: 21. June 2004, 12:46 »
ich meine natürlich int 0x10...
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,...

chr15

  • Beiträge: 279
    • Profil anzeigen
    • http://www.clinux.de.vu
Gespeichert
« Antwort #7 am: 21. June 2004, 12:54 »
Also man darf jetzt allgemeine-Interrupts nicht mit Softwareinterrupts verwechseln. Die Hardwareinterrupts können über den PIC auf die Interruptplaätze gelegt werden. Softwareinterrupts kann man auch in die IDT einbringen. Das eizigste was zu beachten ist, sind die Berechtigungen der Interrupt-Gates und das Deren Handler auch im PM gültigen Code beinhalten.

@joachim_neu: Warum sollte man AX durch EAX ersetzen?

bscreator

  • Gast
Gespeichert
« Antwort #8 am: 21. June 2004, 13:54 »
Ich komm nicht so ganz mit.  Dass man BIOS-Ints nicht verwenden darf, weiß ich inzwischen. Aber was zum T.. sind Softwareinterrupts ? Sind das solche, die nicht direkt auf die Hardware zugreifen ?

chr15

  • Beiträge: 279
    • Profil anzeigen
    • http://www.clinux.de.vu
Gespeichert
« Antwort #9 am: 21. June 2004, 13:56 »
Softwareinterrupts ruft manmit dem int-Befehl auf(, in der Absicht eine Aufgabe abzuarbeiten). So sind "Bios-Interupts" auch Softwareinterrupts.

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #10 am: 21. June 2004, 14:02 »
Pass auf.

Jede Hardware in deinem PC ist an eine sogenannte IRQ (Interrupt Request) Leitung angeschlossen. Diese IRQ-Leitungen führen alle zum PIC.

Wenn nun deine Hardware Daten hat, dann teilt sie das dem PIC über die IRQ-Leitung mit.

Der PIC wiederrum ruft dann eine Interrupt-Routine auf, welche sich dann darum kümmert, das die Hardware bedient wird. Das nennt man einen Hardware-Interrupt, da die Interrupt-Routine sogesehen von der Hardware aufgerufen wird.

Es ist aber auch möglich Interrupt Routine aus einem programm her auszurufen:
int 0x10

Somit kann man theoretiusch die selben Interrupt-Routinen aufrufen welche die Hardware aufruft. Nur spricht man hier nun von einem Software-Interrupt, weil die Interrupt-Routine eben von einem Programm aufgerufen wird.

EIne Interrupt-Routine ist eigentlich nichts anderes als ein kleines Programm, das einen bestimmten Zweck erfüllt. So sind die Interrupt-Routinen welche von der Hardware aufgerufen werden dazu gedacht die Hardware zu bedienen und mit dieser zu kommunikzieren. Dazu werden dann auch Ports innerhalb der Interrupt-Routine benuttzt.

Die BIOS-Ints sind ebenfalls nur kleine Programme die vom BIOS in den Speicher geladen werden und dann über Interrupt-Aufrufe genutzt werden können. Sogesehen sind die BIOS-Interrupts eine Art mini-OS.

Der Code der BIOS-Ints ist aber für Real-Mode 16 Bit geschrieben. Wenn du nun in den PMode wechselst, funktioniert dieser Code nichtmehr. Daher muss man sich dann eigene Treiber usw schreiben die die jeweilige Hardware bedienen.

Man kann auch Interrupt-Routinen schreiben die garnichts mit der hardware zu tun haben, sondern evtl. Speicher reservieren sollen usw.
----------------------
Redakteur bei LowLevel

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #11 am: 23. June 2004, 13:42 »
aso, also diese 0x10 ints oder so sind software-ints und die mit der systemuhr und dem timer und den unterbrechungen sind hardware-ints,oder wie?!?
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,...

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #12 am: 23. June 2004, 14:53 »
Alle Interrupts die im Normalfall von einem programm aufgerufen werden, nennt man Software-Interrupts. Und alle Interrupts die vom PIC aufgerufen werden, weil sich eine Hardware beim PIC "gemeldet" hat, nennt man Hardware-Interrupts.

Das ist aber nur eine Bezeichnung. Im Grunde ist es alles das selbe.
Meistens ist es aber so, das es keinen SInn macht einen Interrupt-Handler der eigentlich für Hardware gedacht ist, von einem Programm aus aufzurufen.

Daher unterscheidet man zwischen den beiden.
----------------------
Redakteur bei LowLevel

kleiner

  • Beiträge: 131
    • Profil anzeigen
Gespeichert
« Antwort #13 am: 13. July 2004, 18:23 »
Softwareinterrupts werden z.B. benutzt, um User-Space-Programme Aktionen ausführen zu lassen, die Kernel-Rechte benötigen: z.B. schreiben auf den Bildschirm, fork...

 

Einloggen