Sistemas Operacionais Sistemas de Entrada/Saída Princípios de Software Sistema de Entrada/Saída Princípios de Software Tratadores (Manipuladores) de Interrupções Acionadores de Dispositivos (Device Drivers) Subsistema de E/S Ciclo de Operações em uma Requisição de E/S Desempenho dos Sistemas de E/S 2 Sistemas Operacionais -Entrada e Saída
Princípios de Software Conceito chave: o software de E/S deve buscar independência do dispositivo Características/objetivos importantes: Uniformidade de nome para os dispositivos (strings/inteiros) Manipulação de erros (devem ser feitas o mais próximo possível do hardware) Transferências síncronas (bloqueantes) e assíncronas (manipuladas por interrupção) Dispositivos compartilhados ou dedicados (possibilidade de deadlock) 3 Sistemas Operacionais -Entrada e Saída Visão Geral Processos Software Hardware Subsistema de E/S Device Drivers Manipuladores de Interrupção Controladores Dispositivos Independente do dispositivo Dependente do dispositivo 4 Sistemas Operacionais -Entrada e Saída
Tratadores de Interrupções São eventos complicados de se tratar. Assim, devem ser tratadas por uma pequena parte (parte específica) do SO Uma forma de tratá-las isoladamente é bloquear os processos que estiverem aguardando operações de E/S até uma interrupção de operação completada A rotina de tratamento desta interrupção libera o processo bloqueado (UP em um semáforo, SIGNAL em um monitor ou envio de uma mensagem) 5 Sistemas Operacionais -Entrada e Saída Acionadores de Dispositivos Todo código dependente do dispositivo se concentra do acionador (driver) do dispositivo Cada acionador manipula um dispositivo ou uma classe de dispositivos semelhantes Acionadores para: fita magnética, rede, Função: terminais etc receber comandos gerais (abstratos) sobre acessos aos dispositivos e traduzi-los para comandos específicos (executados pelos controladores) 6 Sistemas Operacionais -Entrada e Saída
Acionadores de Dispositivos O acionador é a parte do SO que reconhece o hardware, ou seja, sabe quantos registradores um controlador possui, para que eles servem, como são utilizados e quais são seus comandos. Devido a dependência entre os acionadores e as chamadas de sistema (system calls), os fabricantes desenvolvem, para um mesmo dispositivo, diferentes acionadores, um para cada SO. Dispositivo adicionado acionador deve ser acoplado ao kernel do SO 7 Sistemas Operacionais -Entrada e Saída Acionadores de Dispositivos Exemplo: leitura de um dado (bloco) em um disco System Call E/S Ler bloco n Acionador de disco Ler bloco no Disco X, Cilindro Y, Trilha W, Setor Z Controlador de disco disco disco disco Se acionador estiver desocupado, a requisição é aceita, caso contrário, ele a põe em uma fila de requisições pendentes Transcreve a requisição abstrata em ações concretas (comandos). Por exemplo, para um disk driver: informar onde o bloco se encontra no disco verificar se o motor do driver está girando determinar se o braço está no cilindro apropriado etc 8 Sistemas Operacionais -Entrada e Saída
Acionadores de Dispositivos Decididas quais operações realizar e em que ordem, o acionador escreve os comandos nos registradores do controlador Alguns controladores aceitam apenas um comando por vez, outros aceitam uma lista deles. Após o(s) comando(s) ter(em) sido(s) emitido(s), podem ocorrer duas situações o acionador deve se bloquear até que a operação seja completada (requisição bloqueante) no caso da operação ser lenta (envolvendo movimentos mecânicos, como no nosso exemplo) acionador deve aguardar, no caso de operações rápidas por exemplo, o deslocamento da tela em terminais requer apenas a escrita de um poucos bytes nos registradores do controlador (microssegundos) 9 Sistemas Operacionais -Entrada e Saída Acionadores de Dispositivos Se for o caso, uma vez completada a operação, o controlador gera uma interrupção que ativa o acionador O acionador verifica a ocorrência de erros Se tudo estiver correto, ele passa as informações (dados lidos) para a camada superior (Subsistema de E/S) Finalmente, ele retorna as informações de situação de erro (status) Caso haja, pega a próxima requisição; caso contrário, aguarda pela próxima... 10 Sistemas Operacionais -Entrada e Saída
Subsistema de E/S Responsável por realizar as funções comuns a todos os dispositivos (gerência dos dispositivos). Conhecido com Software de E/S Independente de Dispositivo Funções: Prover uma interface uniforme para as operações de E/S (software do usuário) Fazer o mapeamento simbólico dos nomes dos dispositivos para os seus respectivos acionadores (No Unix, p. ex., cada nome de dispositivo é mapeado em um nó-i de um arquivo especial com informações do acionador) Pode haver interesse em se prevenir que usuários acessem dispositivos que não estão autorizados. Isto está intimamen-te relacionado com a identificação (p. ex., bits rwx no Unix) 11 Sistemas Operacionais -Entrada e Saída Subsistema de E/S Prover um tamanho de bloco uniforme para as camadas superiores independente do dispositivo (p. ex., tratando vários setores como um único bloco lógico) Buferização: para dispositivos de blocos: hardware transfere blocos inteiros, mas processos do usuário manipulam unidades arbitrárias para dispositivos de caracteres: coletar caracteres e submetêlos em conjunto para os dispositivos Para diminuir efeitos de diferença de velocidade entre dispositivos durante uma cópia Para suporte à semântica de cópia (versão que vale é a do instante da chamada) 12 Sistemas Operacionais -Entrada e Saída
Subsistema de E/S Pode prover a implementação do algoritmo de localização de blocos livres nos dispositivos de bloco, uma vez que ele é independente do dispositivo Controlar a alocação e liberação dos dispositivos compartilhados ou dedicados de acordo com sua disponibilidade Realizar a ordenação das operações de E/S, com o objetivo de melhorar o desempenho global do sistema (ex., ordenação de operações de leitura em blocos espalhados de um disco) Gerenciamento de erros persistentes que são reportados pelos acionadores. Exemplo: Bloco ruim na área de usuário informar erro para o mesmo em área crítica solicitar intervenção do administrador 13 Sistemas Operacionais -Entrada e Saída É o Software no Nível do Usuário A maior parte do software de E/S está embutida no SO (subsistema de E/S) Uma pequena porção consiste em rotinas de bibliotecas, ligadas junto com os programas de usuários (ou mesmo em programas inteiros rodando fora do núcleo) Chamadas de sistema, incluindo as de E/S, são normalmente feitas por procedimentos de bibliotecas, como as oferecidas pelas linguagens de programação C, Pascal etc 14 Sistemas Operacionais -Entrada e Saída
Por isto que os comandos de E/S nestas linguagens independem do ambiente operacional onde se está trabalhando. Por exemplo: bytes_lidos = fread(buffer, tam_item, n_itens, arquivo); o procedimento fread será ligado com o programa (fica contido no código binário presente no espaço do usuário) antes de efetuar a chamada de sistema, este procedimento coloca seus parâmetros nas posições de memória apropriadas 15 Sistemas Operacionais -Entrada e Saída Outro exemplo: formatação de entradas e saídas são feitas por procedimentos da biblioteca de E/S padrão:» printf,» gets etc Estas porções do código, que rodam como parte dos programas do usuário, são parte do Sistema de E/S 16 Sistemas Operacionais -Entrada e Saída
Nem todo software de E/S consiste de procedimentos de bibliotecas Por exemplo, Sistemas de SPOOLING (Simultaneous Peripheral Operation On-Line) Spooling: modo de negociação com os dispositivos dedicados de E/S em sistemas multiprogramados Exemplo: impressora Processo abre o arquivo especial da impressora Mantém arquivo aberto por horas, sem usá-lo Ninguém mais imprime nada... 17 Sistemas Operacionais -Entrada e Saída Técnica de Spooling Cria-se um processo especial, denominado daemon (servidor), e um diretório especial, chamado diretório de spool (spooling directory) Processo envia arquivo para daemon (isto é, copia o arquivo no diretório de spool) Daemon, que é o único processo que tem permissão para usar o arquivo especial associado à impressora, transfere os arquivos do diretório de spool para impressora, um a um Spooling também é usado em outras situações (p. ex., em transferência de mensagens de correio eletrônico) 18 Sistemas Operacionais -Entrada e Saída
Ciclo de Operações em uma Requisição de E/S 19 Sistemas Operacionais -Entrada e Saída Desempenho Desempenho do Sistema de E/S afeta diretamente o desempenho global do sistema: Uso da CPU na execução do código do acionador do dispositivo Mudanças de contexto devido às interrupções Sobrecarga do barramento da memória durante as cópias de dados Um exemplo: o custo do tráfego de um caracter pela rede 20 Sistemas Operacionais -Entrada e Saída
Desempenho 21 Sistemas Operacionais -Entrada e Saída Melhorando o desempenho: Desempenho Reduzir o número de mudanças de contexto Reduzir o número de cópias de dados entre controlador, núcleo e processo Reduzir a freqüência de interrupções usando grandes transferências, controladores inteligentes e polling (quando viável) Usar DMA para aumentar o paralelismo Usar CPU, memória, barramento e dispositivos de E/S de forma balanceada, para evitar gargalos 22 Sistemas Operacionais -Entrada e Saída