Os sistemas de I/O costumam ter algum nível de complexidade, isto ainda é associado a grande diversidade de dispositivos de I/O no mercado; diversos fabricantes; diversos modelos; diversos tipos. Como o sistema operacional controla tudo isto ?
O subsistema de I/O é um módulo do sistema operacional responsável por este controle. Os principais objetivos deste subsistema são:
O subsistema de I/O é organizado (separado) em 4 camadas fundamentais, cada qual com uma funcionalidade. Cada camada “entrega” à camada superior uma abstração mais simples para acessar a camada inferior; quanto mais alta a camada mais simples ou padronizado é mecanismo de acesso (a abstração). Aqui por abstração, entende-se o nível de complexidade necessário para acessar o dispositivo.
A figura I.4 procura representar este subsistema.
Esta camada representa o hardware propriamente dito – todos os dispositivos com suas respectivas interfaces e controladoras. Neste nível, toda atividade acontece em nível de comandos eletromecânicos (no caso do HD e leitores de CD/DVD) e eletrônicos.
Cada device presente na camada de hardware possui seu conjunto próprio de operações e modo de funcionamento. Nesta camada o sistema operacional faz sua interface com o hardware, para cada hardware presente deve haver um driver fazendo a “tradução” dos comandos do sistema operacional para o hardware.
A camada 2 fornece a camada 3 uma visão uniformizada dos dispositivos presentes no computador. Aqui, fica clara a afirmação de Tanenbaum, feita na unidade A, “o sistema operacional esconde do programador o hardware … e também oculta muitas coisas desagradáveis relacionadas com interrupções, temporizadores, gerenciamento de memória e outros recursos de baixo nível”.
Device Driver
O device driver é um módulo de software fornecido pelo fabricante do dispositivo que é “anexado” ao sistema operacional e permite que estes se “conversem”. O device driver é um componente obrigatório para todos os dispositivos presentes. Nos sistemas operacionais atuais, o device driver costuma ser automaticamente carregado na instalação do dispositivo – caso isto não aconteça, o dispositivo não funcionará e será necessário fazer a instalação manualmente.
O driver é sempre dependente do sistema operacional, ou seja, um driver compilado para o sistema operacional GNU/Linux não será compatível com o sistema operacional Microsoft Windows1
A terceira camada implementa um conjunto de funções comuns a todos os dispositivos – aqui não temos mais a diversidade das camadas 1 e 2. Os principais procedimentos implementados são:
Escalonamento de I/O:
Denominação:
Bufferização:
Cache de dados:
Alocação/liberação:
Direitos de Acesso:
Tratamento de erros:
A quarta camada é a API que o programador faz uso para manipulação dos dispositivos. Aqui tem-se acesso às funções que irão controlar os dispositivos do computador.