Dispositivos de caracteres para discos no Linux

Dispositivos de caracteres para discos no Linux

Por que outros sistemas UNIX precisam de dispositivos de caracteres para dispositivos de armazenamento e o Linux não?

Outros sistemas operacionais UNIX (AIX, HPUX, Solaris e macOS) usam algo como '/dev/rdisk#' e '/dev/disk#' para dispositivos de armazenamento.

Responder1

Eu acho que este artigo da Wikipediahttps://en.wikipedia.org/wiki/Raw_deviceexplica muito bem:

Na computação, especificamente em sistemas operacionais Unix e semelhantes a Unix, um dispositivo bruto é um tipo especial de dispositivo lógico associado a um arquivo de dispositivo de caracteres que permite que um dispositivo de armazenamento, como uma unidade de disco rígido, seja acessado diretamente, ignorando os caches do sistema operacional. e buffers (embora os caches de hardware ainda possam ser usados). Aplicativos como um sistema de gerenciamento de banco de dados podem usar dispositivos brutos diretamente, permitindo-lhes gerenciar como os dados são armazenados em cache, em vez de adiar essa tarefa para o sistema operacional.

No FreeBSD, todos os arquivos de dispositivos são, na verdade, dispositivos brutos. O suporte para dispositivos não brutos foi removido no FreeBSD 4.0 para simplificar o gerenciamento de buffer e aumentar a escalabilidade e o desempenho.1

No kernel Linux, os dispositivos brutos foram descontinuados e agendados para remoção em um ponto, porque o sinalizador O_DIRECT pode ser usado em seu lugar.

Responder2

A razão pela qual alguém pode querer usar a interface bruta quando a interface do dispositivo de bloco é que a interface bruta geralmente é mais rápida. O sistema operacional executa cache de buffer somente para arquivos especiais de bloco.

Quando um arquivo muito grande é lido ou gravado em uma mídia como uma fita magnética, o armazenamento em cache do buffer pelo sistema operacional não oferece nenhum benefício porque nenhum bloco será lido mais de uma vez. Usar a interface bruta do dispositivo evita esse excesso de atividade do sistema.

Outra razão para usar a interface de dispositivo bruto ao processar arquivos de fluxo muito grandes em mídia magnética é que a interface bruta pode suportar tamanhos de bloco muito grandes, permitindo a obtenção de taxas de transferência de dados muito altas. Quando um dispositivo é acessado com a interface de dispositivo de bloco, todas as leituras e gravações devem passar pelos buffers do sistema e, portanto, são limitadas ao tamanho do bloco do sistema de arquivos (normalmente 1K ou 2K bytes). Ao usar o dispositivo bruto, podem ser usados ​​tamanhos de bloco de 32K ou maiores. --John J. Vale,Referência do programador UNIX; Edição de 1991.

Além dos ganhos de desempenho, havia (há?) um requisito de que os sistemas de arquivos acessados ​​através da interface de bloco fossem desmontados por razões de consistência do cache. Os blocos armazenados em cache pelo sistema podem atrapalhar as alterações feitas por meio do dispositivo de bloco quando elas são gravadas de volta no disco. Desmontar antes do fschk é um pequeno aborrecimento; se o aplicativo que precisa de acesso direto for o uso principal do sistema, será muito pior.

Em resposta à sua pergunta original, muitas das questões são em grande parte históricas. É incomum em sistemas contemporâneos que os buffers do dispositivo sejam maiores que os buffers do sistema. (Quando foi a última vez que você usou uma estação de trabalho conectada a uma impressora de alta velocidade com um buffer maior que a memória da estação de trabalho?)

informação relacionada