Quando ocorre uma leitura de disco ou gravação de disco, para onde vão os dados?

7

Eu entendo que existe algo como um controlador de disco que contém um buffer, mas queria saber se a CPU lê diretamente desse buffer, ou se os dados devem primeiro ir para um local específico na memória, e então se permitir ser lido pela CPU?

Alguém também sabe como o buffer é chamado? E como o DMA se encaixa em tudo isso?

    
por Kaitlyn Mcmordie 26.10.2011 / 02:45

2 respostas

16

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.

    
por 26.10.2011 / 04:02
2

Ele entra em uma área de memória específica em que o kernel alocou o driver do disco. Eu não acho que seja especificamente chamado. Esta área de memória é geralmente configurada como um buffer de anel . Dependendo do sistema operacional, essa memória pode ser copiada uma segunda vez no espaço do usuário para o aplicativo usar.

DMA é "acesso direto à memória", o que significa que o controlador da unidade de disco pode gravar diretamente na RAM sem ter o A CPU repetidamente pergunta se há mais dados disponíveis (conhecidos como polling - o modo como as coisas são usadas ). Em vez disso, quando todo o buffer foi transferido, o controlador interrompe a CPU para informar que os dados estão disponíveis.

Se você está curioso sobre um nível ainda mais baixo, o motorista faz as chamadas ioctl .

    
por 26.10.2011 / 03:43