Os cartões de memória USB possuem controlador e cache de disco na placa?

4

Estou ciente de que os discos rígidos possuem um controlador on-board e um cache de disco integrado.

Agora, o 'disk'-cache também existe em um pendrive (4 ou 8 GB)? Aliás, que tal uma unidade de estado sólido?

(Meu palpite é que, como uma unidade de estado sólido é mais lenta que a RAM do computador a que está conectada, ter um cache de disco on-board em um estado sólido faria sentido. Mas, como um pendrive é muito menor, tanto em capacidade de byte quanto em dimensões físicas em relação a uma unidade de estado sólido, a primeira pode não ter um cache de disco on-board.)

Contexto: estou tentando descobrir:

  1. se /bin/sync for necessário no Linux para garantir absolutamente que nenhuma perda de dados ocorra caso ocorra uma falha de energia logo após o sistema operacional informar que a operação de gravação está completa?

  2. se /bin/mount -o sync ... fosse 'efetivamente' desabilitar esse cache on-board (se é que existe)?

  3. e finalmente, como as respostas para todos os itens acima se comportariam se o sistema operacional fosse Windows em vez de Linux?

por Harry 16.09.2013 / 22:31

2 respostas

3

Sim, as unidades flash USB têm um controlador e algum cache onboard. Não há outra maneira de combinar dispositivos que operam em velocidades diferentes. Não há outra maneira de fazer coisas como nivelamento de desgaste e pipelining.

if /bin/sync would be necessary on Linux to absolutely guarantee that no data loss occurs should a power failure occur shortly after the OS has reported the write operation to be complete?

Sim, mas isso não tem nada a ver com o cache no dispositivo. Isso tem a ver com o cache de software implementado pelo sistema operacional.

if /bin/mount -o sync ... would 'effectively' disable such a on-board cache (if it at all exists)?

Não, desativa o cache do sistema operacional. Você não pode desativar o cache on-board ou o dispositivo pararia de funcionar. Onde guardaria dados que foram lidos do flash até que o sistema operacional estivesse pronto para isso? Onde guardaria os dados que o sistema operacional havia escrito até que a gravação em flash estivesse completa?

and finally, how the answers to all of the above would fare if the OS were Windows instead of Linux?

Mesma resposta. Assim como os discos rígidos, outros dispositivos que agem como discos rígidos têm controladores e caches integrados.

    
por 17.09.2013 / 00:23
3

Now, does the 'disk'-cache also exist on a (4- or 8-GB) USB stick? Incidentally, what about a solid state drive?

Não. Não. A memória flash nesses dispositivos é muito mais rápida do que os pratos rotativos com atuadores de cabeçote R / W que um cache não é econômico.
Mas a falta de um "cache" nesses dispositivos não significa que não haja buffer local.
Ainda haveria memória para armazenar em buffer os dados do setor entre a interface USB ou SATA e a memória flash.

if /bin/sync would be necessary on Linux to absolutely guarantee that no data loss occurs should a power failure occur shortly after the OS has reported the write operation to be complete?

sync é sempre necessário para garantir que o sistema operacional tenha esvaziado adequadamente todos os seus buffers para o dispositivo.
Uma write() conclusão (dependendo da sincronização especificada) pode indicar apenas que o usuário ou os dados do arquivo foram transferidos para o buffer do sistema ou que a operação de gravação foi realmente concluída. Mas além dos dados no arquivo, haveria metadados do sistema de arquivos que também precisam ser mantidos (tabelas de alocação de setor, entradas de diretório para tamanho do arquivo, hora da modificação, etc.).

Mas sync sozinho não é suficiente para garantir que todos os dados gravados tenham sido gravados pelo periférico. Um syscall relacionado a sync é syncfs , o que significa que eles são apenas para o nível do sistema de arquivos, e não para o nível do dispositivo. Existem operações de sincronização no nível do dispositivo, bem como operações de sincronização no nível do sistema de arquivos. As operações Unmount ou eject devem realizar essas confirmações finais de sincronização antes de o dispositivo ser lançado.

if /bin/mount -o sync ... would 'effectively' disable such a on-board cache (if it at all exists)?

Não, essa "sincronização" no nível de montagem não deve afetar nenhuma otimização no nível do dispositivo. Se o cache do periférico puder ser desativado, esperaria que ele fosse feito por um ioctl() que mount provavelmente não conheceria.

and finally, how the answers to all of the above would fare if the OS were Windows instead of Linux?

Nenhuma diferença significativa.

    
por 16.09.2013 / 23:04