Autor Thema: DMA im Protected Mode  (Gelesen 4374 mal)

T0ast3r

  • Gast
Gespeichert
« am: 25. September 2005, 11:21 »
Hi!

Weiß jemand wie DMA im PM zu handhaben ist?
Ist das Page Register im PM nun 16 Bit breit?

DMA kann ich eh, nur will ich wissen was die unterschiede zwischen den DMA im RM und im PM sind.

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #1 am: 25. September 2005, 12:26 »
Nein, DMA ist Hardware, die ist überall gleich.
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 #2 am: 25. September 2005, 20:45 »
HÖ? Du kannst mit DMA auch nur 16 MB adressieren. Und zwar mit den Offsetregistern (WORD) und den Segmentregistern (BYTE). Und das wird hintereinandergesetzt. Also SEGMENT|OFFSET. Das gibt eine Adresse, wie 0x000000. Und damit kannste die ersten 16 MB adressieren.
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,...

Legend

  • Beiträge: 635
    • Profil anzeigen
    • http://os.joachimnock.de
Gespeichert
« Antwort #3 am: 25. September 2005, 20:47 »
Jop, aber besonders wenn du Paging benutzt, musst du beachten das der DMA Chip physikalische Addressen schluckt.
*post*

SSJ7Gohan

  • Beiträge: 398
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 28. September 2005, 20:24 »
Nein, der DMA is ja Hardware, wie joachim_neu schon gesagt hat, und der Hardwarezugriff ist im RM und im PM bei jeder Hardware exakt gleicht.
Ich sehe darbei aber kein großes Problem, der Festplattentreiber kann doch Speicher unter 16 MB verwenden und ihn dann über 16 MB mappen. Dann reserviert man halt unter 16 MB Buffer für jede Hardware, die DMA nutzt, das sollte ja nicht so ein großes Problem sein.

Legend

  • Beiträge: 635
    • Profil anzeigen
    • http://os.joachimnock.de
Gespeichert
« Antwort #5 am: 29. September 2005, 18:36 »
Ausserdem vorsicht vor Busmaster-DMA. Das soll wohl nichts mit dem DMA-Chip welcher nur max. 16 MB beherrscht zu tun haben.
*post*

Legend

  • Beiträge: 635
    • Profil anzeigen
    • http://os.joachimnock.de
Gespeichert
« Antwort #6 am: 30. September 2005, 18:49 »
Also er meint folgendes: Aus Sicht deines Treibers darf der Speicher liegen wo er will. Nach der Konvertierung in physikalische Addressen durch die MMU muss er jedoch unter 16MB physikalisch liegen. Diese physikalische Addresse teilst du auch dem DMA Chip mit. Also ja, das geht mit dem üblichen Paging. Du brauchst nur eine Funktion in der physikalischen Speicherverwaltung die dir garantiert Speicher unter 16MB liefert.
*post*

SSJ7Gohan

  • Beiträge: 398
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 01. October 2005, 19:19 »
Du kannst dazu nur Paging verwenden. MMU heißt Memory Management Unit, das ist der Bestandteil des Prozessors, der die virtuellen in physikalische Addressen umwandelt. Früher oder später wirst du eh Paging benutzen müssen, wenn du mehrere Programme laufen lassen willst und keinen JIT-Compiler benutzt, um alle Programme in einen Addressraum zu packen.
Das mappen vom Videospeicher usw. macht das BIOS AFAIK über irgentwelche MSRs.

Es bringt dir ausserdem nichts, Speicher von über der 16 MB Grenze unter die 16 MB Grenze zu mappen, da der DMA physikalische Addressen benutzt und dass mappen umgeht, da er ohne die MMU arbeitet.

SSJ7Gohan

  • Beiträge: 398
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 02. October 2005, 15:43 »
Ja, kann man, aber dann wird das Memory allocaten schwerer, da der Speicher immer hintereinander liegen muss. Ausserdem können die Prozesse sich gegenseitig in den Speicherbereich schreiben, wenn man keine sichere Sprache verwendet.
Mit der LDT oder wie die heißt könnte man natürlich Speicherschutz auf Descriptorebene erreichen, dann muss man aber langsammes Hardware Multitasking benutzen.

Legend

  • Beiträge: 635
    • Profil anzeigen
    • http://os.joachimnock.de
Gespeichert
« Antwort #9 am: 02. October 2005, 19:40 »
Segmentbasierter Speicherschutz müsste auch mit Software Taskswitching funktionieren denke ich, aber man hat dann eh schon 75% der zusätzlichen Komplexität drin ...

Und wie Gohan schon gesagt hat - Speicherschutz gibt es zumindestens ohne Segmente dann nicht.
*post*

 

Einloggen