Introdução hardware de E/S Carlos Gustavo A. da Rocha
Introdução Uma das principais funções dos SOs é controlar os dispositivos de E/S ligados ao computador O SO se comunica de fato com cada dispositivo, e oferece uma interface bem mais simples para os programadores Desta forma podemos utilizar o mesmo código para ler um arquivo de um disco rígido, DVD, pen-drive etc. Já para o SO, estas ações são completamente diferentes
Introdução O código referente a E/S representa a maior parte do sistema operacional Nela é que encontramos os conhecidos drives, que muitas vezes são desenvolvidos pelo fabricante do dispositivo, e não do SO Os drives podem ser inseridos e removidos do SO dinamicamente, e são sua maior fonte de instabilidade Logicamente, de forma semelhante a gerência de memória, a E/S engloba o funcionamento de hardware e software
Dispositivos de E/S A grosso modo, os dispositivos de E/S podem ser divididos em duas grandes classes Dispositivos de bloco: armazenam a informação em blocos de tamanho fixo, que podem ser endereçados As operações de E/S são na verdade a leitura ou escrita de um ou mais blocos (que possuem um endereço ) Exemplos: discos, CDs, cartões de memória etc
Dispositivos de E/S Dispositivos de caracter: recebem ou enviam um fluxo contínuo de caracteres durante o seu funcionamento Uma grande diferença é que os dados que chegam ou saem destes dispositivos não é endereçável Exemplos: teclados, mouses, impressoras, placas de rede etc
Dispositivos de E/S Esta classificação não é perfeita existindo dispositivos (como o relógio do computador) que não se enquadram em nenhuma das classes Contudo continua sendo a mais aceita O software (driver) que controla cada dispositivo deve lidar com todas as suas particularidades. Um exemplo é o volume de dados gerado, que pode ir de poucos bytes (ex: teclado) até centenas de Megabytes (ex: placas de rede) por segundo
Dispositivos de E/S Em diversas arquiteturas de computadores é comum a existência de controladores de dispositivos (IDE, SATA, USB etc) Isto possibilita aos fabricantes de SOs (pelo menos na teoria), que eles tenham que escrever drivers apenas para o controlador e não para cada dispositivo Por exemplo, o SO precisa ter apenas o driver para o controlador SATA da placa mãe (algumas dezenas de modelos), e não para cada disco rígido existente (alguns milhares de modelos)
E/S mapeada em memória Cada controlador ou dispositivo de E/S possui Um conjunto de registradores que controlam seu funcionamento By writing into these registers, the operating system can command the device to deliver data, accept data, switch itself on or off, or otherwise perform some action. By reading from these registers, the operating system can learn what the device's state is, whether it is prepared to accept a new command, and so on. E opcionalmente um buffer de dados no qual o sistema operacional pode ler ou escrever realizando a E/S em si
E/S mapeada em memória A E/S mapeada em memória mapeia os registradores e buffers dos dispositivos, de forma que eles podem ser lidos e escritos como se fossem parte da memória RAM A arquitetura IBM-PC sempre utilizou esta estratégia de E/S Portas de E/S (registratores): 0 a 64K Buffers de E/S: 640K a 1M Na prática, estes valores podem variar um pouco
E/S mapeada em memória Desta forma, na teoria, tudo que um driver de dispositivo que utiliza E/S mapeada precisa fazer, é ler e escrever valores nas regiões de memória que representam seus registradores e buffer de E/S Na prática eles têm que se lidar com uma série de outras coisas, como interrupções de hardware, temporizadores, latências, erros e sua correção, gerenciamento do uso de energia etc etc etc
E/S mapeada em memória Na arquitetura IBM-PC existe um dispositivo na placa mãe, chamado de PCI Bridge, por onde passam todas as solicitações de acesso à memoria É a PCI Bridge que irá direcionar os acessos para o local correto que pode ser a memória RAM real, registradores ou buffers dos dispositivos de E/S
E/S mapeada em memória Computadores Pentium e posteriores
E/S mapeada em memória A unidade de gerenciamento de memória, juntamente com a PCI bridge, impede o acesso às regiões de memória utilizadas por registradores e buffers de E/S aos processos de usuários Desta forma dispositivos só podem ser acessados pelo próprio SO, mais especificamente pelo seu driver
Acesso direto a memória (DMA) Fazer com que a CPU seja a responsável por requisitar todas as operações de E/S pode gerar um grande desperdício de tempo Quase todas as arquiteturas modernas possuem um dispositivo de hardware, conhecido como controlador de DMA, que funciona como segue 1. CPU programa o controlador de DMA informando o que deve ser transferido e para onde 2. O controlador de DMA solicita a leitura dos dados ao dispositivo
Acesso direto a memória (DMA) 3. A medida que os dados são lidos, eles são copiados para uma região predeterminada da memória 4. Ao concluir a leitura o dispositivo envia uma interrupção ao controlador de DMA, que é repassada para a CPU
Acesso direto a memória (DMA) Durante toda a operação de E/S por meio de DMA a CPU fica ocupada realizando outras atividades Controladores de DMA utilizados na prática permitem várias operações de E/S ao mesmo tempo, bem como a transferência de dados diretamente entre dois dispositivos (e não apenas entre um dispositivo e a memória)
Interrupções Em computadores IBM-PC sempre que um dispositivo de E/S finaliza uma leitura ou escrita ele gera uma interrupção Envio de um sinal pelo barramento da placa mãe Este sinal é detectado por um dispositivo da placa mãe chamado de tratador de interrupções O tratador de interrupções é que repassa a informação de que uma interrupção ocorreu para a CPU
Interrupções Quando toma conhecimento da ocorrência de uma interrupção, a CPU para o que estava fazendo e passa a executar uma rotina de tratamento da interrupção Um trecho do código do driver do dispositivo