Gerenciador de dispositivos no sistema MINIX
Uma das funções principais de um sistema operacional é controlar todos os dispositivos de entrada e saída de um computador, tratar erros, interceptar interrupções, fornecer uma interface entre o dispositivo e o sistema, emitir comandos para os dispositivos.
Módulos de entrada e saída
Um módulo de entrada e saída é a entidade dentro de um computador responsável pelo controle de um ou mais dispositivos externos e pela transferência de dados entre aqueles dispositivos e a memória principal e os registos da CPU. Assim, o módulo de E/S tem de ter uma interface interno ao computador (da CPU e a memória principal) e uma interface externa para o computador (ao dispositivo externo). As categorias principais de funções ou requisitos para um módulo de E/S caem dentro das seguintes:
Temporização e controle
Comunicação com o processador
Comunicação com dispositivos
Armazenamento temporário dos dados
Detecção de erros.
Durante qualquer período de tempo, a CPU pode comunicar com um ou mais dispositivos externos de forma imprevisível, dependendo das necessidades de E/S. Os recursos internos, tais como, a memória principal e o barramento de sistema, têm de ser partilhados entre um certo número de atividade incluindo o processamento de informação de E/S. Assim, a função de E/S inclui um requisito de temporização e controle, para controlar o fluxo de tráfego entre os recursos internos e os dispositivos externos.
A comunicação com a CPU envolve:
Descodificação de Comandos: O módulo de E/S aceita comandos da CPU. Estes comandos são geralmente enviados como sinais no barramento de controle.
Dados: Os dados são trocados entre a CPU e o módulo de E/S através do barramento de dados.
Relato de status: Uma vez que os periféricos são lentos, é importante saber o estado do módulo de E/S.
Detecção de Erros: Cada dispositivo de E/S possui um endereço, tal como acontece com cada palavra na memória. Assim, um módulo de E/S tem de reconhecer um único endereço para cada periférico sobre o seu controlo. Numa outra perspectiva, o módulo de E/S tem de ser capaz de efetuar comunicação com o dispositivo. Esta comunicação envolve comandos.
Dispositivos de E/S
Os dispositivos de E/S podem ser divididos, genericamente, em duas categorias: dispositivos de bloco e dispositivos de caractere.
Dispositivos de Bloco
Dispositivos de blocos, são todos os dispositivos que podem enviar/transmitir dados em blocos de tamanho fixo.
Um exemplo de dispositivo de bloco, é o HD.
Dipositivos de caractere
O dispositivo de caractere não utiliza estrutura de blocos nem posicionamento. No dispositivo de caractere ele recebe um fluxo de caracteres, além de não ser endereçável.
Controladoras de Dispositivo
As unidades de E/S geralmente consistem em um componente mecânico e em outro eletrônico. É possível separar as duas partes para oferecer um projeto mais modular e genérico. Em computadores pessoais, esse frequentemente toma a forma de uma placa de circuito impresso.
O trabalho da controladora é converter o fluxo serial de bits em um bloco de bytes e executar qualquer correção de erro necessária. O bloco de bytes tipicamente é primeiro montado, bit por bit, em um buffer dentro da controladora. Depois que sua soma de verificação foi verificada e o bloco foi declarado livre de erros, ele pode, então, ser copiado para a memoria principal. Cada controladora tem alguns registradores que são utilizados para comunicar-se com a cpu. Em alguns computadores, esses registradores são parte do espaço normal de endereçamento de memoria. Esse esquema é chamado E/S mapeada em memoria.
Acesso direto a memoria (DMA)
Não importa se a CPU tem ou não E/S mapeada na memoria, ela precisa endereçar os controladores dos dispositivos para poder trocar dados com eles. A CPU pode requisitar dados de um controlador de E/S, um byte de cada vez, mas desperdiça muito tempo, de modo que um esquema diferente (DMA) seja usado.
O controlador de DMA tem acesso ao barramento do sistema. Eles contem vários registradores que podem ser lidos ou escritos na CPU, os quais possuem registrador de endereço de memoria, registrador de controle e registrador de contador de bytes.
O controlador lê um bloco do dispositivo, bit a bit, até que todo bloco esteja no buffer do controlador. Em seguida, ele calcula a soma de verificação, para constatar de que não houve algum erro de leitura. Então, o controlador causa uma interrupção. Quando o S.O inicia o atendimento, ele pode ler o bloco do disco a partir do buffer do controlador. Um bloco de byte ou uma palavra é lida no registrador do controlador e armazenada na memoria principal.
Software de entrada e saída
Um conceito-chave no projeto de software de E/S é conhecido como independência de dispositivo. Isso significa que deve ser possível escrever programas que podem ler arquivos em um disquete, em um disco rígido ou em um CDROM, sem que seja necessário modificar os programas para cada tipo de dispositivo diferente. Outra questão importante para o software de E/S é o tratamento de erros. Em geral devem ser tratados o mais perto possível do hardware. Se a controladora descobrir um erro de leitura, ela devera tentar corrigir o erro se puder. Se não puder, então o driver de dispositivo devera tratá-lo, talvez tentando simplesmente ler o bloco novamente.
Manipuladores de interrupções
Interrupções é uma realidade desagradável. Elas devem ser escondidas longe, no fundo das entranhas do sistema operacional, de modo que o mínimo possível do sistema saiba sobre elas. A melhor maneira de oculta-las é ter cada processo que inicia uma operação de E/S bloqueado ate que a E/S tenha-se completado e a interrupção tenha ocorrido. O processo pode bloquear-se fazendo um dowx em um semáforo. Um wait em uma variável de condição ou um receive em uma mensagem, por exemplo. Quando as interrupções acontecem, o procedimento de interrupção faz o que tem de fazer para desbloquear o processo que iniciou a E/S em alguns sistemas, ele fara um UP em um semáforo. Em outros, ele fara um sinal em uma variável de condição em um monitor. Em outros, ainda, ele enviara uma mensagem para o processo bloqueando. Em todos casos, o efeito geral da interrupção será que um processo que anteriormente estava bloqueado agora será capaz de executar.
Impasses
Os sistemas de computador estão repletos de recursos que podem ser utilizados apenas por um processo por vez. Ter dois processos simultaneamente gravando na impressora resulta em uma confusão. Portanto, todos os sistemas operacionais têm a capacidade de temporariamente conceder acesso exclusivo a certo recursos para um processo.
Recursos
dispositivos, a arquivos, etc. Os recursos dividem-se em dois tipos: preemptivel e não preempetivel. Um recurso preempetivel é aquele que pode ser tirado do processo que é proprietário dele sem nenhum problema. A memoria é um exemplo de um recurso preemptivel.
Entrada e saida minix
No Minix, drivers de entrada e saída são feitos com passagem de mensagens, de forma que rodem em modo usuário e se comuniquem com o kernel. Isso garante que um driver tenha limites quanto ao que pode fazer e aumente a estabilidade do sistema.