Unterbrechungsfrei lesen

Diskussion zum Thema Programmierung unter DOS (Intel x86)
Antworten
Benutzeravatar
Dosenware
DOS-Gott
Beiträge: 3745
Registriert: Mi 24. Mai 2006, 20:29

Unterbrechungsfrei lesen

Beitrag von Dosenware »

Grüße,

so eine Festplatte hat ja eine Zugriffszeit von um die 20-30ms - was ich mich jetzt frage:

Gibt es eine Möglichkeit während der Zeit weiterzuarbeiten?

d.h. sowas wie:
-> Festplattenzugriff anstoßen
-> weiterarbeiten
-> Int vom OS wenn der Zugriff fertig ist

sonst hat man halt immer eine Pause beim Zugriff...

/Grüße
Manawyrm
Norton Commander
Beiträge: 101
Registriert: Sa 23. Jul 2011, 21:03

Re: Unterbrechungsfrei lesen

Beitrag von Manawyrm »

Also, du kannst direkt mit dem IDE-Controller reden und einen DMA-Transfer anstoßen.
Damit solltest du dann ne ganze Menge Sektoren im Hintergrund in den RAM kopieren können.

Allerdings bricht dir das natürlich leider die Kompatibilität zu SCSI, BIOS-USB-Emulation, XT-IDE, etc.
Ob es das wert ist...
Benutzeravatar
Dosenware
DOS-Gott
Beiträge: 3745
Registriert: Mi 24. Mai 2006, 20:29

Re: Unterbrechungsfrei lesen

Beitrag von Dosenware »

Nee, das wird eher nichts - vor allem da ich dann direkt auf das Dateisystem zugreifen müsste um an die Daten für den Zugriff zu kommen... und DMA ist ja auch nicht überall verfügbar.

Ich hätte eigentlich erwartet das es eine solche Funktion gibt:

- Operation Anstoßen
- weiterarbeiten, während das OS im Hintergrund bei jedem TimerInt beim Gerät Nachfragt ob die Daten schon soweit sind
- Int auslösen, wenn Daten transferiert sind

wir reden hier immerhin von ~20ms in denen der Rechner nur Zeit vergeudet.
mkarcher
LAN Manager
Beiträge: 204
Registriert: Fr 5. Jun 2020, 19:38

Re: Unterbrechungsfrei lesen

Beitrag von mkarcher »

Die Funktion im PC/AT-BIOS zum Lesen von der Festplatte ist nicht so geschrieben, dass eine Operation im Hintergrund fortgeführt werden kann. Allerdings sieht IBM seit dem AT das Gegenteil vor: Sobald eine IDE-Operation angestoßen ist, ruft das BIOS INT 15, AX=9000h auf. Der Handler muss nicht sofort zurückkehren, sondern kann erst einmal Arbeit verrichten (oder bei einem Multitasking-System einen Taskswitch veranlassen). Wenn die Festplatte ihren Interrupt (klassisch: IRQ14) auslöst, dann wird vom BIOS INT 15, AX=9100 aufgerufen. Damit das funktioniert, muss natürlich das Interrupt-Flag gesetzt sein. Man kann also INT 15 hooken, und sobald AX=9000 kommt, mit STI die Interrupts einschalten und beginnen, Arbeit zu verrichten. Dieser Handler pollt dann ein Flag, das gesetzt wird, sobald INT 15 mit AX=9100 aufgerufen wird. Wenn der Handler dann zurückspringt, macht das BIOS mit dem Lesen von der Festplatte weiter.

Ich weiß allerdings nicht, welche Systeme diese Hooks in der Praxis genutzt haben - es könnte hier also bei einigen BIOS-Varianten Implementationsprobleme geben, wenn das eine selten genutzte Funktionalität ist.
Benutzeravatar
Dosenware
DOS-Gott
Beiträge: 3745
Registriert: Mi 24. Mai 2006, 20:29

Re: Unterbrechungsfrei lesen

Beitrag von Dosenware »

Hmm, sehr kompliziert... :-/
Antworten