4.3: Acceso Directo a Memoria (DMA)
- Page ID
- 154364
\( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)
\( \newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\)
( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\)
\( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)
\( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\)
\( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)
\( \newcommand{\Span}{\mathrm{span}}\)
\( \newcommand{\id}{\mathrm{id}}\)
\( \newcommand{\Span}{\mathrm{span}}\)
\( \newcommand{\kernel}{\mathrm{null}\,}\)
\( \newcommand{\range}{\mathrm{range}\,}\)
\( \newcommand{\RealPart}{\mathrm{Re}}\)
\( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)
\( \newcommand{\Argument}{\mathrm{Arg}}\)
\( \newcommand{\norm}[1]{\| #1 \|}\)
\( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)
\( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)
\( \newcommand{\vectorA}[1]{\vec{#1}} % arrow\)
\( \newcommand{\vectorAt}[1]{\vec{\text{#1}}} % arrow\)
\( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vectorC}[1]{\textbf{#1}} \)
\( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)
\( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)
\( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)
\( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)
\(\newcommand{\avec}{\mathbf a}\) \(\newcommand{\bvec}{\mathbf b}\) \(\newcommand{\cvec}{\mathbf c}\) \(\newcommand{\dvec}{\mathbf d}\) \(\newcommand{\dtil}{\widetilde{\mathbf d}}\) \(\newcommand{\evec}{\mathbf e}\) \(\newcommand{\fvec}{\mathbf f}\) \(\newcommand{\nvec}{\mathbf n}\) \(\newcommand{\pvec}{\mathbf p}\) \(\newcommand{\qvec}{\mathbf q}\) \(\newcommand{\svec}{\mathbf s}\) \(\newcommand{\tvec}{\mathbf t}\) \(\newcommand{\uvec}{\mathbf u}\) \(\newcommand{\vvec}{\mathbf v}\) \(\newcommand{\wvec}{\mathbf w}\) \(\newcommand{\xvec}{\mathbf x}\) \(\newcommand{\yvec}{\mathbf y}\) \(\newcommand{\zvec}{\mathbf z}\) \(\newcommand{\rvec}{\mathbf r}\) \(\newcommand{\mvec}{\mathbf m}\) \(\newcommand{\zerovec}{\mathbf 0}\) \(\newcommand{\onevec}{\mathbf 1}\) \(\newcommand{\real}{\mathbb R}\) \(\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}\) \(\newcommand{\laspan}[1]{\text{Span}\{#1\}}\) \(\newcommand{\bcal}{\cal B}\) \(\newcommand{\ccal}{\cal C}\) \(\newcommand{\scal}{\cal S}\) \(\newcommand{\wcal}{\cal W}\) \(\newcommand{\ecal}{\cal E}\) \(\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}\) \(\newcommand{\gray}[1]{\color{gray}{#1}}\) \(\newcommand{\lgray}[1]{\color{lightgray}{#1}}\) \(\newcommand{\rank}{\operatorname{rank}}\) \(\newcommand{\row}{\text{Row}}\) \(\newcommand{\col}{\text{Col}}\) \(\renewcommand{\row}{\text{Row}}\) \(\newcommand{\nul}{\text{Nul}}\) \(\newcommand{\var}{\text{Var}}\) \(\newcommand{\corr}{\text{corr}}\) \(\newcommand{\len}[1]{\left|#1\right|}\) \(\newcommand{\bbar}{\overline{\bvec}}\) \(\newcommand{\bhat}{\widehat{\bvec}}\) \(\newcommand{\bperp}{\bvec^\perp}\) \(\newcommand{\xhat}{\widehat{\xvec}}\) \(\newcommand{\vhat}{\widehat{\vvec}}\) \(\newcommand{\uhat}{\widehat{\uvec}}\) \(\newcommand{\what}{\widehat{\wvec}}\) \(\newcommand{\Sighat}{\widehat{\Sigma}}\) \(\newcommand{\lt}{<}\) \(\newcommand{\gt}{>}\) \(\newcommand{\amp}{&}\) \(\definecolor{fillinmathshade}{gray}{0.9}\)Introducción
Esta sección presenta a los alumnos la E/S programada DMA que proporciona acceso al microprocesador entre dispositivos que operan a diferentes velocidades
Detalles de la actividad
Acceso directo a memoria y E/S controladas por DMA
La técnica de E/S DMA se utiliza en sistemas de computadoras personales, incluidos aquellos que utilizan la familia de microprocesadores Intel. La técnica de E/S de acceso directo a memoria (DMA) proporciona acceso directo a la memoria mientras el microprocesador está temporalmente deshabilitado. Un controlador DMA toma prestado temporalmente el bus de direcciones, el bus de datos y el bus de control del microprocesador y transfiere los bytes de datos directamente entre un puerto de E/S y una serie de ubicaciones de memoria. La transferencia DMA también se utiliza para realizar transferencias de memoria a memoria de alta velocidad. Se utilizan dos señales de control para solicitar y acusar recibo de una transferencia DMA en el sistema basado en microprocesador. La señal HOLD es una señal de solicitud de bus que pide al microprocesador que libere el control de los buses después del ciclo actual del bus. La señal HLDA es una señal de concesión de bus que indica que el microprocesador efectivamente ha liberado el control de sus buses al colocar los buses en sus estados de alta impedancia. La entrada HOLD tiene una prioridad más alta que las entradas de interrupción INTR o NMI.
El hardware especial escribe en/lee de la memoria directamente (sin intervención de la CPU) y guarda el tiempo asociado con la búsqueda y decodificación del código de operación, incremento y pruebas de direcciones de origen y destino. El controlador DMA puede detener la CPU y acceder a la memoria (DMA de robo de ciclo) o usar el bus mientras la CPU no lo esté usando (DMA de ciclo oculto). El controlador DMA tiene algunas líneas de control (para hacer un apretón de manos con la CPU negociando para ser un maestro de bus y emular el comportamiento de la CPU mientras se accede a la memoria), un registro de direcciones que se incrementa automáticamente (o se decrementa automáticamente) en cada acceso a la memoria, y un contador utilizado para verificar el byte final (o palabra) contar.
Conclusión
Esta sección ha introducido a los alumnos al DMA y sus operaciones de sincronización de los dispositivos de E/S con el microprocesador
Evaluación
Describir cómo DMA ayuda en la sincronización de diferentes dispositivos en el acceso al microprocesador
La técnica de E/S de acceso directo a memoria (DMA) proporciona acceso directo a la memoria mientras el microprocesador está temporalmente deshabilitado. Un controlador DMA toma prestado temporalmente el bus de direcciones, el bus de datos y el bus de control del microprocesador y transfiere los bytes de datos directamente entre un puerto de E/S y una serie de ubicaciones de memoria. La transferencia DMA también se utiliza para
realizar transferencias de memoria a memoria de alta velocidad. Se utilizan dos señales de control para solicitar y acusar recibo de una transferencia DMA en el sistema basado en microprocesador. La señal HOLD es una señal de solicitud de bus que pide al microprocesador que libere el control de los buses después del ciclo actual del bus. La señal HLDA es una señal de concesión de bus que indica que el microprocesador efectivamente ha liberado el control de sus buses al colocar los buses en sus estados de alta impedancia. La entrada HOLD tiene una prioridad más alta que las entradas de interrupción INTR o NMI.