Como o kernel envia solicitações de E / S para um disco rígido?

2

Supostamente, tenho um arquivo distribuído entre diferentes setores. Como exemplo, assumindo que os setores físico e lógico são 512B. Um processo do usuário emite uma solicitação para o kernel ler o arquivo. Vamos dizer que este arquivo usa 3 setores distribuídos no disco rígido.

1) O disco rígido lê todos os setores de uma vez e envia os dados completos (512 * 3) para o kernel?

* Os 3 setores são lidos na íntegra pelo disco rígido primeiro e depois os dados são transferidos para o kernel, 512 * 3 bytes são transferidos do HDD para o kernel.

2) Os HDDs lêem vários setores de uma só vez? Isso parece mais uma questão relacionada a hardware.

    
por direprobs 30.07.2017 / 22:58

1 resposta

2

Depende. Kernels modernos de sistemas operacionais parecidos com Unix tendem a ter um código bastante complexo para tornar a E / S mais rápida. O recurso mais conhecido é o armazenamento em cache: se um setor foi lido no passado, ainda pode haver uma cópia na memória, caso em que nenhuma solicitação é enviada ao disco rígido. Outros recursos típicos de aceleração incluem acesso fora de ordem (quando há muitos pedidos pendentes, o kernel pode editá-los em uma ordem diferente para minimizar buscas ou explorar melhor o paralelismo permitido pelo hardware), e pré-busca (o kernel assume que se setores de 0 a 5 de um arquivo foram lidos, então é provável que o setor 6 seja lido, para que ele leia o setor 6 no cache se não tiver nada melhor a fazer).

Se é possível emitir a solicitação para ler o setor 1 antes que a solicitação para ler o setor 0 tenha sido concluída depende dos recursos do barramento de disco e do disco. Não há resposta geral.

    
por 31.07.2017 / 01:40