Gerência de Entrada e saída no Linux

No Linux, todos os dispositivos são tratados como se fossem um arquivo. Ao enviar ou ler os dados para esse arquivo, a comunicação e os bytes, são repassados imediatamente ao driver do dispositivo. Ao passo que, em outros SOs, tais como o Windows, a representação dos dispositivos de armazenamento é feita por letras de unidades de disco e a localização dos demais dispositivos e forma como eles são controlados pelo sistema é ocultado, no SO Linux, todos os dispositivos têm uma correspondência no diretório /dev exceto as interfaces de rede, que são de fato arquivos.

Enviar alguns bytes para um desses arquivos do /dev fará com que esses bytes sejam enviados para o dispositivo. Quem provê essa funcionalidade é, em parte, o SO e o seu driver de dispositivo. O SO descobre qual driver controla determinado dispositivo, pois a instalação do driver cria uma representação com números de identificação do dispositivo sob a forma de arquivo para cada dispositivo, e esses números são utilizados como a identidade virtual do hardware. Junto com o tipo de dispositivo o SO é capaz de identificar qual driver está controlando o dispositivo e faz a ligação entre os dois.

O papel de um módulo (driver) é estender a funcionalidade do kernel. Ainda mais, o papel do dispositivo driver é prover mecanismos, e não a política. Por exemplo, o driver de floppy é livre de políticas: seu papel é apenas mostrar o disquete como um contínuo array de blocos de dados. Níveis mais altos provêem as políticas, tais como quem pode acessar o driver de floppy, se o driver é acessado diretamente ou via um filesystem e se os usuários podem montar o filesystem no driver. Um driver é flexível, oferecendo acesso ao hardware sem adicionar restrições.

Um módulo (driver) no Linux é executado no espaço do kernel enquanto que os aplicativos são executados no espaço do usuário. No Linux, o kernel é executado no mais alto nível, chamado de modo supervisor, onde tudo é permitido. Os aplicativos são executadas em um nível mais baixo, chamado modo usuário, onde o processador controla o acesso direto ao hardware e o acesso não autorizado à memória.

Uma das boas características do Linux é a habilidade de oferecer um conjunto de facilidades oferecido pelo kernel, como a possibilidade de adicionar código ao kernel em tempo de execução por meio dos módulos.

O Linux prevê três tipos de dispositivos fundamentais: charmodule, blockmodule e networkmodule, mas existem ainda outros tipos de módulos drivers. Cada dispositivo USB é controlado por um módulo USB que trabalha com o subsistema USB, porém o próprio dispositivo é usado no sistema como um char device (se for uma porta serial USB), um blockdevice (se for um leitor de cartão de memória USB) ou um networkdevice (se for uma interface USB Ethernet ou Wireless).

Os arquivos de dispositivos se referem aos dispositivos (físicos ou virtuais) do sistema, como o disco rígido, a placa de vídeo, o monitor, ou teclado. Um exemplo de dispositivo virtual é o teclado, representado pelo /dev/console.

Um arquivo de dispositivo está associado com um dispositivo de hardware, como por exemplo, um HD com o /dev/sda ou com uma partição do disco, como por exemplo, /dev/sda2. É importante distinguir os arquivos de dispositivos dos arquivos de drivers. Os arquivos de dispositivos são simplesmente pontos de encontro usados para comunicação do SO com os drivers. Eles não são os drivers em si. Um driver de dispositivo, também chamado de módulo de dispositivo, cuida dos detalhes específicos de gerenciamento direto do dispositivo de hardware. A Figura 83 apresenta um exemplo dos arquivos de dispositivos, obtido a partir de uma listagem dos dispositivos com o comando ls –l/dev 


Os arquivos de dispositivo vêm com duas identificações básicas:

a) O tipo do arquivo de dispositivo: se é de bloco (HD ou CD-ROM), de caracter (para hardware do tipo placas de som, teclado e mouse) ou interface de rede (eth0);

b) Um par de números: o principal e o secundário (“major number” e “minornumber“). O primeiro identifica o tipo do dispositivo e o segundo número identifica o dispositivo específico dentre um grupo de dispositivos que compartilham o mesmo número principal e o mesmo controlado. Por exemplo, os discos gerenciados pelo mesmo controlador de disco têm o mesmo número principal e diferentes números secundários. Os dispositivos do tipo bloco e do tipo char têm numerações independentes, de modo que o dispositivo de bloco (3,0) é diferente do dispositivo char (3,0).

Os arquivos de dispositivos em /dev possuem essas identificações. Estes números de dispositivo principal e secundário identificam o dispositivo para o kernel, onde este utiliza esses números para associar referências do arquivo de dispositivo ao driver correspondente. O número de dispositivo principal identifica o driver com o qual o arquivo está associado (ou seja, o tipo de dispositivo). O número de dispositivo secundário identifica qual a instância em particular de um dado tipo de dispositivo deve ser tratada.

O núcleo (kernel) do Linux contém drivers de dispositivos que gerenciam a interação com os dispositivos e o kernel é independente dos dispositivos. A existência de uma camada de driver ajuda a manter o Linux independente dos dispositivos.

Os drivers de dispositivos fazem parte do kernel e, portanto, não são processos de usuários, porém um driver pode ser acessado tanto pelo kernel quanto pelo processo do usuário, por meio de arquivos de dispositivos especiais que residem no diretório /dev. O kernel transforma operações nesses arquivos em chamadas para o código do driver. Somente drivers de dispositivos para uso com Linux podem ser instalados em um sistema Linux. Os drivers para outros SOs, como Windows, por exemplo, não funcionarão no Linux. 

ATIVIDADE DE FIXAÇÃO (TURMA 01)

ATIVIDADE DE FIXAÇÃO (TURMA 02)

Comentários

Postagens mais visitadas deste blog

Transferência de arquivo por FTP

TIPOS DE PROCESSOS

Tipos de Servidores