A Entrada/Saída (E/S) é a maneira como os computadores interagem com o mundo externo, seja recebendo dados de um mouse ou enviando informações para uma impressora. Para que isso funcione, há uma colaboração entre dispositivos de E/S, controladores de dispositivos, E/S mapeada na memória, Acesso Direto à Memória (DMA) e interrupções.
Os dispositivos de E/S podem ser broadly categorized by how they handle data:
Dispositivos de Blocos: Estes dispositivos armazenam informações em unidades de tamanho fixo, chamadas blocos, cada um com seu próprio endereço. Pense em um disco rígido (HDD), SSD, CD-ROM ou pen drive. Você pode ler ou escrever um bloco independentemente dos outros. O tamanho dos blocos pode variar de 512 bytes a 65.536 bytes. A principal característica é a endereçabilidade e a capacidade de buscar e acessar qualquer bloco diretamente.
Dispositivos de Caracteres: Diferente dos dispositivos de bloco, estes enviam ou recebem um fluxo contínuo de caracteres, sem uma estrutura de blocos definida. Eles não são endereçáveis e não permitem operações de busca ou posicionamento. Exemplos incluem mouses, teclados, impressoras e interfaces de rede.
Que Não se Enquadram: Alguns dispositivos não se encaixam perfeitamente nessas categorias. Um bom exemplo é o relógio do sistema, que apenas gera interrupções em intervalos regulares, sem armazenar ou transmitir dados.
Todo dispositivo de E/S tem um componente mecânico (a parte física que você pode ver) e um componente eletrônico, conhecido como controlador do dispositivo ou adaptador. Geralmente, ele é uma placa de circuito que se conecta a um barramento no computador (como o PCI).
A função principal do controlador é atuar como um intermediário entre o dispositivo e o restante do sistema. Ele converte os sinais de baixo nível do dispositivo (como um fluxo serial de bits de um disco) em blocos de bytes que podem ser entendidos pelo computador. Além disso, muitos controladores realizam correção de erros (usando ECC – Error-Correcting Code) e preparam os dados para serem copiados para a memória principal.
Por exemplo, um controlador de disco lida com o complexo processo de ler bits do disco, montar setores e realizar verificações de erro. Já um controlador de monitor de vídeo de Tubo de Raios Catódicos (CRT) ou LCD, converte bytes da memória em sinais que controlam a exibição dos pixels na tela. A existência do controlador simplifica a vida do sistema operacional, que não precisa lidar com os detalhes de baixo nível do hardware.
Os controladores de dispositivos possuem registradores e, muitas vezes, buffers de dados (como a RAM de vídeo) que a CPU precisa acessar para controlar o dispositivo ou trocar dados. Existem duas formas principais da CPU se comunicar com esses registradores e buffers:
Portas de E/S: Nesse método, cada registrador de controle tem um número de porta de E/S único. A CPU usa instruções especiais de E/S (como IN
e OUT
) para acessar essas portas, e apenas o sistema operacional tem permissão para usar essas instruções.
E/S Mapeada na Memória: Esta técnica trata os registradores de controle e os buffers de dados dos dispositivos como se fossem posições na memória RAM. Cada registrador recebe um endereço de memória exclusivo que não é usado pela RAM comum. Isso significa que a CPU pode usar as mesmas instruções que usa para acessar a memória para interagir com os dispositivos, simplificando a programação e eliminando a necessidade de instruções especiais de E/S.
Existe também um Esquema Híbrido, como o usado nos processadores Pentium, onde os buffers de dados são mapeados na memória, mas os registradores de controle são acessados via portas de E/S.
Tradicionalmente, a CPU é responsável por mover dados entre os dispositivos de E/S e a memória principal, byte por byte. Isso pode ser muito ineficiente, especialmente para grandes transferências de dados. É aqui que o Acesso Direto à Memória (DMA) entra em cena.
O DMA permite que um controlador de DMA (DMAC) transfira dados diretamente entre a memória e os dispositivos, sem a intervenção constante da CPU. Isso libera a CPU para executar outras tarefas importantes.
Como funciona o DMA:
Existem dois modos principais de operação para DMA:
Quando um dispositivo de E/S termina uma tarefa (por exemplo, um disco termina de ler um bloco de dados), ele precisa avisar a CPU. Ele faz isso gerando uma interrupção.
Um chip controlador de interrupção detecta esses sinais. Se não houver outras interrupções pendentes de maior prioridade, o controlador de interrupção envia um número para a CPU (conhecido como vetor de interrupção). A CPU usa esse número como um índice em uma tabela (vetor de interrupção) para encontrar e executar o procedimento de serviço de interrupção correspondente. Este procedimento é uma pequena rotina de software que lida com o evento que causou a interrupção (por exemplo, transferir os dados lidos do disco para a memória).
As interrupções podem ser de dois tipos:
Interrupção Precisa: Uma interrupção que deixa o sistema em um estado bem definido. Isso significa que:
Interrupção Imprecisa: Uma interrupção que não atende aos requisitos de uma interrupção precisa. Isso torna a vida do sistema operacional muito mais difícil, pois ele precisa investigar o estado da máquina para determinar o que aconteceu e o que ainda precisa ser feito. Embora possa permitir maior otimização do hardware, aumenta a complexidade do sistema operacional.
Compreender esses princípios é fundamental para entender como os sistemas operacionais gerenciam e interagem com os diversos componentes de hardware de um computador.