Baixe o app para aproveitar ainda mais
Prévia do material em texto
Sistemas Operacionais Princípios do software de E/S Prof. Sílvio Fernandes UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO DEPARTAMENTO DE CIÊNCIAS EXATAS E NATURAIS CURSO DE CIÊNCIA DA COMPUTAÇÃO Introdução O conceito primordial no projeto do SW de E/S é conhecido como independência de dispositivo, pela qual programas são aptos acessar qualquer dispositivo de E/S de uma maneira, seja ele um disquete, disco rígido, ou CD-ROM. O conceito de nomeação uniforme, diz que o nome de cada arquivo ou dispositivo deveria ser uma simples cadeia de caracteres ou valor inteiro, totalmente independente do dispositivo 2 Introdução Em relação ao tratamento de erros há o conceito de que eles devem ser tratados o mais “próximo” do hardware possível Se um controlador descobre um erro ele deve tratá-lo, caso não tenha condições para isso o erro deve ser informado ao driver do dispositivo que também tenta tratá-lo 3 Introdução Em último caso o processo do usuário é informado que o houve um erro que não pode ser tratado 4 Introdução Em relação a transferência de dados ela pode ser síncrona (bloqueante), que é a forma mais utilizada nas camadas de software de alto nível, por facilitar a programação Ou assíncrona (orientada a interrupção), forma utilizada na E/S física Outra questão é a utilização de buffer para armazenamento temporário Muitas vezes os dados não podem ser armazenados nos seu destino final 5 Introdução Outro conceito é o de dispositivo compartilhado versus dedicado Alguns dispositivos (como discos) podem ser usados por muitos usuários ao mesmo tempo Outros dispositivos (como fitas) devem ser dedicados a um único usuário até que finalize suas operações Há 3 maneiras de realizar E/S E/S programada E/S orientada a interrupção E/S que usa DMA 6 Camadas do Software de E/S O software de E/S é normalmente dividido em quatro camadas, cada qual com funções e interfaces bem definidas para as camadas adjacente 7 Tratadores de interrupção Por um lado E/S programada é eventualmente útil, por outro, para a maioria das E/S, as interrupções são um fato desagradável e não podem ser evitadas A menor parte do SO é que deve saber da existência das interrupções A melhor maneira de escondê-las é bloquear o driver que iniciou uma operação de E/S até que ela se complete e uma interrupção ocorra O driver pode bloquear a si próprio 8 Tratadores de interrupção Quando ocorre uma interrupção, a rotina de tratamento faz o necessário para tratar a interrupção e depois pode desbloquear o driver de dispositivo que a causou Esse tratamento pode ser simples como a realização de um “up” sobre um semáforo ou muito mais complicada Em todos os casos, o efeito resultante será que o driver previamente bloqueado esteja novamente apto a executar 9 Tratadores de interrupção 1. Salva quaisquer registradores que ainda não foram salvos pelo hardware de interrupção 2. Estabelece um contexto para a rotina de tratamento de interrupção 3. Estabelece uma pilha para a rotina de tratamento de interrupção 4. Sinaliza o controlador se interrupção (se houver) ou reabilita as interrupções 5. Copia os registradores de onde foram salvos para a tabela de processo 10 Tratadores de interrupção 6. Executa a rotina de tratamento de interrupção 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 11 Tratadores de interrupção O processamento da interrupção está longe de ser trivial Ela usa ainda um número considerável de instruções de CPU, especialmente em máquinas nas quais a memória virtual está presente e as tabelas de páginas precisam ser ajustadas 12 Drivers de dispositivos Cada dispositivo de E/S ligado ao computador precisa de algum código específico do dispositivo para controlá-lo, chamado driver do dispositivo Podemos ter um driver para cada dispositivo ou uma classe de dispositivos (ex: vários discos rígidos IDE), no entanto teclado e mouse serão controlados por drivers diferentes Como o driver acessa diretamente o hardware do dispositivo ele deve ser parte do núcleo do SO 13 Drivers de dispositivos Drivers mal escritos ou com bugs são a maior causa de crashs em sistemas Dado que drivers muitas vezes são escritos por terceiros (fabricantes do dispositivo), o SO deve ter um modelo bem definido do que o driver faz e como ele interage com o restante do SO 14 Drivers de dispositivos Posição lógica dos drivers dos dispositivos A comunicação entre os drivers e os controladores de dispositivos é feita por meio do barramento 15 Drivers de dispositivos A maioria dos SOs define uma interface padrão para os dispositivos de bloco e outra para os dispositivos de caracter Estas interfaces constituem um número de procedimentos que o restante do SO pode utilizar para fazer o driver trabalhar para ele Um driver possui várias funções A mais óbvia é aceitar e requisitar requisições abstratas de leitura e gravação, de um software independente de dispositivo localizado na camada superior do SO 16 Drivers de dispositivos Como exemplo de outra função temos a inicialização do dispositivo, e o tratamento de suas necessidades de consumo de energia 17 Software de E/S independente de dispositivo A fronteira entre os drivers e SW de E/S independentes de dispositivos variam de acordo com o sistema e o próprio dispositivo Porém as funções a seguir são em geral feitas no SW independente de dispositivo 18 Interface uniforme para os drivers dos dispositivos Armazenamento em buffer Relatório dos erros Alocação e liberação de dispositivos dedicados Fornecimento de tamanho de bloco independente de dispositivo Software de E/S independente de dispositivo Interface uniforme para drivers O aspecto mais importante desta questão é a interface entre os drivers de dispositivos e o restante do SO Se cada driver tem uma interface diferente para o SO, significa que as funções do driver, disponíveis para serem chamada pelo sistema diferem de driver para driver, bem como as funções do núcleo requeridas pelo driver 19 Software de E/S independente de dispositivo Interface uniforme para drivers Quando todos os drivers tem a mesma interface é bem mais simples de se acoplar um novo driver, bastando que ele siga a interface padrão Desse modo também temos uma padronização de quais funções um driver deve fornecer e quais funções do núcleo eles podem chamar 20 Software de E/S independente de dispositivo (a) Sem uma interface-padrão do driver (b) Com uma interface-padrão do driver 21 Software de E/S independente de dispositivo Interface uniforme para drivers Com a interface uniforme, o SW independente de dispositivo pode cuidar mais facilmente do mapeamento dos nomes de dispositivos simbólicos em seus drivers apropriados EX: no UNIX todos os dispositivos do sistema são mapeados como arquivos especiais do diretório /dev 22 Software de E/S independente de dispositivo Utilização de Buffers É de grande importância tanto para dispositivos de caracter como de bloco Considere um processo que deseja ler dados de um modem. Ele poderia realizar uma chamada ao sistema read e bloquear a espera de cada caracter A desvantagem deste método é que o processo do usuário precisa ser bloqueado e reiniciado um número muito grande de vezes em um curto intervalo de tempo, o que é ineficiente 23 Software de E/S independente de dispositivo Utilização de Buffers A utilização de buffer permite que o usuário forneça um buffer e requisite a leitura de “n” caracteres de uma única vez O SW dependente do dispositivo coloca os caracteres (um a um) neste buffer até que ele encha. Só então ele desbloqueia o processo do usuário Esta abordagem é bem mais eficiente que a anterior 24 Software de E/S independente de dispositivo Utilização de Buffers Na prática se utilizam soluções com mútiplos bufferes tanto no espaço do usuário como no núcleo, para aumentar ainda mais sua eficiência Dado que dispositivos são geralmente muito lentos em relação ao resto do sistema e se há apenas um buffer pode-se desperdiçar caracteres quando o buffer está cheio 25 Software de E/S independente de dispositivo Utilização de Buffers a) Entrada sem utilização de buffer b) Utilização de buffer no espaço do usuário c) Utilização de buffer no núcleo seguido de cópia para o espaço do usuário d) Utilização de buffer duplo no núcleo 26 Software de E/S independente de dispositivo Relatório de erros Erros são bem mais comuns durante uma E/S que em qualquer outra situação Quando eles ocorrem o SO deve lidar com eles da melhor maneira possível Este tratamento pode ser desde o retorno de um código de erro Ex: quando o usuário tenta acessar um dispositivo de maneira incorreta ou sem permissão 27 Software de E/S independente de dispositivo Relatório de erros Pode ser a exibição de uma caixa de diálogo perguntando ao usuário o que fazer EX: no caso de um erro de leitura Até a exibição de uma mensagem de erro e desligamento do sistema Ex: No caso da destruição de uma estrutura de dados crítica como diretório raiz 28 Software de E/S independente de dispositivo Alocação e liberação de dispositivos dedicados Alguns dispositivos, como um gravador de CD-ROM, pode ser utilizado por apenas um único processo por vez O SO deve ser capaz de examinar as requisições de uso do dispositivo, podendo aceitá-las ou rejeitá-las, dependendo da disponibilidade do dispositivo 29 Software de E/S independente de dispositivo Alocação e liberação de dispositivos dedicados Quando um dispositivo dedicado já está sendo utilizado por um processo e outro processo tenta acessá-lo o SO pode retornar uma falha Uma alternativa é bloquear o processo requisitante e colocá-lo em uma fila, de modo que quando o dispositivo estiver disponível novamente o primeiro processo da fila terá acesso ao dispositivo 30 Software de E/S independente de dispositivo Tamanho de bloco independente de dispositivo Discos diferentes tem tamanhos diferentes de setores É função do SW independente de dispositivo esconder este detalhe e fornecer um tamanho de bloco uniforme para as camadas superiores Do mesmo modo que alguns dispositivos de caracter entregam um byte por vez (como modem), enquanto outros entregam dado em unidades maiores (interfaces de rede) Estas diferenças também devem ser ocultadas 31 Software de E/S do espaço do usuário Embora a maior parte do SW de E/S esteja dentro do SO, uma pequena parte dele é construída de bibliotecas Programas de usuários normalmente fazem uso de diversos procedimentos disponibilizados por estas bibliotecas, que por sua vez realizam as chamadas reais ao sistema Um exemplo clássico são as bibliotecas C padrões, onde estão os procedimentos: open, read, write, printf, scanf, entre outros 32 Software de E/S do espaço do usuário Outra categoria importante é o sistema de spooling, uma maneira de lidar com dispositivos de E/S dedicados em sistemas com multiprogramação Num exemplo clássico (impressora) é criado um processo especial, chamado de daemon, e um diretório especial, chamado spool Para imprimir um arquivo o processo de usuário deve gerar todo o arquivo a ser impresso e o copiar para o diretório de spool 33 Software de E/S do espaço do usuário Fica a cardo do daemon (único a poder se utilizar do arquivo especial da impressora) imprimir os arquivos do diretório A figura a seguir resume todo os sistema de E/S, mostrando as camadas e as funções principais de cada uma delas 34 Software de E/S do espaço do usuário Camadas do sistema de E/S e as principais funções de cada camada 35 Referências TANENBAUM, Andrew S. Sistemas Operacionais Modernos. 2. ed., Prentice Hall, 2007. TANENBAUM, Andrew S.; WOODHULL, Albert S. Sistemas Operacionais: Projeto e Implementação. 3ª Ed., Prentice Hall, 2008. 36
Compartilhar