Entrada e Saída

Uma das funções principais de um sistema operacional é controlar todos os dispositivos de e/s de um computador, tratar erros, interceptar interrupções, fornecer uma interface entre o dispositivo e o sistema, emitir comandos para os dispositivos.

Os dispositivos de entrada e saída podem ser divididos em um modo genérico como dispositivos de bloco e caractere.

Um dispositivo de bloco armazena as informações em blocos de tamanho fixo, cada qual com seu endereço. Cada bloco pode ser lido ou escrito de maneira independente uns dos outros. Um dispositivo de bloco pode estar com um ponteiro em qualquer lugar e pode ser posicionado para outro cilindro.

Outro dispositivo de e/s é o dispositivo de caractere. O dispositivo de caractere não utiliza estrutura de blocos nem posicionamento. No dispositivo de caractere ele recebe um fluxo de caracteres, além de não ser endereçável.

Os dispositivos de e/s tem uma grande variedade, cada uma trabalha a uma velocidade, assim pressionando o sw a trabalhar com essas diferentes taxas de transferências.

Os relógios não são dispositivos de blocos nem de caracteres. Os relógios só causam interrupções. Dispositivos diferentes dos discos podem ser considerados dispositivos de caracteres. Mas esse modelo de classificação não é perfeito.

Controladores de Dispositivos


As unidades de e/s constituem de um componente eletrônico e um mecânico. O elemento eletrônico é chamado de controlador de dispositivo ou adaptador. Nos computadores pessoais, o controlador de dispositivo aparece em forma de uma placa de circuito impresso. Nessa placa, tem um conector que pode ser plugado outros dispositivos. (Se for uma interface padrão, entre o dispositivo e o controlador), ou seja, deve ter uma interface baixa entre o controlador e um dispositivo.

Preâmbulo é escrito quando um disco é formatado. Nele, contem o numero do cilindro, tamanho do setor, informações dos dados e sincronização. O trabalho do controlador de dispositivo é converter fluxo de bits em bloco de bytes, além de corrigir erros. O bloco de bytes é formado dentro do controlador. Após converter em blocos de bytes, é somado e checado, se o bloco estiver com a soma correta e sem erros ele é copiado para a memória principal.

Entrada e Saída Mapeada na Memória


  • Cada controlador de dispositivo tem seus registradores. Esses registradores são usados para comunicar com a CPU. Por meio da escrita nesses registradores do controlador de dispositivo, o S.O pode comandar o dispositivo para aceitar, executar, desligar.
  • A partir da escrita nesses registradores, o S.O pode saber o estado de um dispositivo, se ele está apto a receber um novo comando, etc. Além dos registradores, os dispositivos têm buffers, no qual o S.O lê e escreve.
COMO A CPU SE COMUNICA COM OS REGISTRADORES DO CONTROLADOR E COM OS BUFFERS DO DISPOSITIVO?

Há duas possibilidades:

  1. Cada registrador é associado a um numero de porta de e/s. Usando uma instrução, a CPU pode ler o registrador do controlador e armazenar o resultado no seu registrador. A mesma pode escrever o conteúdo do registrador da CPU para o registrador de controle.
  2. Visa mapear todos os registradores de controle no espaço de endereçamento. Quando a CPU quer ler uma palavra, ou da memória, ou da e/s, a CPU coloca o endereço que precisa nas linhas do barramento. Um segundo sinal é emitido, ele informa se o espaço requisitado é da memória, ou da e/s.
  • Se o espaço requisitado é da memória, a memória responderá a requisição, se for da e/s o dispositivo e/s responderá.
  • Se existe somente um espaço, cada módulo de memória e cada dispositivo de e/s compara as linhas de endereço associado a cada dispositivo de e/s, compara as linhas do endereço com a faixa de endereço associada a cada um. Se os endereços estão dentro da faixa, esse componente responde a requisição.

Os dois esquemas de endereçamento dos controladores apresentam vantagens e desvantagens específicas

. As vantagens da E/S Mapeada na Memória:
  • Primeiro: Quando são necessárias instruções especiais de e/s para ler ou escrever nos registradores dos dispositivos, requer código em assembly, pois não tem nenhum modo de executar uma instrução. Assim, com e/s mapeada na memoria, um driver do dispositivo pode ser escrito em C.
  • Em segundo lugar, Não é preciso qualquer mecanismo de proteção para impedir que os processos dos usuários executem e/s. Tudo que o S.O faz é deixar de mapear aquela porção do espaço de endereçamento associada aos registradores de controle no espaço de endereçamento virtual do usuário.
  • Em terceiro lugar, Na memoria, cada instrução capaz de referenciar a memoria, pode também referenciar os registradores de controle.
