cvs commit: de-docproj/books/developers-handbook/dma chapter.sgml

From: Aron Schlesinger <as(at)doc.bsdgroup.de>
Date: Wed, 8 Aug 2007 01:13:16 GMT

as 2007-08-08 01:13:16 UTC

  FreeBSD ports repository

  Modified files:
    books/developers-handbook/dma chapter.sgml
  Log:
  Kapitel 9 formatiert.
  
  Revision Changes Path
  1.3 +891 -771 de-docproj/books/developers-handbook/dma/chapter.sgml
  
  Index: chapter.sgml
  ===================================================================
  RCS file: /home/cvs/de-docproj/books/developers-handbook/dma/chapter.sgml,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -I$FreeBSDde.*$ -r1.2 -r1.3
  --- chapter.sgml 7 Aug 2007 14:58:58 -0000 1.2
  +++ chapter.sgml 8 Aug 2007 01:13:16 -0000 1.3
  @@ -16,252 +16,305 @@
           Reserved. 10 December 1996. Last Update 8 October
           1997.</emphasis></para>
   
  - <para>Direct Memory Access (DMA) ist eine Methode, die es erlaubt, Daten von
  - einer stelle in einem Rechnern an eine andere zu transferieren ohne
  - Eingreifen des Prozessors (CPU).</para>
  -
  - <para>Die Art und Weise, in der die DMA-Funktion implementiert ist, variiert
  - zwischen den Rechnerarchitekturen. Daher beschr&auml;nken wir uns im Folgenden
  - ausschliesslich auf die Methoden und Implementierungen auf IBM
  - Personal Computer (PC), dem IBM PC/AT und all seinen Nachfolgern und
  - Nachbauten.</para>
  -
  - <para>Das DMA-Subsystem basiert auf dem &intel; 8237 DMA-Controller. Der
  - 8237 enth&auml;lt vier DMA-Kan&auml;le, welche unabh&auml;ngig voneinander programmiert
  - werden k&ouml;nnen und jeder dieser Kan&auml;le kann zu einem beliebigen Zeitpunkt
  - aktiv sein. Diese Kan&auml;le sind mit 0, 1, 2 und 3 nummeriert. Beginnend
  - mit dem PC/AT f&uuml;gte IBM einen zweiten 8237-Chip hinzu und nummerierte
  - dessen Kan&auml;le mit 4, 5, 6 und 7.</para>
  -
  - <para>Der originale DMA-Controller (0, 1, 2 and 3) bewegt ein Byte bei jedem
  - Transfer. Der zweite DMA-Controller (4, 5, 6, and 7) bewegt 16-Bits aus
  - zwei benachbarten Speicherbereichen bei jedem Transfer, wobei das erste Byte
  - immer von einer geradzahligen Adresse stammt. Die zwei Controller sind
  - identische Komponenten und der Unterschied in der Transfergr&ouml;&szlig;e wird durch
  - die Art und Weise verursacht, wie der zweite Controller im System
  - beschaltet ist.</para>
  -
  - <para>Der 8237 hat zwei elektrische Signale f&uuml;r jeden Kanal: DRQ und
  - -DACK. Zus&auml;tzlich gibt es weitere Signale mit den Namen HRQ (Hold Request),
  - HLDA (Hold Acknowledge), -EOP (End of Process) sowie die Kontrollsignale
  - f&uuml;r den Bus: -MEMR (Memory Read), -MEMW (Memory Write), -IOR (I/O Read)
  - und -IOW (I/O Write).</para>
  -
  - <para>Der 8237 DMA-Controller ist bekannt als ein <quote>fly-by</quote>-DMA-Controller.
  - Das bedeutet, da&szlig; die von einem zu einem anderen Bereich bewegten Daten
  - weder den DMA-Chip durchlaufen noch darin gespeichert werden. Daraus
  - folgernd kann der DMA-Controller nur zwischen einem I/O-Port und einer Speicheradresse
  - Daten bewegen, nicht zwischen zwei I/O-Ports oder zwei Speicherbereichen.</para>
  + <para>Direct Memory Access (DMA) ist eine Methode, die es
  + erlaubt, Daten von einer stelle in einem Rechnern an eine andere
  + zu transferieren ohne Eingreifen des Prozessors (CPU).</para>
  +
  + <para>Die Art und Weise, in der die DMA-Funktion implementiert
  + ist, variiert zwischen den Rechnerarchitekturen. Daher
  + beschr&auml;nken wir uns im Folgenden ausschliesslich auf die
  + Methoden und Implementierungen auf IBM Personal Computer (PC),
  + dem IBM PC/AT und all seinen Nachfolgern und Nachbauten.</para>
  +
  + <para>Das DMA-Subsystem basiert auf dem &intel; 8237
  + DMA-Controller. Der 8237 enth&auml;lt vier DMA-Kan&auml;le,
  + welche unabh&auml;ngig voneinander programmiert werden
  + k&ouml;nnen und jeder dieser Kan&auml;le kann zu einem
  + beliebigen Zeitpunkt aktiv sein. Diese Kan&auml;le sind mit 0,
  + 1, 2 und 3 nummeriert. Beginnend mit dem PC/AT f&uuml;gte IBM
  + einen zweiten 8237-Chip hinzu und nummerierte dessen Kan&auml;le
  + mit 4, 5, 6 und 7.</para>
  +
  + <para>Der originale DMA-Controller (0, 1, 2 and 3) bewegt ein
  + Byte bei jedem Transfer. Der zweite DMA-Controller (4, 5, 6, and
  + 7) bewegt 16-Bits aus zwei benachbarten Speicherbereichen bei
  + jedem Transfer, wobei das erste Byte immer von einer
  + geradzahligen Adresse stammt. Die zwei Controller sind
  + identische Komponenten und der Unterschied in der
  + Transfergr&ouml;&szlig;e wird durch die Art und Weise
  + verursacht, wie der zweite Controller im System beschaltet
  + ist.</para>
  +
  + <para>Der 8237 hat zwei elektrische Signale f&uuml;r jeden
  + Kanal: DRQ und -DACK. Zus&auml;tzlich gibt es weitere Signale
  + mit den Namen HRQ (Hold Request), HLDA (Hold Acknowledge), -EOP
  + (End of Process) sowie die Kontrollsignale f&uuml;r den Bus:
  + -MEMR (Memory Read), -MEMW (Memory Write), -IOR (I/O Read) und
  + -IOW (I/O Write).</para>
  +
  + <para>Der 8237 DMA-Controller ist bekannt als ein
  + <quote>fly-by</quote>-DMA-Controller. Das bedeutet, da&szlig;
  + die von einem zu einem anderen Bereich bewegten Daten weder den
  + DMA-Chip durchlaufen noch darin gespeichert werden. Daraus
  + folgernd kann der DMA-Controller nur zwischen einem I/O-Port und
  + einer Speicheradresse Daten bewegen, nicht zwischen zwei
  + I/O-Ports oder zwei Speicherbereichen.</para>
   
       <note>
  - <para>Der 8237 erlaubt es, da&szlig; zwei Kan&auml;le verbunden sind, um einen
  - h&ouml;heren Durchsatz bei DMA-Operationen zwischen verschiedenen Speicherbereichen
  - in einem nicht-<quote>fly-by</quote>-Modus zu gew&auml;hrleisten. Aber niemand
  - in der PC-Industrie benutzt diese begrenzte Resource, da es schneller ist
  - die Daten mittels der CPU zwischen Speicherbereichen zu bewegen.</para>
  + <para>Der 8237 erlaubt es, da&szlig; zwei Kan&auml;le
  + verbunden sind, um einen h&ouml;heren Durchsatz bei
  + DMA-Operationen zwischen verschiedenen Speicherbereichen in
  + einem nicht-<quote>fly-by</quote>-Modus zu gew&auml;hrleisten.
  + Aber niemand in der PC-Industrie benutzt diese begrenzte
  + Resource, da es schneller ist die Daten mittels der CPU
  + zwischen Speicherbereichen zu bewegen.</para>
       </note>
   
  - <para>In der PC-Architekur wird jeder DMA-Kanal normalerweise nur dann
  - aktiviert, wenn die Hardware, welche einen gegebenen DMA-Kanal benutzt,
  - einen Transfer durch Setzen der DRQ-Linie verlangt.</para>
  + <para>In der PC-Architekur wird jeder DMA-Kanal normalerweise
  + nur dann aktiviert, wenn die Hardware, welche einen gegebenen
  + DMA-Kanal benutzt, einen Transfer durch Setzen der DRQ-Linie
  + verlangt.</para>
   
       <sect2>
         <title>Beispiel eines DMA-Transfers</title>
         
  - <para>Hier ist ein Beispiel fr die notwendigen Schritte, welche einen
  - DMA-Transfer veranlassen und durchf&uuml;hren. In diesem Beispiel hat der
  - Diskettencontroller (floppy disk controller, FDC) nur ein Byte zu lesen
  - und verlangt vom DMA-Controller dieses Byte im Speicher an der Adresse
  - 0x00123456 abzulegen. Der Prozess beginnt damit, da&szlig; der FDC das
  - DRQ2-Signal (die DRQ-Linie f&uuml;r DMA-Kanal 2) einf&uuml;gt, um den DMA-Controller
  - zu alarmieren.</para>
  -
  - <para>Der DMA-Controller nimmt wahr, da&szlig; das DRQ2-Signal eingef&uuml;gt ist.
  - Der DMA-Controller stellt sicher, da&szlig; der DMA-Kanal 2 programmiert und
  - unmaskiert (freigegeben) ist. Der DMA-Controller stellt gleichzeitig sicher,
  - da&szlig; keiner der anderen DMA-Kan&auml;le aktiv ist oder aktiv sein m&ouml;chte
  - mit einer h&ouml;heren Priorit&auml;t. Sobald all diese &Uuml;berpr&uuml;fungen durchlaufen
  - sind, fordert der DMA-Controller die CPU auf, den Bus freizugeben, damit
  - der DMA-Controller ihn nutzen kann. Diese Anforderung erfolgt mittels des
  - HRQ-Signals, welches zur CPU geht.</para>
  -
  - <para>Die CPU erkennt das HRQ-Signal und f&uuml;hrt die momentane Instruktion
  - komplett aus. Sobald die CPU den Bus freigeben kann, wird er dies tun.
  - Nun sind alle normalerweise von der CPU erzeugten Signale (-MEMR, -MEMW,
  - -IOR, -IOW und ein paar andere) in einer Situation mit drei Zust&auml;nden
  - (entweder hoch oder niedrig) und die CPU teilt dem DMA-Controller mittels
  - des HLDA-Signals mit, da&szlig; er nun die Kontrolle &uuml;ber den Bus hat.</para>
  -
  - <para>Abh&auml;ngig vom Prozessor kann die CPU noch einige zus&auml;tzliche Instruktionen
  - ausf&uuml;hren ohne die Kontrolle des Bus, aber sie mu&szlig; unter Umst&auml;nden warten,
  - wenn sie Instruktionen abarbeiten will, welche etwas aus dem Speicher lesen
  - m&uuml;ssen, was nicht im internen Prozessor-Cache oder der Pipeline ist.</para>
  -
  - <para>Da der DMA-Controller nun <quote>verantwortlich ist</quote>, aktiviert er
  - -MEMR, -MEMW, -IOR, -IOW Output-Signale und der Output des DMA-Controllers
  - wird auf 0x3456 gesetzt, damit das zu transferierende Byte zu einem
  + <para>Hier ist ein Beispiel fr die notwendigen Schritte,
  + welche einen DMA-Transfer veranlassen und durchf&uuml;hren.
  + In diesem Beispiel hat der Diskettencontroller (floppy disk
  + controller, FDC) nur ein Byte zu lesen und verlangt vom
  + DMA-Controller dieses Byte im Speicher an der Adresse
  + 0x00123456 abzulegen. Der Prozess beginnt damit, da&szlig; der
  + FDC das DRQ2-Signal (die DRQ-Linie f&uuml;r DMA-Kanal 2)
  + einf&uuml;gt, um den DMA-Controller zu alarmieren.</para>
  +
  + <para>Der DMA-Controller nimmt wahr, da&szlig; das DRQ2-Signal
  + eingef&uuml;gt ist. Der DMA-Controller stellt sicher,
  + da&szlig; der DMA-Kanal 2 programmiert und unmaskiert
  + (freigegeben) ist. Der DMA-Controller stellt gleichzeitig
  + sicher, da&szlig; keiner der anderen DMA-Kan&auml;le aktiv ist
  + oder aktiv sein m&ouml;chte mit einer h&ouml;heren
  + Priorit&auml;t. Sobald all diese &Uuml;berpr&uuml;fungen
  + durchlaufen sind, fordert der DMA-Controller die CPU auf, den
  + Bus freizugeben, damit der DMA-Controller ihn nutzen kann.
  + Diese Anforderung erfolgt mittels des HRQ-Signals, welches zur
  + CPU geht.</para>
  +
  + <para>Die CPU erkennt das HRQ-Signal und f&uuml;hrt die
  + momentane Instruktion komplett aus. Sobald die CPU den Bus
  + freigeben kann, wird er dies tun. Nun sind alle normalerweise
  + von der CPU erzeugten Signale (-MEMR, -MEMW, -IOR, -IOW und
  + ein paar andere) in einer Situation mit drei Zust&auml;nden
  + (entweder hoch oder niedrig) und die CPU teilt dem
  + DMA-Controller mittels des HLDA-Signals mit, da&szlig; er nun
  + die Kontrolle &uuml;ber den Bus hat.</para>
  +
  + <para>Abh&auml;ngig vom Prozessor kann die CPU noch einige
  + zus&auml;tzliche Instruktionen ausf&uuml;hren ohne die
  + Kontrolle des Bus, aber sie mu&szlig; unter Umst&auml;nden
  + warten, wenn sie Instruktionen abarbeiten will, welche etwas
  + aus dem Speicher lesen m&uuml;ssen, was nicht im internen
  + Prozessor-Cache oder der Pipeline ist.</para>
  +
  + <para>Da der DMA-Controller nun <quote>verantwortlich
  + ist</quote>, aktiviert er -MEMR, -MEMW, -IOR, -IOW
  + Output-Signale und der Output des DMA-Controllers wird auf
  + 0x3456 gesetzt, damit das zu transferierende Byte zu einem
           bestimmten Speicherbereich gelangt.</para>
             
  - <para>Der DMA-Controller verst&auml;ndigt nun das Ger&auml;t, welches die Anforderung
  - veranlasst hat, da&szlig; der Transfer beginnt. Dies geschieht mittels einf&uuml;gen
  - des Signals -DACK signal oder wie hier in unserem Beispiel mittels -DACK2.</para>
  -
  - <para>Der Floppy-Controller ist nun verantwortlich f&uuml;r das Setzen des
  - Bytes f&uuml;r den Transport auf den Datenlinien des Bus. Sofern der Floppy-Controller
  - nicht mehr Zeit braucht, um das Daten-Byte auf den Bus zu bringen

----------------------------------------------
Diff block truncated. (Max lines = 200)
----------------------------------------------

To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-cvs-doc" in the body of the message
Received on Wed 08 Aug 2007 - 03:17:14 CEST

search this site