¿El almacenamiento en búfer de la memoria primaria es la única forma de acceder a los dispositivos de E/S y al almacenamiento secundario?

No estoy seguro de si este es el sitio de intercambio de pila correcto para hacer esta pregunta, lo siento si no lo es. Si alguien puede citar un buen libro que explique la arquitectura de la computadora en general (no para una computadora específica), sería útil.

La pregunta es si la CPU accede a un disco duro transfiriendo primero un bloque de datos del disco duro a la RAM y luego la CPU lo lee de la RAM. Lo mismo sucede con los dispositivos de entrada y salida, donde la memoria RAM siempre es un almacén intermediario para todas las transferencias de datos fuera de la memoria primaria. ¿Es este el caso?

Este es el sitio de ingeniería eléctrica, por lo que no es el lugar correcto. Sin embargo, para los sistemas informáticos de propósito general "grandes", tales datos generalmente se almacenan en búfer. En sistemas pequeños con recursos limitados, como los microcontroladores, los búfer consumen una gran cantidad de memoria RAM valiosa, por lo que los datos a menudo se manejan byte a byte. Por lo general, estos procesadores no están conectados a dispositivos que requieren que se transfiera un búfer completo a la vez, como suelen hacer las unidades de disco.
¿Hay un mejor sitio de intercambio de pila para esta pregunta? Todos ellos parecen estar enfocados en el aspecto de programación de las computadoras.

Respuestas (2)

Dado que este es un sitio de ingeniería eléctrica, intentaré dar una perspectiva de nivel inferior.

Cualquier dispositivo, como un controlador de disco duro, debe tener alguna forma de transferir datos. Esto podría ser un bus de datos paralelo o uno en serie, podría ser a través de ondas de radio o incluso podría ser a través de LED de lectura humana e interruptores DIP establecidos por humanos (por lo tanto, no necesariamente necesita una CPU en absoluto). Entonces, surge la pregunta: ¿Cuál es la mejor manera de conectar un dispositivo a la CPU? Puede hacer que el dispositivo busque una dirección específica en el bus de direcciones de la CPU y luego envíe o reciba datos solo cuando la CPU lea o escriba en esa dirección. Esto omitiría la RAM por completo, lo que permitiría que la CPU copie los datos directamente desde el dispositivo a un registro del procesador. Por supuesto, en su arquitectura tendría que asegurarse de que no haya conflicto y que la RAM tampoco responda a la solicitud generando una colisión de bus. Para evitar eso, podría agregar una línea IO especial en la arquitectura de su CPU que se afirma para leer y escribir desde dispositivos y deshabilita la RAM. Incluso podría agregar un bus IO especial a la arquitectura de la CPU si lo desea.

Esta fue en realidad la cantidad de dispositivos conectados a la CPU en los primeros días (es decir, en los años 70 y 80). Considere, sin embargo, un disco duro y su uso típico. Por lo general, un procesador manipula datos que se almacenan en registros, pero los registros no son muy grandes, por lo que para grandes cantidades de datos, la RAM se utiliza como un lugar de alta velocidad para almacenar datos. El disco duro sería demasiado lento para tal uso. Sin embargo, si estos datos deben almacenarse de forma permanente, deben transferirse desde la RAM al disco duro. Usando el método que especifiqué anteriormente, la CPU tendría que estar constantemente ocupada transfiriendo byte por byte los datos que desea almacenar en el disco duro. Esto resultó ser bastante doloroso en los primeros días, por lo que se creó un mecanismo llamado Acceso directo a la memoria (DMA) para permitir que los dispositivos lean y escriban directamente desde la RAM. La CPU podría simplemente enviar un comando al controlador del disco duro, por ejemplo, para leer alguna sección del disco duro y ponerla en RAM o viceversa. La CPU entonces sería libre para hacer otras cosas mientras la HD hacía su trabajo. La transferencia también fue mucho más rápida que el antiguo método basado en CPU.

Entonces, para responder a su pregunta: ¿Hay otras formas de conectar dispositivos? ¡Absolutamente! Pero descubrirá que la forma más rápida de transferir grandes cantidades de datos desde un dispositivo no es a través del procesador, sino directamente desde el dispositivo a la RAM, por lo que la mayoría de los dispositivos modernos utilizan la RAM como almacén intermediario.

"Sin embargo, debido a que la CPU tendría que estar ocupada constantemente solo para transferir grandes bloques de datos de los dispositivos a la RAM" ¿Qué quiso decir con eso? ¿Por qué la CPU estaría constantemente ocupada transfiriendo grandes bloques de datos a la RAM? ¿Todavía estabas hablando de no involucrar a la RAM?
@mtanti Edité la respuesta para mayor claridad sobre este asunto. Básicamente, la RAM es el área más útil para manipular grandes cantidades de datos y, como tales, los datos de los dispositivos generalmente terminan allí de todos modos, por lo que la creación de DMA, aunque no es estrictamente necesaria.
¡Excelente! ¿Tiene alguna fuente donde pueda buscar más información sobre esto?

No es necesariamente así; para microcontroladores simples o computadoras antiguas como las populares microcomputadoras de los años 80, los periféricos se conectan directamente a los buses de dirección y datos sin almacenar los datos en la memoria RAM intermedia. Puede haber una línea de decodificación de dirección adicional para distinguir entre la memoria y los periféricos, con las instrucciones correspondientes como IN/OUT de x86.

¿Qué pasa con el almacenamiento secundario como los discos duros? ¿Se accede a ellos necesariamente a través de la memoria RAM?
En todo diseño moderno o grande, sí. En las viejas microcomputadoras, no; por ejemplo, la interfaz de cinta del espectro ZX, la CPU leyó el byte "más reciente" de una dirección de E/S y luego lo almacenó en la dirección "siguiente" en la que se estaba cargando.
Pensé que esa es la razón por la que se llama "almacenamiento secundario" porque solo puede acceder a los datos que contiene a través del "almacenamiento primario", ya que el primario viene antes que el secundario. ¿La redacción no tiene nada que ver con la forma en que se accede?
Tiene más que ver con la prioridad y la proximidad : se puede acceder al almacenamiento principal casi de inmediato, el almacenamiento secundario tiene más espacio, pero se tarda mucho más en acceder. He oído hablar de "almacenamiento terciario" en bibliotecas de cintas, donde hay un gran almacenamiento pero puede haber una latencia de varios minutos para que un robot encuentre y cargue la cinta.
@mtanti: incluso si los datos en el almacenamiento secundario tienen que pasar por el procesador antes de ir a la RAM, generalmente terminarán almacenándose en la RAM antes de que el procesador pueda hacer algo "útil" con ellos. Por ejemplo, la unidad de disquete Apple II requiere que el procesador lea cada byte de datos dentro de los siete ciclos de reloj desde que está disponible, y esa ventana de siete ciclos puede comenzar tan solo 20 ciclos de reloj después de leer el byte anterior. La única forma de hacer algo útil con los datos en el disquete es leer un montón en la RAM y luego actuar allí.