Desvantagens:
  • A maioria dos computadores atuais usa alguma forma de cache para as palavras de memória. O uso de cache para registradores de controle seria desastroso. O HW deve ser equipado com a capacidade de desabilitar a cache.
  • Em segundo lugar, se existe somente um espaço de endereçamento, todos os módulos de memoria e todos os dispositivos devem examinar as referencias de memoria, para verificar quais delas devem ser respondidas por cada um. Se tiver somente um barramento, cada componente pode olhar para cada endereço diretamente.

Quando se tem um barramento de memoria separado em máquinas mapeadas na memória, surge a preocupação que os dispositivos não têm como enxergar os endereços de memoria quando estes são lançados no barramento da memoria, de modo que estas não tenham como responder.

Uma Solução pode ser enviar todas as referencias de memoria para a memoria, se a memoria falhar para responder, então a CPU tenta outros barramentos. Uma segunda solução poderia colocar um dispositivo de escuta no barramento da memoria para repassar aos dispositivos de e/s podem não serem capazes de processar as requisições na velocidade da memoria. Já um terceiro método consiste em filtrar os endereços no chip da ponte PCI.

Acesso Direto a Memoria (DMA)

Não importa se a CPU tem ou não E/S mapeada na memoria, ela precisa endereçar os controladores dos dispositivos para poder trocar dados com eles. A CPU pode requisitar dados de um controlador de E/S, um byte de cada vez, mas desperdiça muito tempo, de modo que um esquema diferente (DMA) seja usado.

Um S.O pode utilizar um DMA somente se o HW tem o controlador de DMA.

O controlador de DMA tem acesso ao barramento do sistema. Eles contem vários registradores que podem ser lidos ou escritos na CPU, os quais possuem registrador de endereço de memoria, registrador de controle e registrador de contador de bytes.

O controlador lê um bloco do dispositivo, bit a bit, até que todo bloco esteja no buffer do controlador. Em seguida, ele calcula a soma de verificação, para constatar de que não houve algum erro de leitura. Então, o controlador causa uma interrupção. Quando o S.O inicia o atendimento, ele pode ler o bloco do disco a partir do buffer do controlador. Um bloco de byte ou uma palavra é lida no registrador do controlador e armazenada na memoria principal.

  • Quando o DMA é usado, o procedimento é diferente. A CPU programa o controlador do DMA, inserindo valores em seus registradores, de modo que ele saiba que tem algo para transferir e para onde transferir.
  • Ele emite um comando para o controlador de disco, ordenando carregar os dados do disco para seu buffer interno e então verificar a soma de verificação. Quando os dados que estão no buffer do controlador são validos, o DMA pode começar.
  • O controlador do DMA inicia a transferência emitindo pelo barramento uma requisição de leitura para o controlador de disco. Normalmente, o endereço de memoria, para onde escrever, está nas linhas de endereço do barramento, de modo que quando o controlador de disco busca a próxima palavra do seu buffer interno ela sabe onde escrever.

A escrita na memoria é outro ciclo de barramento. Quando a escrita está completa, o controlador de disco emite um sinal de confirmação para o controlador, também pelo barramento. O controlador de DMA incrementa o endereço de memoria e diminui o contador de bytes. Se o contador é maior que O, os passos são repetidos até que ele se torne 0. Nesse momento, o controlador de DMA interrompe a CPU para deixa-la ciente de que a transferência está completa. Quando o S.O inicia o atendimento da interrupção, ele não precisa copiar o bloco de disco para a memoria, pois ele já está lá.

Muitos barramentos podem operar em dois modos: modo palavra e modo bloco. Alguns controladores de DMA também são capazes de operar em outro modo.

No modo palavra, operação funciona como descrita anteriormente, o controlador de DMA solicita a transferência de uma palavra e consegue. Se a CPU também quer o barramento, ela tem que esperar. O mecanismo é chamado de roubo de ciclo, pois o controlador de dispositivo rouba da CPU um ciclo do barramento, a cada vez alternando.

No modo bloco, o controlador do DMA diz ao dispositivo para obter o barramento, emite uma serie de transferências e então libera o barramento. Esse modo de operação é chamado de modo surto. Este é mais eficiente que o anterior, pois varias palavras podem ser transferidas com uma aquisição do barramento.

A única desvantagem do modo surto é que ele pode bloquear a CPU e outros dispositivos por um período grande de tempo, caso um longo surto tenha de ser transferido.

Modo Direto, o controlador de DMA diz para o controlador de o dispositivo transferir dados diretamente para a memoria principal. Um modo alternativo, que alguns DMAs usam estabelece que o controlador de dispositivo deve enviar uma palavra para o controlador de DMA, que por sua vez requisita o barramento para escrever a palavra para qualquer que seja seu destino.

