Então, eu estou confuso sobre como exatamente nós, como programadores, conversamos com os dispositivos no computador. Agora não estou falando das grandes idéias. Eu sei que existem drivers de dispositivo que ficam no topo do hardware para que diferentes programas possam usar os recursos.
Mas, em geral, quem fala exatamente com os motoristas? O programador está escrevendo o aplicativo responsável por chamar uma função no driver? Ou o programador chama uma função através do sistema operacional que lida com a chamada para o driver?
Respostas:
Onde há um sistema operacional envolvido, os programas não falam com os drivers de dispositivo, pelo menos não diretamente. Os programas conversam com abstrações que, sem o conhecimento delas, acabam conversando com os drivers de dispositivo por meio de uma ou mais camadas de abstração.
Vou pular as complexidades dos sistemas operacionais modernos e usar o CP / M , um sistema operacional de microcomputador desenvolvido 45 anos atrás, como exemplo. CP / M foi um bolo de camadas com três camadas:
Programa. A camada superior é um programa que faz algo útil (processamento de texto, reprodução de Space Invaders) fazendo cálculos e E / S. Digamos que em algum momento o programa queira exibir a letra 'A' para o usuário ver. O CP / M fornece uma abstração conhecida como console , que é onde o usuário que interage com o programa deve procurar. A maneira convencional de enviar um personagem é com algumas instruções de montagem:
(Se você não estiver familiarizado com eles, os registradores podem ser considerados variáveis que vivem no processador.) Vamos ver quais são os números mágicos
2
e5
tudo sobre isso em um minuto. O ponto principal aqui é que tudo o que o programa sabe é que há um console e há uma maneira de escrever nele. Não sabe nem se importa com nada além disso. Essa é a primeira de duas abstrações que o CP / M usa para E / S.BDOS . O endereço
5
chamado pelo programa é o ponto de entrada para a próxima camada, o Sistema operacional de disco básico ou BDOS . O BDOS fornece uma série de funções numeradas que são como ordenar por número em um menu de restaurante. Você diz que deseja saída do console carregando oC
registro com o número da função (2
para saída do console) e oE
registro com o caractere a ser enviado. A saída do console é uma operação muito simples, e o BDOS realmente não tem muito a ver com isso, a não ser chamar a próxima camada.BIOS. O BIOS, ou sistema básico de entrada / saída, é a camada em que vive todo o código específico de hardware. Nos sistemas modernos, isso seria considerado um conjunto de drivers de dispositivo. Como o BDOS, o BIOS fornece chamadas para um conjunto padrão de operações muito primitivas que o BDOS usa para fazer seus negócios. Uma dessas operações é chamada
CONOUT
, que cuida da obtenção do caractere que o programa solicitou para escrever duas camadas acima através de qualquer hardware que o faça. (Diferentemente dos PCs, as coisas não eram homogêneas naquela época. Todo mundo tinha maneiras diferentes de fazer isso acontecer.) A saída do console é uma passagem simples para o BDOS, mas fazer algo mais complexo como criar um arquivo em um disco pode exigir muitos Chamadas do BIOS para manipular a mídia. Novamente, como o BIOS possui uma interface abstrata padrão, o BDOS sempre sabe como obter o que deseja e não se importa com o que o BIOS faz.Você provavelmente está se perguntando por que existem duas abstrações (programa para BDOS e BDOS para BIOS) em vez de apenas uma. A resposta é que o CP / M e seu BDOS podem ser fornecidos em formato binário aos fabricantes de computadores, eles escrevem um BIOS personalizado com drivers de dispositivo para o hardware, prendem os dois juntos e o enviam como sistema operacional para seus sistemas. Isso foi muito importante porque o BDOS foi mantido por uma organização e, portanto, sempre foi uma quantidade conhecida para os programas do usuário, possibilitando a execução dos mesmos aplicativos em uma variedade muito ampla (para a época) de hardware. É por isso que os sistemas operacionais existem e não apenas escrevemos programas que modificam o hardware diretamente .
Tudo o que descrevi aqui também se aplica aos sistemas operacionais modernos. O Unix, por exemplo, abstrai tudo como arquivos. Dá programas do mesmo conjunto de chamadas de sistema (
open()
,write()
,close()
, etc.) para comunicar quer se trate de uma unidade de disco ou porta serial. O conjunto de decisões e abstrações é muito mais complexo, mas ainda se resume a escolher qual código de driver de dispositivo na camada inferior precisa ser executado para que a operação aconteça.fonte
call 5
aqui. Nãorst 8
teria sido muito mais eficaz (sacrificaria 3 bytes de memória no endereço de destino, mas salvaria 2 toda vez que for chamado ...)?RST
) no barramento de dados. Não posso ter certeza, mas pode ter sido que não havia slots suficientes para cobrir as necessidades de todos os dispositivos e DDT (que os usavam para fazer com que os pontos de interrupção acontecessem) e usar um para entrar no BDOS .Existem várias possibilidades diferentes:
fonte