O que são especiais de caracteres e arquivos especiais de blocos em um sistema unix?

56

Como os arquivos especiais de caracteres e arquivos especiais de blocos são diferentes dos arquivos comuns em um sistema semelhante ao Unix? Por que eles são chamados de "especial de caractere" e "especial de bloco", respectivamente?

    
por Geek 02.01.2013 / 07:22

3 respostas

75

Quando um programa lê ou grava dados de um arquivo, os pedidos vão para um driver de kernel. Se o arquivo for um arquivo normal, os dados serão manipulados por um driver de sistema de arquivos e serão normalmente armazenados em zonas em um disco ou outra mídia de armazenamento, e os dados lidos em um arquivo são os que foram gravados anteriormente naquele local. Existem outros tipos de arquivos para os quais coisas diferentes acontecem.

Quando os dados são lidos ou gravados em um arquivo de dispositivo, a solicitação é tratada pelo driver desse dispositivo. Cada arquivo de dispositivo possui um número associado que identifica o driver a ser usado. O que o dispositivo faz com os dados é da sua conta.

Os dispositivos de bloco (também chamados de arquivos especiais de bloco) geralmente se comportam muito como arquivos comuns: eles são uma matriz de bytes e o valor lido em um determinado local é o valor que foi gravado lá. Os dados do dispositivo de bloco podem ser armazenados em cache na memória e lidos de volta do cache; as gravações podem ser armazenadas em buffer. Dispositivos de bloco são normalmente procurados (ou seja, há uma noção de posição dentro do arquivo que o aplicativo pode alterar). O nome “dispositivo de bloco” vem do fato de que o hardware correspondente geralmente lê e grava um bloco inteiro de cada vez (por exemplo, um setor em um disco rígido).

Dispositivos de caracteres (também chamados de arquivos especiais de caracteres) se comportam como pipes, portas seriais, etc. Escrever ou ler para eles é uma ação imediata. O que o motorista faz com os dados é seu próprio negócio. A gravação de um byte em um dispositivo de caracteres pode fazer com que ele seja exibido na tela, gerado em uma porta serial, convertido em um som, ... Ler um byte de um dispositivo pode fazer com que a porta serial espere pela entrada, pode retornar um aleatório byte ( /dev/urandom ), ... O nome "dispositivo de caractere" vem do fato de que cada caractere é tratado individualmente.

Veja Wikipedia e Entendendo / dev e seus subdiretórios e arquivos para mais informações.

    
por 03.01.2013 / 03:23
7

Eles apontam para um driver e podem ser criados por [mknod][1] . Olhando para a sua página de manual, parece que os dispositivos de bloco são armazenados em buffer enquanto os dispositivos de caracteres estão sem buffer. Dispositivos de bloco têm um "tamanho de bloco" que indica o tamanho dos blocos que são acessíveis. (para dispositivos de armazenamento, o tamanho do bloco é tipicamente entre 512 B e 4 KiB) Dispositivos de armazenamento e memória são normalmente acessados como dispositivos de bloco, enquanto dispositivos como portas seriais e terminais são normalmente acessados como dispositivos de caracteres.

Eles são normalmente encontrados em / dev (e não podem funcionar em partições montadas com a opção nodev (ou seu equivalente))

Em ls -l , mostre dois números separados por vírgulas para dispositivos no local onde o tamanho é normalmente encontrado. Esses são os números maiores e menores, que apontam para o motorista. Seu tipo também é indicado como "c" ou "b" na coluna de permissão da saída ls -l .

/ dev pode ser preenchido de várias maneiras. Em versões recentes do kernel do Linux, o udev é normalmente usado, no Solaris que ele contém links para / devices, que é um sistema de arquivos devfs virual.

    
por 02.01.2013 / 08:07
1

Tipos de arquivos no Unix / Linux: Arquivos comuns ou regulares, diretórios, arquivos de dispositivos (especiais), links, pipes nomeados e soquetes.

Um arquivo de dispositivo (especial) é uma interface para um driver de dispositivo que aparece em um sistema de arquivos como se fosse um arquivo comum. Eles são dispositivos de caractere, dispositivos de bloqueio e pseudo-dispositivos (como /dev/null ).

Com caracteres enviará um caractere no momento, portanto, você precisará de uma pequena carga para carregar, mas terá que fazer várias solicitações. Bloqueado por bloco significa que você obtém uma grande coleção de caracteres (dados) para ter uma carga maior **, mas precisa fazer menos solicitações. Analogia: Basicamente é o mesmo que comprar refrigerante pela garrafa ou pela caixa.

O uso de blocos é útil quando você sabe quantos dados você pode esperar, o que geralmente é o caso dos arquivos no disco.

O uso de personagens é mais prático quando você não sabe quando seus dados serão interrompidos e, assim, você os mantém em exibição até que nenhum outro personagem seja exibido. Por exemplo, uma conexão com a Internet, pois você não sabe o tamanho do fluxo de dados que receberá do servidor.

Por exemplo:

  • Os drivers de dispositivo de caractere são arquivos especiais que permitem que o SO se comunique com dispositivos de entrada / saída. Exemplos: Teclado, Mouse, Monitor, placas de áudio ou gráficos e Braille.
  • Dispositivos de bloco são para comunicação com dispositivos de armazenamento e capazes de armazenar em buffer a saída e armazenar dados para recuperação posterior. Exemplos: Disco rígido, memória.

Cortesia

    
por 22.02.2017 / 01:16