Para um disco lido, o fluxo de dados é essencialmente:
- depois que o conjunto de leitura / gravação estiver no cilindro solicitado, a cabeça r / w solicitada é selecionada.
- em cada setor, o ID do setor é lido. Se o número do setor que foi lido corresponder ao número do setor solicitado, os dados do setor serão lidos.
- os dados do setor são lidos como um fluxo de bits em série e convertidos em bytes.
- os bytes do setor são armazenados em um setor buffer (geralmente SRAM no controlador); este setor buffer é distinto do "cache de disco".
- depois de todo o setor ter sido lido, os dados são validados usando o ECC e, talvez, corrigidos.
- depois de validados, os dados do setor são transferidos do controlador para o PC host. Nota: a existência deste setor buffer não é bem conhecida, e há informações errôneas generalizadas de que a velocidade de transferência na interface host (eg ATA) está vinculada ou limitada pela taxa de bits na cabeça R / W . Isso é completamente falso, já que essas duas transferências de dados são operações independentes e sequenciais e não simultâneas.
- à medida que o PC recebe os dados do controlador de disco através da interface ATA, o PC pode usar I / O programado (a CPU lê repetidamente o registro de dados da porta ATA e copia o valor para o memória de destino) ou DMA (o controlador DMA está configurado para copiar N bytes do registro de dados da porta ATA para um buffer de memória sem mais intervenção da CPU).
- o "buffer" de memória do PC que recebe os dados pode ser o buffer do aplicativo (ao usar block I / O system call ) ou pode ser um buffer interno do sistema sob controle do sistema de arquivos ou mesmo programa ou memória de dados se os dados vierem da área de troca (ou arquivo de paginação).
Uma gravação em disco é semelhante, exceto que os dados são transferidos do PC para o controlador de disco, o ECC é calculado, o setor solicitado é localizado e, em seguida, os dados são gravados do buffer de setor para o prato.
Para crédito extra:
Leia sobre " dispersão-coleta " transferências, que usa encadeamento DMA e uma lista de coleta dispersa de endereços de memória e comprimentos de buffer . Em vez de um buffer de memória grande e contíguo, uma transferência "scatter-gather" permite que o uso de buffers de memória não contíguos seja agregado para a solicitação de E / S de disco.