Capítulo 5 Entrada/Saída 5.1 Princípios do hardware de E/S 5.1.1 Dispositivos de E/S Os dispositivos de E/S podem ser divididos em duas categorias: Dispositivos de bloco Armazena informações em blocos de tamanho fixo, cada um com o seu próprio endereço. Cada bloco pode ser lido ou escrito independentemente de todos os outros. Exs: Discos Dispositivos de carácter Envia ou recebe um fluxo de caracteres, sem considerar qualquer estrutura de blocos. Ele não é endereçável e não dispõe de qualquer operação de posicionamento. Exs: Impressoras, interfaces de redes, ratos. 5.1.2 Controladores de dispositivos As unidade de E/S consistem, normalmente, em um componente mecânico e um componente electrónico. O componente electrónico é chamado de controlador do dispositivo. O trabalho do controlador é converter o fluxo serial de bits em um bloco de bytes e executar toda correcção de erros necessária. O bloco de bytes é normalmente montado, bit a bit, em um buffer dentro do controlador.após o checksum e o bloco estar livre de erros, pode então ser copiado para a memória principal. 5.1.3 E/S Mapeada na memória Sistema que visa mapear todos os registos de controle no espaço de endereçamento de memória. Cada registo de controle é associado a um endereço de memória único ao qual nenhuma memória é associada. 5.1.4 Direct Memory Access (DMA) CPU necessita endereçar os controladores de dispositivo para trocar dados entre eles. CPU pode obter dados de um controlador de E/S um byte de cada vez, olhando sempre para o tempo do CPU. Para fazer isso é usado o DMA. 5.2 Princípios do software de E/S 5.2.1 Objectivos do software de E/S independência do dispositivo propõe que deveria ser possível escrever programas aptos a aceder qualquer dispositivo de E/S sem a necessidade de especificar antecipadamente o dispositivo. Nomeação uniforme propõe que o nome de um arquivo ou de um dispositivo deveria simplesmente ser uma cadeia de caracteres ou um número inteiro totalmente independente do dispositivo. Tratamento de erros; Os erros deveriam ser tratados o mais próximo possível do hardware. Se o controlador descobre um erro de leitura, ele deveria tentar corrigi-lo por si próprio. Se ele não tem condições de o fazer então o driver do dispositivo deveria tratar disso.
A transferência pode ser síncrona ou assíncrona; A maioria dos E/S é assíncrona a CPU inicia a transferência e segue fazendo outra actividade até receber uma interrupção. Muitas vezes, os dados provenientes de um dispositivo não podem ser armazenados directamente em seu destino final. Então utiliza-se um buffer. 5.2.2 E/S programada A forma mais simples de E/S é ter a CPU a fazer todo o trabalho. A E/S programada é simples, mas tem a desvantagem de segurar a CPU o tempo todo até que a E/S seja feita. 5.2.3 E/S orientada à interrupção Os dados são enviados para o E/S que, enquanto faz não faz a E/S, pode ir executando outros processos, por meio de interrupções. 5.2.4 E/S utilizando DMA O DMA executa E/S programada, em que somente o controlador de DMA faz todo o trabalho, em vez da CPU principal 5.3 Camadas de software de E/S O software de E/S é normalmente organizado em quatro camadas 5.3.1 Tratadores de interrupção As interrupções são um facto desagradável e não podem ser evitadas. 1. Guarda quaisquer registos que ainda não foram guardados pelo hardware de interrupção. 2. Estabelece um contexto para a rotina de tratamento de interrupção. 3. Estabelece uma stack para a rotina de tratamento de interrupção. 4. Sinaliza o controlador de interrupção. 5. Copia os registradores de onde eles foram guardados para a tabela de processos. 6. Executa a rotina de tratamento de interrupção de forma a extrair informações dos registradores do controlador do dispositivo que está interrompendo. 7. Escolhe o próximo processo a executar. 8. Estabelece o contexto da MMU para o próximo processo a executar. 9. Carrega os registradores do novo processo. 10. Inicia a execução do novo processo. 5.3.2 Drivers dos dispositivos Cada dispositivo de E/S ligado ao computador precisa de algum código específico do dispositivo para controlá-lo. Esse código, chamado de driver do dispositivo, é em geral escrito pelo fabricante do dispositivo e fornecido juntamente com o dispositivo. Um driver de um dispositivo apresenta várias funções. A mais óbvia é aceitar e executar requisições abstractas, de leitura ou de gravação, de um software independente de dispositivo localizado na camada acima da camada de drivers dos dispositivos. Outras funções são iniciar o dispositivo, ou tratar as suas necessidades de energia e registar os seus eventos. Controlar o dispositivo significa emitir uma sequência de comandos para ele. O driver é o local onde a sequência de comandos é determinada, dependendo daquilo que deve ser feito.
5.3.3 Software de E/S independente de dispositivo As funções básicas de um software independente de dispositivo são executar as funções de E/S comuns para todos os dispositivos e fornecer uma interface uniforme para o software no nível do utilizador. As funções são: Interface uniforme para os drivers dos dispositivos Armazenamento em buffer Relatório dos erros Alocação e libertação de dispositivos dedicados Fornecimento de tamanho de bloco independente de dispositivo 5.3.4 Software de E/S do espaço do utilizador Embora a maior parte do software de E/S esteja dentro do sistema operativo, uma pequena parte dele é constituído de bibliotecas ligadas aos programas do utilizador e até mesmo de programas completos que executam fora do núcleo. 5.4 Discos 5.4.1 Hardware do disco Existe uma grande variedade de tipos de discos. Os mais comuns são os discos magnéticos (discos rígidos e flexíveis). Veremos as suas características: Discos magnéticos São organizados em cilindros; cada cilindro contém tantas faixas quanto forem as cabeças dispostos verticalmente. As faixas são divididas em sectores. RAID Um arranjo redundante de discos baratos. A ideia básica em torno do RAID é instalar uma caixa cheia de discos próxima ao computador, substituir a placa controladora de disco por um controlador RAID, copiar os dados para o RAID e então prosseguir com a operação normal. Para parecer-se como um único disco para o software, todos os RAID tem a propriedade de os dados serem distribuídos pelos dispositivos, permitindo operações em paralelo. CD-ROMS Um CD é produzido utilizando um laser infravermelho de alta potência para queimar orifícios em um disco mestre revestido de vidro. A partir desse disco mestre é feita uma matriz contendo elevações nos locais onde os orifícios foram feitos pelo laser. Em seguida, uma resina derretida de policarbonato é derramada nessa matriz para fazer um CD com o mesmo padrão de orifícios do disco mestre de vidro. Então, uma camada muito fina de alumínio reflector é depositada sobre o policarbonato coberto por um verniz protector e finalmente recebe um rótulo. Parei por aqui porque axo que isto não tem a ver com o sistema operativo em sim. O que tem a ver com o sistema operativo é a parte que já vimos atrás, que é as drivers e os controladores de registos do hardware. Para o sistema operativo, o que é que isso interessa???? Ele tem é de conseguir ler o cd ou dvd ou seja lá o que for. 5.4.2 Formatação de disco Antes que o disco possa ser utilizado, cada prato deve receber uma formatação de baixo nível feita por software. A formatação consiste em criar uma série de faixas concêntricas, cada uma com um certo número de sectores, com pequenos intervalos entre eles. Um sector do disco é constituído por: Preambulo inicia com um certo padrão binário que permite ao hardware reconhecer o inicio do sector. Ele também contém os números de cilindros e sectores e algumas outras informações. Dados o tamanho da parte de dados é determinado pelo programa de formatação de baixo nível. ECC contém informações redundantes que podem ser utilizadas para a recuperação de erros de leitura. Após a formatação completa de baixo nível, o disco é dividido em partições. Do ponto de vista lógico, cada partição é tratada como um disco separado.
O sector 0 contém o registo principal de boot, que apresenta um código do boot além da tabela de partições no final. A tabela de partições fornece o sector inicial e o tamanho de cada partição O passo final na preparação de um disco para o uso é executar uma formatação de alto nível de cada partição separadamente. Essa operação insere um bloco de boot, a estrutura de gestão de armazenamento livre, o directório de raiz e um sistema de ficheiros vazios. 5.4.3 Algoritmos de escalonamento de braço de disco O tempo que um driver do disco leva para escrever ou ler um bloco do disco é determinado por três factores: 1. Tempo de posicionamento 2. Atraso de rotação 3. Tempo de transferência real dos dados O tempo de posicionamente é preponderante sobre os dois outros tempos, de modo que a redução no tempo médio de posicionamento pode melhorar substancialmente o desempenho do sistema. FCFS (first-come, first-serverd) O nome diz tudo SSF (shortest seek first) Trata a próxima requisição como sendo a mais próxima da posição actual da cabeça de leitura/gravação. Problema: se tiver sempre a entrar requisições ele pode demorar muito tempo a uma que esteja longe de umas que vão aparecendo próximas umas das outras. Algoritmo do elevador a cabeça move-se numa direcção até não haver mais requisições pendentes naquela direcção, depois troca, vai para a outra direcção. 5.4.4 Tratamento de erros Com os defeitos de fabrico surgem os sectores defeituosos, isto é, sectores aonde os valores escritos não são lidos correctamente. Se o defeito é pequeno é possível utilizar o sector defeituoso e simplesmente deixar que o ECC corrija os erros toda a vez. Se o erro for grande, o erro não poderá ser mascarado. O disco é testado na fábrica e uma lista de sectores ruins é gravada nele. Cada sector defeituoso é substituído por um de reserva. Existem duas maneiras de fazer esta substituição: 1. Substituir directamente um sector de reserva por um sector defeituoso 2. Deslocar todos os sectores para pular o sector defeituoso. 5.4.5 Armazenamento estável Quando uma escrita é lançada para o disco, ou ele escreve correctamente o dado ou não escreve nada, deixando os dados existentes intactos. Este sistema é chamado de armazenamento estável e é implementado em software. Escrita-estável: primeiro escrever um bloco na unidade 1 e em seguida ler o mesmo dado de volta para verificar se ele foi escrito correctamente. Leitura-estável: Lê o primeiro bloco da unidade 1. Se essa unidade produz um ECC incorrecto, a leitura é tentada novamente n vezes. 5.5 Relógios Também chamados temporizadores são essenciais para o funcionamento de qualquer sistema multiprogramado devido a uma variedade de razões. Entre outras coisas, eles mantêm a hora do dia e evitam que um processo monopolize a CPU. 5.5.1 Hardware do relógio O relógio é contruído a partir de três componentes: um oscilador de cristal, um contador e um registo de apoio.
A funcionar no modo onda quadrada, após atingir o zeroe causar a interrupção, o registo de apoio é automaticamente copiado para dentro do contador e o processo todo é repetido interminavelmente. Essas repetições periódicas são chamadas de tiques de relógio. Para evitar a perda do horário actual quando a energia do computador é desligada, a maioria dos computadores tem um relógio de segurança mantido por uma bateria. 5.5.2 Software do relógio As obrigações exactas do driver do relógio variam de acordo com o sistema operativo, mas em geral são estas: 1. Manter a hora do dia requer apenas o incremento do contador em cada tique do relógio. 2. Evitar que algum processo execute durante um tempo maior do que o tempo permitido sempre que um processo é iniciado o escalonador inicializa o contador com o valor do quatum do processo em tiques de relógio. Em cada interrupção do relógio, o driver do relógio decrementa o contador do quatum de 1. Quando o contador atinge zero, o driver chama o escalonador para chamar outro processo. 3. Contabilizar o uso da CPU - 4. Tratar a chamada ao sistema alarm feita pelos processos do utilizador. 5. Fornecer temporizadores watchdog para partes do próprio sistema 6. Gerar o perfil da execução, da monitorização e das colheitas de estatísticas 5.5.3 Temporizadores por software A maioria dos computadores tem um segundo relógio programável, que pode ser ajustado para causar interrupções em qualquer taxa que um programa precisar. Os temporizadores por software evitam interrupções. 5.9 Gestão de Energia Existem duas estratégias para reduzir o consumo de energia. A primeira consiste em o sistema operativo desligar partes do computador (principalmente de dispositivos de E/S) que não estejam em uso. Pois um dispositivo desligado utiliza pouca ou nenhuma energia. A segunda é o aplicativo utilizar menos energia. 5.9.1 Questões do Hardware As baterias são de dois tipos: Descartáveis podem ser utilizadas para executar dispositivos de mão, mas não têm energia suficiente para alimentar um portátil. Recarregáveis Pode armazenar bastante energia para alimentar um portátil durante algumas horas. Alguns computadores têm dois ou mesmo três botões de energia. Um deles pode colocar o computador todo em estado de dormência, do qual ele pode ser acordado rapidamente. Outro botão pode colocar o computador em estado de hibernação, do qual ele levará mais tempo para ser acordado. 5.9.2 Questões do Sistema Operativo O sistema operativo desempenha um papel importante na gestão de energia. Ele controla todos os dispositivos, de modo que é ele quem deve decidir o que desligar e quando desligar. O truque é encontrar algoritmos e heurísticas que permitam ao sistema operativo tomar boas decisões sobre o que desligar e quando desligar.