As maiorias dos controladores de DMA usam endereçamento de memoria física para suas transferências. O uso de endereços de memoria física requer que S.O converta o endereço virtual do buffer de memoria em um endereço físico. Então o controlador de DMA deve usar a unidade de gerenciamento da memoria (MMU) para fazer essa tradução. Somente no caso em que a MMU é parte da memoria, e não da CPU, os endereços virtuais são colocados no barramento.

Nem todos os computadores usam DMA, pois se argumenta que a CPU é muito mais veloz que o controlador de DMA e pode fazer o trabalho muito mais rápido.

Interrupções Revistadas

Em hardware, as interrupções trabalham: quando um dispositivo de e/s finaliza seu trabalho, ele gera uma interrupção (se estiverem habilitadas). Ele envia um sinal pela linha do barramento a qual está associado. O sinal é detectado pelo chip, controlador de interrupção localizado na placa mãe, o qual decide o que fazer. Se nenhuma outra interrupção está pendente, o controlador de interrupção processa a interrupção imediatamente. Se outra interrupção está em tratamento, ou outro dispositivo fez uma requisição com maior prioridade, o dispositivo é ignorado. Ele continua a gerar interrupção no barramento até ser atendido.

Para tratar a interrupção, o controlador coloca um numero nas linhas de endereço, citando qual dispositivo deve observar e passa a interrupção para a CPU. O sinal de interrupção faz com que a CPU pare aquilo que esta fazendo e inicie outras atividades. Os números colocados na linha de endereçamento são usados como índice no vetor de interrupção. Esse vetor aponta para uma rotina de tratamento de interrupção.

Interrupção Precisa

Uma Interrupção que deixa a máquina num estado bem definido. Propriedades: PC é salvo em um lugar conhecido. Todas as instruções anteriores a apontadas pela CPU foram executadas. Nenhuma instrução posterior a apontada pela CPU foram executadas. O estado da instrução apontada pelo PC é conhecido Uma instrução que não atende a estes requisitos são chamadas de interrupções Imprecisas.

Objetivos do SW de E/S

  • Independência do dispositivo: Propõe que deveria ser possível escrever programas aptos a acessar qualquer dispositivo. Relacionado a isso, está a nomeação uniforme. O nome de um arquivo ou dispositivo deve ser uma cadeia de caracteres ou números inteiros independentes do dispositivo. Tratamento de erros. Os erros deveriam ser tratados e mais perto possível do HW.
  • Orientada a Interrupções: Quando a impressora imprime um caractere e está preparado para aceitar o próximo caractere, ela gera uma interrupção. Esta interrupção da impressora é executada. Se não existem mais caracteres para imprimir, o tratador de interrupções executa alguma ação para desbloquear o usuário solicitante. Ou, ele envia o caractere seguinte, confirma a interrupção e retorna para o processo que parou E/S usando DMA.
  • DESVANTAGEM: É a ocorrência de interrupções para cada caractere. Desperdiçando tempo de CPU. Uma solução é usar DMA.

CAMADAS DE SW DE E/S

O SW de E/s é dividido em 4 camadas. Cada camada tem uma função bem definida para executar e uma interface para as camadas.

Drivers do dispositivo

Cada controlador tem alguns registradores do dispositivo, utilizado para dar comandos. O número de registradores do dispositivo e a natureza dos comandos variam de dispositivos para dispositivos. EX: um driver de mouse deve aceitar informações do mouse dizendo o quanto se moveu e qual botão foi pressionado. Em contra partida, o driver do disco deve saber sobre o setor, trilhas, cilindros e cabeçotes. Obviamente esses drivers serão muito diferentes. Como consequência, cada dispositivo de e/s ligado ao computador precisa de algum código especifico do dispositivo para controlá-lo. Esse código, chamado de driver do dispositivo,é em geral escrito pelo fabricante do dispositivo, juntamente com o dispositivo.Visto que cada sistema operacional precisa de seus próprios drivers dos dispositivos, os fabricantes fornecem drivers para os sistemas operacionais mais populares.

Cada driver de dispositivo normalmente trata um tipo de dispositivo. Para acessar o HW do dispositivo, o driver deve ser parte do S.O.

Os S.O geralmente classificam os drivers em categoria de dispositivo de blocos, os quais contem vários blocos de dados que podem ser endereçados independentemente - e os dispositivos de caractere, os quais geram ou aceitam um fluxo de caracteres.

Referências bibliográficas

  • Sistemas Operacionais Modernos 3º Edição – Andrew S. Tanenbaum Edição: 3º. Autor: Andrew S. Tanenbaum. Editora: Prentice Hall