Tentando entender como funcionam os drivers de dispositivos

3

Estou tentando entender como funcionam os drivers de dispositivos, com base no que sei até o momento, que um driver de dispositivo é simplesmente um "intermediário" entre o sistema operacional e o dispositivo. Eu criei o diagrama a seguir para mostrar meu entendimento sobre os drivers de dispositivos:

Alémdisso,umaplicativonãopodeinteragirdiretamentecomumdriverdedispositivo,apenasosistemaoperacionalpodefazerisso(porexemplo,seumaplicativodesejaimprimiralgo,ele"informa" o sistema operacional e o sistema operacional informa ao dispositivo Driver).

O meu entendimento está correto? E o conceito de drivers de dispositivos é o mesmo no Windows e no MacOS do que no Linux?

    
por Joseph 12.05.2017 / 20:58

2 respostas

3

Muito brevemente:

O mais importante sobre um driver de dispositivo é que ele é executado no espaço do kernel, com as mesmas permissões que o kernel e, portanto, pode acessar o hardware diretamente. As aplicações não são (geralmente) permitidas para fazer isso.

Então, você pode pensar em drivers de dispositivo como partes do kernel que organizam o acesso a determinado hardware (o "dispositivo").

Um aplicativo pode interagir com o kernel em vários níveis: de abstrações mais altas (por exemplo, um sistema de arquivos) a abstrações medianas (um dispositivo de bloco) a abstrações de nível realmente baixo (alguns arquivos em /proc/ ou /sys , alguns ioctls em dispositivos em /dev ). Portanto, as interações de baixo nível às vezes estarão falando diretamente com um driver de dispositivo. Há apenas uma camada muito fina em que o kernel redireciona a chamada para o driver de dispositivo. Portanto, "um aplicativo não pode interagir diretamente com um driver de dispositivo, apenas o sistema operacional pode fazer isso" é uma espécie de verdadeiro e também um pouco falso.

Além disso, há muitas camadas de abstração no kernel, como a que você descreve na imagem ("as mensagens que o SO envia são as mesmas, o driver de dispositivo usa mensagens diferentes para falar com o hardware). Por exemplo, o bloco camada recebe um tipo de mensagens, mas passa-os para diferentes dispositivos de bloco.A camada USB recebe um tipo de mensagens, mas pode usar diferentes controladores de host USB.E assim por diante.

Portanto, a imagem é muito mais difícil, existem camadas e subsistemas no kernel, e os drivers de dispositivos que realmente falam com o hardware estão na parte inferior dessa hierarquia. Para confundir mais as coisas, os drivers de dispositivo e outras camadas vêm na forma de módulos (para Linux). Se você digitar lsmod , poderá ver quais módulos estão ativos e qual módulo usa quais outros módulos.

Além disso, a impressão é um exemplo muito ruim; a maior parte do processamento específico da impressora acontece no espaço do usuário e não em um driver de dispositivo.

Todo o Windows, Linux e MacOS seguem esses princípios, mas os detalhes são muito diferentes.

Isso ajuda?

Editar :

A impressão no Linux geralmente é feita com xícaras . Cups tem uma coleção de programas que podem renderizar documentos para várias impressoras. Todos esses programas pegam um arquivo (o documento como pdf / postscript / ...) e o convertem em outro arquivo em um formato que a impressora entenda. Tudo isso acontece fora do kernel, porque nada disso precisa acessar o hardware real. Apenas lê e grava arquivos. Somente a última parte, quando os dados convertidos são enviados para a impressora, usa o kernel. E então ele pode usar vários caminhos, até mesmo para o mesmo tipo de impressora: via rede, via USB, via conexão serial, etc. E essa última parte geralmente não é específica da impressora.

O Linux não tem drivers de dispositivos específicos para a impressora para a grande maioria das impressoras. (Para algumas impressoras, você pode precisar de uma).

    
por 15.05.2017 / 21:53
0

a Device Driver is simply a "middle-man" between the Operating System and the Device.

Sim, é mais ou menos isso.

Os drivers de dispositivo são "caixas pretas" que traduzem chamadas de programação padronizadas para operações específicas do dispositivo do componente de hardware.

Desta forma, um programa não precisa conhecer o funcionamento interno de uma peça específica de hardware; é o driver de dispositivo específico que fará o mapeamento de maneira transparente, permitindo que o programa "fale" com o hardware.

Eles são construídos separadamente do kernel e ativados (como módulos carregados no kernel) quando necessário.

    
por 16.05.2017 / 12:54