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


10

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

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

Respuestas:


20

Para un disco leído, el flujo de datos es esencialmente:

  • después de que el ensamblaje de lectura / escritura esté en el cilindro solicitado, se selecciona la cabeza de r / w solicitada.
  • en cada sector, se lee la 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 una secuencia de bits en serie y se convierten en bytes.
  • los bytes del sector se almacenan en un búfer de sector (generalmente 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 mediante ECC y quizás se corrigen.
  • una vez validado, los datos del sector se transfieren desde el controlador a la PC host. Nota: la existencia de este búfer de sector no se conoce bien, y existe una información errónea generalizada de que la velocidad de transferencia en la interfaz del host (p. Ej. ,ATA) está vinculada o limitada por la velocidad de bits en el cabezal R / W. Eso es completamente falso, ya que estas dos transferencias de datos son operaciones independientes y secuenciales y no concurrentes.
  • A medida que la PC recibe los datos del controlador de disco a través de la interfaz ATA, la PC puede usar E / S programadas (la CPU lee repetidamente el registro de datos del puerto ATA y copia el valor en la memoria de destino) o DMA (el controlador DMA es configuración para copiar N bytes del registro de datos del puerto ATA a un búfer de memoria sin intervención adicional de la CPU).
  • el "búfer" de memoria de la PC que recibe los datos podría ser el búfer de la aplicación (cuando se usa la llamada al sistema de E / S en bloque ), o podría ser un búfer interno del sistema bajo el control del sistema de archivos, o incluso la memoria de programa o datos si los datos provienen del intercambio área (o archivo de página).

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

Para crédito extra:

Lea sobre las transferencias de " dispersión-recopilación ", que utiliza el encadenamiento DMA y una lista de dispersión-recopilación de direcciones de memoria y longitudes de búfer. En lugar de un búfer de memoria contiguo grande, una transferencia de "dispersión-reunión" permite agregar búferes de memoria no contiguos para la solicitud de E / S de disco.


1
Tal vez podría ser un poco menos específico acerca de los 'cabezales r / w', ya que las unidades no mecánicas se usan con mucha más frecuencia en estos días, pero es una buena respuesta.
Shinrai

@Shinrai: solo tengo experiencia de programación de primera mano con unidades de disco de brazo móvil (y he usado unidades de cabeza fija). Elijo no especular o repetir información de segunda o tercera mano sobre cómo funcionan los SSD.
aserrín

+1 por esta gran respuesta, bien documentada y escrita. Muy profesional.
climenole

2

Entra en un área de memoria específica a la que el núcleo ha asignado el controlador del disco. No creo que se llame específicamente. Esta área de memoria generalmente se configura como un búfer de anillo . Dependiendo del sistema operativo, esta memoria puede copiarse por segunda vez en el espacio del usuario para que la aplicación la use.

DMA es "acceso directo a memoria", que significa que la controladora de la unidad de disco puede escribir directamente en la memoria RAM sin tener la CPU repetidamente preguntar si hay más datos disponibles (conocido como sondeo - las cosas utilizadas por hacer). En cambio, cuando se ha transferido todo el búfer, el controlador interrumpe la CPU para informarle que ahora hay datos disponibles.

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


1
Las memorias intermedias de anillo suelen ser utilizadas por dispositivos de red (por ejemplo, controlador Ethernet) porque los datos pueden llegar no solicitados (inesperadamente sin una solicitud de lectura pendiente). Los datos de una unidad de disco / controlador siempre responden a una solicitud realizada por el host. Se solicitan los datos, por lo que no es necesario un "buffer de anillo" en un controlador de disco.
aserrín

OK, solo he trabajado con DAC a nivel de controlador y también usan buffers de anillo, así que supuse.
Aaron D. Marasco
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.