Cuando se produce un disco de lectura o escritura en disco, ¿a dónde van los datos?

Entiendo que hay algo como un controlador de disco que contiene un búfer, pero se preguntaba si la CPU lee directamente desde este búfer, o si los datos deben ir primero a una ubicación específica en la memoria, y luego permitir que se lea Por la CPU?

¿Alguien sabe también lo que se llama el búfer? ¿Y cómo encaja DMA en todo esto?

Para un disco leer el flujo de datos es esencialmente:

  • Después de que el conjunto de lectura / escritura esté en el cilindro solicitado, se selecciona la cabeza r / w solicitada.
  • En cada sector, se lee el ID del sector. Si el número de sector que se leyó coincide con el número de sector solicitado, se leen los datos del sector.
  • Los datos del sector se leen como un flujo de bits en serie y se convierten en bytes.
  • Los bytes del sector se almacenan en un buffer de sector (normalmente SRAM en el controlador); Este búfer de sector es distinto del "caché de disco".
  • Una vez que se ha leído todo el sector, los datos se validan usando ECC, y quizás se corrijan.
  • Una vez validado, los datos del sector se transfieren desde el controlador al PC host. Nota: la existencia de este buffer de sector no es bien conocida y hay una desinformación generalizada de que la velocidad de transferencia en la interfaz de host (egATA) está ligada o limitada por la velocidad de bits en la cabeza R / W. Esto es completamente falso, ya que estas dos transferencias de datos son operaciones independientes y secuenciales y no concurrentes.
  • Ya que el PC recibe los datos del controlador de disco a través de la interfaz ATA, el PC puede usar E / S programada (la CPU lee repetidamente el registro de datos del puerto ATA y copia el valor a la memoria de destino) o DMA (el controlador DMA es Setup para copiar N bytes del registro de datos del puerto ATA a un buffer de memoria sin intervención adicional de la CPU).
  • El "buffer" de memoria del PC que recibe los datos podría ser el búfer de la aplicación (al utilizar la llamada al sistema de E / S de bloque ), o podría ser un búfer interno del sistema bajo control del sistema de archivos o incluso un programa o memoria de datos si los datos procedían del swap (O archivo de página).

Una escritura en el disco es similar, excepto que los datos se transfieren desde el PC al controlador de disco, se calcula el ECC, se localiza el sector solicitado y luego se escriben los datos desde el buffer del sector hasta el disco.

Para obtener un crédito adicional:

Leer sobre las transferencias " scatter-gather ", que utiliza encadenamiento DMA y una lista de dispersión-recopilación de direcciones de memoria y longitudes de búfer. En lugar de un buffer de memoria grande y contiguo, una transferencia "scatter-gather" permite el uso de memorias intermedias no contiguas que se agregan para la petición de E / S de disco.

Se entra en un área de memoria específica que el núcleo ha asignado el controlador del disco. No creo que sea específicamente nombrado. Esta área de memoria se configura generalmente como un búfer de anillo . Dependiendo del sistema operativo, esta memoria se puede copiar una segunda vez en el espacio de usuario para la aplicación a utilizar.

DMA es "acceso directo a la memoria", lo que significa que el controlador de la unidad de disco puede escribir directamente en la RAM sin que la CPU lo pregunte repetidamente si hay más datos disponibles (conocidos como sondeos). En su lugar, cuando se ha transferido todo el búfer, el controlador entonces interrumpe la CPU para permitirle saber que los datos están ahora disponibles.

Si tiene curiosidad por un nivel aún más bajo, el controlador realiza llamadas ioctl .