Como os computadores sabem as capacidades dos drives conectados a eles?

3

Conectando minha unidade USB de 32 GB no meu computador, como o computador sabe que é uma unidade de 32 GB? Onde essas informações são armazenadas e como são recuperadas?

    
por VortixDev 10.05.2018 / 00:52

3 respostas

4

How do computers know the capacities of drives connected to them?

Primeiros discos rígidos de PC (por exemplo, ST506, MFM, RLL) exigiam parâmetros fornecidos pelo usuário para a geometria do inversor (ou seja, número de setores por trilha, número de cabeças R / W e número de cilindros) para CHS abordando . É claro que os PCs (IBM) assumiram / definiram um tamanho de setor de 512 bytes.
Estes parâmetros foram tipicamente armazenados no BIOS do PC.

As unidades IDE introduziram o conjunto de comandos ATA, que incluía um comando Identify Device (usando o código de comando 0xEC), que informava a geometria da unidade e outras informações.
Pela versão 3 do ATAPI, a resposta a esse comando incluía o total number of user addressable sectors . (Eu não tenho nenhuma versão anterior da especificação ATAPI, então não tenho certeza exatamente o que estava na resposta pré-ATA-3.)
Usando o número total de setores e o tamanho do setor, a capacidade total do disco é facilmente calculada.
Como as versões modernas do ATA (por exemplo, unidades SATA com gravação de bit de zona) não suportam mais o endereçamento CHS, a geometria do inversor é irrelevante (e nem mesmo constante devido a gravação de bit de zona ).

As unidades flash USB simplesmente usam o USB como um protocolo de transporte e implementam o conjunto de comandos ATA exatamente como o HDDS e os SSDs. Assim, a capacidade de unidades flash USB (e HDDs / SSDs SATA) pode ser obtida facilmente, interrogando a unidade usando o comando ATA Identify Device .

Os cartões SD possuem um protocolo de comando proprietário para uso em sua interface. A capacidade do cartão, os recursos de velocidade e outras informações são relatados como uma resposta em sua linha de comando (e não através da interface de dados do cartão).

Os sistemas operacionais fornecem principalmente acesso de usuários a dispositivos de armazenamento em massa, como HDDs e SSDs, como sistemas de arquivos. Por convenções de PC, a unidade deve ser particionada e um sistema de arquivos deve existir em uma partição da unidade. Observe que os disquetes e, opcionalmente, as unidades flash USB não são particionados.
Os parâmetros salientes do conversor (isto é, o endereço inicial e final do setor / endereços LBA) das partições são recuperados da tabela de partições (localizada no (s) setor (es) MBR ou GPT).

    
por 10.05.2018 / 10:22
2

O SO é mais ou menos totalmente dependente da unidade para comunicar a capacidade da unidade.

Este fato é aproveitado ...

  • para bons propósitos nas SSDs mais comuns, em que partes significativas do espaço de armazenamento são retidas para armazenamento em cache e como armazenamento reserva para quando a unidade começa a envelhecer

  • e para propósitos ruins quando drives USB baratos afirmam que eles são muito maiores do que realmente são, até mesmo enganando o sistema operacional para escrever mais dados do que eles são capazes de reter

Unidades de todos os tipos contêm pequenas quantidades de memória não volátil que contém esta informação e que reporta ao SO na conexão.

    
por 10.05.2018 / 01:13
2

Os PCs não controlam a unidade diretamente, eles emitem comandos para um adaptador host ou controlador em um barramento. Para unidades modernas (desde pelo menos o final dos anos 80 / início dos anos 90), o adaptador / controlador encaminha esses comandos para uma CPU no disco que executa o firmware. Os barramentos padronizados e seus esquemas de comando correspondentes incluem ATA, AHCI, SCSI, SAS.

Parâmetros específicos para o inversor, como capacidade, fazem parte ou são detectáveis por esse firmware, e comandos específicos fazem o firmware retornar essa informação em vez de fazer uma leitura / gravação de dados.

Por exemplo: O padrão ATA-1 (muito antigo) descreve o comando "Identificar unidade", que retorna os valores de CHS da unidade, a partir dos quais a capacidade pode ser determinada. Então, esse seria o primeiro comando que um sistema operacional envia para a unidade antes de realizar qualquer operação de leitura / gravação.

Eu não acho que drives antes do ATA, como unidades MFM ou RLL, tivessem firmware inteligente (diferente de formatação) - para esses primeiros sistemas dos anos 80 você tinha que conhecer o "Drive Type" - que era apenas um conhecido capacidade ou defina diretamente uma capacidade personalizada no BIOS.

Com USB, é o mesmo princípio - existem comandos enviados por USB que falam com um controlador que obtém informações em vez de ler / gravar dados.

    
por 10.05.2018 / 04:47