Currículo
Curso: Entrada/Saída
Iniciar sessão
Text lesson

1 – Princípios de Hardware


Princípios do Hardware de E/S: Uma Visão Geral

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.


1. Dispositivos de E/S: Blocos, Caracteres e Exceçõ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.


2. Controladores de Dispositivos: A Ponte Eletrônica

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.


3. E/S Mapeada na Memória: Acesso Simplificado

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:

  1. 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.

  2. 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.

    • Vantagens: Simplifica a programação de drivers (podem ser escritos em linguagens de alto nível como C), pois os registradores são tratados como variáveis de memória. Além disso, pode ser mais eficiente por evitar o overhead de instruções especiais de E/S.
    • Desvantagens: É crucial garantir que os endereços de E/S não entrem em conflito com a memória RAM. O hardware para a lógica de endereçamento pode ser mais complexo.

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.


4. Acesso Direto à Memória (DMA): Libertando a CPU

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:

  1. A CPU programa o controlador DMA, informando-o sobre a quantidade de dados, o endereço de memória de destino/origem, e o dispositivo de E/S envolvido.
  2. O DMAC instrui o controlador do dispositivo a ler (ou escrever) os dados para (ou do) seu buffer interno.
  3. Quando os dados estão prontos, o DMAC assume o controle do barramento do sistema e inicia a transferência dos dados, palavra por palavra ou em blocos, entre o dispositivo e a memória principal.
  4. Após a conclusão da transferência, o DMAC interrompe a CPU para informá-la de que o processo foi finalizado.

Existem dois modos principais de operação para DMA:

  • Modo Palavra por Vez (Roubo de Ciclo): O DMAC solicita e obtém o barramento para transferir uma palavra por vez. Isso causa pequenos atrasos na CPU, mas não a monopoliza.
  • Modo Bloco (Burst Mode): O DMAC assume o controle do barramento e transfere uma sequência de palavras de uma vez. É mais eficiente para grandes transferências, mas pode “prender” o barramento, impedindo que a CPU e outros dispositivos o usem por um tempo.

5. Interrupções Revisitadas: O Sinal de “Terminei!”

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:

    • O Contador de Programa (PC) é salvo em um local conhecido.
    • Todas as instruções anteriores àquela apontada pelo PC foram concluídas.
    • Nenhuma instrução posterior àquela apontada pelo PC foi concluída.
    • O estado de execução da instrução apontada pelo PC é conhecido. Isso simplifica muito o trabalho do sistema operacional para retomar a execução.
  • 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.