SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
- Módulo 4 ENTRADAS E SAIDAS
Uma das principais funções dos sistemas operacionais é controlar os dispositivos de
entrada e saída (E/S ou I/O). O Sistema Operacional deve ser capaz de enviar comandos para os
dispositivos, capturar interrupções e tratar erros. Deve ainda oferecer uma interface entre os
dispositivos e o restante do sistema. Normalmente os códigos que controlam esses dispositivos
representam uma parte significativa do Sistema Operacional.
Figura 1 - Esquema de E/S
1. PRINCÍPIOS DE HARDWARE DE E/S
O Hardware é sempre visto de maneiras diferentes: os engenheiros elétricos vêem em
termos de fios, chips, etc; enquanto os programadores vêem a interface apresentada em forma de
software. No entanto, nossa preocupação é em entender como o hardware é programado e suas
interações.
1.1. Dispositivos de E/S
Tais dispositivos podem ser divididos em duas categorias:
a. Dispositivos de Bloco; e
b. Dispositivos de Caractere.
1
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
O primeiro armazena informações em blocos de tamanho fixo, cada um com seu próprio
endereço, que podem variar de 512 a 32768 bytes. A propriedade essencial deste tipo de
dispositivos é que é possível ler ou gravar independente de todos os outros, como por exemplos os
discos. O disco é um dispositivo de blocos porque independente de onde o braço esteja sempre é
possível buscar outro cilindro e esperar o bloco solicitado passar sob o cabeçote.
O dispositivo de caractere entrega ou aceita um fluxo de caracteres sem considerar
qualquer estrutura de bloco. Não é endereçável, tampouco possui estrutura de busca como no
disco. Exemplos deste tipo de dispositivo são as impressoras, placas de rede, mouses, dentre
outros.
Este modelo proposto é utilizado como uma base para construir, de forma independente de
dispositivo algumas partes do Sistema Operacional que tratam de E/S. O sistema de arquivos, por
exemplo, lida apenas com dispositivos de blocos abstratos e deixa a parte dependente do
dispositivo para o software de baixo nível chamado drives do dispositivo.
A comunicação de um dispositivo com o sistema computacional é feita através do envio de
sinais (cabo ou ar) num ponto de conexão chamado de porta.
O meio usado por um ou mais dispositivos para conexão com o computador é chamado de
barramento. Para cada barramento, é definido um protocolo que especifica um conjunto de
mensagens que podem ser enviadas pelos fios.
1.2. Controladoras de Dispositivos
Os dispositivos de E/S geralmente constituem em um componente mecânico e outro
eletrônico. Assim, é possível separar as duas partes para oferecer um projeto modular e genérico.
O componente eletrônico é chamado Controladora ou Adaptador de Dispositivo. Nos PC’s
normalmente tomam a forma de uma placa de circuito impresso que pode ser inserida em um slot
na placa mãe do computador. O componente mecânico é o dispositivo em si.
Uma placa controladora pode manipular até oito dispositivos idênticos. É comum encontrar
unidades de disco que se ajustam aos padrões de interfaces controladoras de disco IDE ou SCSI.
É importante saber este conceito, visto que o Sistema Operacional normalmente trabalha
com a controladora e não com o dispositivo; geralmente faz E/S escrevendo comandos nos
registradores das controladoras.
São tarefas do Controlador:
- converter um “stream” serial de bits em blocos de bytes
- realizar correção de erros se necessário
- tornar dados disponíveis para memória principal
- Sistema Operacional inicia o controlador com parâmetros
1.3. Barramento
A maioria dos pequenos computadores trabalha com barramento único para comunicação
entre CPU e controladoras. Grandes computadores, como os mainframes, utilizam um modelo
2
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
diferente com múltiplos barramentos e computadores especializados de E/S chamados de Canais
de E/S que assumem parte da carga da CPU principal.
Figura 2 - Barramento
A interface entre a controladora e o dispositivo normalmente é de muito baixo nível.
Independente da organização dos dados no disco o que realmente sai da unidade é um fluxo serial
de bits, iniciado com um preâmbulo, depois os 4096 bits em um setor e por fim uma soma de
verificação conhecida por ECC (Error-Correcting-Code – Código de Correção de Erros). O
preâmbulo é gravado quando o disco é formatado e contém o cilindro e o número do setor e
dados semelhantes, bem como as informações de sincronização.
O trabalho da controladora é converter o fluxo serial de bits em um bloco de bytes e
executar a correção de erros necessária, tudo isso em um buffer e então copiado para a memória
principal do computador.
Outro exemplo do trabalho de uma controladora é o monitor CRT. Ela lê a memória que
contém os caracteres a serem exibidos e gera sinais para instruir os feixes do CRT a fim de fazê-lo
escrever na tela. Se não fosse assim o programador do Sistema Operacional teria que programar
explicitamente uma varredura análoga para o tubo.
1.4. E/S Mapeada em Memória
Cada controladora possui um conjunto de registradores que são utilizados para possibilitar
a comunicação com a CPU. Em alguns computadores esses registradores fazem parte do
endereçamento da memória e são chamados de E/S mapeada em memória.
3
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
Figura 3 - a) Espaço de E/S e memória separados. b) E/S Mapeada na memória. c) Híbrido.
A E/S mapeada em memória não precisa de instruções especiais (código específico) para
ler/escrever nos registradores, nem há necessidade de mecanismo especial de proteção.
Os Registradores de controle são variáveis na memória, ou seja, Driver que pode ser
escrito totalmente em C. As instruções de referencia a memória referenciam registradores.
Loop: TEST PORT_4
BEQ READY
BRANCH LOOP
READY:
Este modelo também apresenta certas desvantagens como um espaço de endereçamento
para todos, módulos de memória e dispositivos que devem examinar referencias. Os barramentos
de memória de alta velocidade e dispositivos de E/S não conseguem examinar.
Figura 4 - (a) Arquitetura único barramento. (b) Arquitetura barramento duplo.
1.5. Interrupções
A E/S mapeada em memória é muito utilizado para representar as IRQ (Interrupt
ReQuest), que é uma entrada física para o chip controlador de instruções. Essas IRQ’s podem ser
controladas por jumper’s ou software. O chip controlador mapeia cada entrada de IRQ
4
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
(normalmente limitadas1) para um vetor de interrupção que localiza o respectivo software do
serviço de interrupção.
Dessa forma o Sistema Operacional executa E/S gravando comando nos registradores da
controladora. Em geral, muitos dos comandos têm parâmetros que também são carregados nos
registradores das controladoras. Assim, quando o comando é completado, a controladora gera
uma interrupção para permitir que o Sistema Operacional ganhe o controle da CPU e teste os
resultados da operação. A CPU obtém os resultados e o status do dispositivo lendo um ou mais
bytes de informação dos registradores da controladora.
As interrupções são muito usadas em Sistemas Operacionais modernos para tratamento de
eventos assíncronos, como um controlador que fica pronto para operações de E/S, falhas de
hardware ou chamadas a rotinas do sistema, desviando o controle para o kernel.
1.5.1. FUNCIONAMENTO
O hardware da CPU tem um fio chamado de linha de requisição de interrupções, que é
testado pela CPU depois da execução de cada instrução.
Quando a CPU detecta que um controlador enviou um sinal na linha de requisição de
interrupções (provocou uma interrupção), ela armazena alguns poucos valores referentes ao seu
estado na pilha do processo (PC, SP, etc) e desvia para uma rotina de tratamento de interrupções
em um determinado endereço de memória.
O tratador de interrupções realiza o tratamento necessário e executa uma instrução de
retorno de interrupção, que faz a CPU retornar ao estado anterior a interrupção.
Cada interrupção gera um endereço que, na maioria das arquiteturas, é usado como um
índice em uma tabela (vetor de interrupções), que contém endereços de memória das rotinas de
tratamento de interrupção.
Tabela 1: Vetores de Interrupção
Índice do Vetor
0
2
4
7
11
13
14
16
19-31
32-255
Descrição
Erro de divisão
Uso de apontador nulo
Overflow
Dispositivo não disponível
Segmento ausente
Acesso ilegal a posição de memória
Página ausente
Erro em operação em número em ponto flutuante
Entrada reservada (Não use)
Interrupções que podem ser desabilitadas
Exemplos de interrupções que geram interrupções:
1
Nos computadores Pentium estão limitadas a 15 IRQ’s.
5
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
- Operações de E/S;
- Tratamento de exceções (divisão por zero, endereço protegido);
- Mecanismo de paginação;
- Chamadas a rotina do núcleo (System Calls);
- Gerenciamento do fluxo de execução do núcleo (permite que trabalhos urgentes sejam
tratados primeiro).
FAZENDO UMA LEITURA NO DISCO
- Sistema Operacional informa à controladora que ela deve realizar uma leitura;
- Controladora lê o bloco do disco serialmente, bit a bit, para o seu buffer interno;
- Controladora calcula checksum;
- Controladora gera interrupção;
- Sistema Operacional lê o bloco do buffer e carrega na memória;
- Tal operação gasta muito tempo do processador!
INTERRUPÇÃO
- Sinal gerado por um determinado hardware ou por software (TRAP) que faz com que a
CPU pare aquilo que está fazendo e inicie outra atividade;
- Controladoras usam interrupções para avisar sobre o término de uma operação de E/S;
Figura 5 - Esquema de interrupção
1.6. Acesso Direto a Memória (DMA)
Muitas controladoras, especialmente as de dispositivos de bloco, suportam DMA.
Quando o DMA não está sendo utilizado, primeiro a controladora lê o bloco da unidade
serialmente, bit a bit, até que o bloco inteiro esteja no buffer interno da controladora. Em seguida,
é calculada a soma de verificação para certificar-se de que não ocorreram erros de leitura. Então,
a controladora gera uma interrupção. Quando o sistema operacional começa a executar, ele pode
ler o bloco de disco do buffer da controladora, um byte ou uma palavra por vez executando um
6
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
laço, com cada iteração lendo um byte ou uma palavra de um registrador da controladora de
dispositivo e armazenando-o na memória. Dessa forma o laço programado para ler os bytes, um
por vez, a partir da controladora desperdiça tempo da CPU.
O DMA foi inventado para liberar a CPU desse trabalho de baixo nível. Quando é utilizado, a
CPU fornece dois itens de informação para a controladora, além do endereço do bloco no disco: o
endereço de memória para onde o bloco deve ir e o número de bytes a transferir. A
controladora não pode copiar os dados diretamente para a memória, ela deve fazer uso de um
buffer interno, visto que mesmo iniciada a transferência para a memória principal (MP) outros
dados continuam entrando no disco; fazendo a bufferização desses blocos entrantes é possível
liberar o barramento. Quando um bloco é bufferizado internamente o barramento não é necessário
até que o DMA inicie. Outra razão da existência de um buffer interno é a possibilidade de realizar a
verificação no próprio buffer antes de mandá-lo para a Memória Principal.
Figura 6 - DMA
No exemplo acima, a controladora DMA está embutida na controladora de disco. É possível,
entretanto, utilizar controladoras DMA independentes.
Figura 7 - DMA
O processador precisa endereçar os controladores dos dispositivos para trocar dados com
eles, por exemplo, requisitar dados um byte a cada vez.
Depois que a controladora leu o bloco inteiro do dispositivo para seu buffer e verificou a
soma de verificação, a controladora gera uma interrupção. Assim, quando o Sistema Operacional
inicia, ele não precisa copiar o bloco para a memória, pois ele já está lá.
7
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
Nem todos os computadores utilizam DMA. O argumento contra é que a CPU principal é
freqüentemente muito mais rápida que a controladora de DMA e pode fazer o trabalho muito mais
rápido (Quando o fator limitante não é a velocidade do dispositivo de E/S). Se não houver outro
trabalho para a CPU, mantê-la esperando o dispositivo DMA é algo sem sentido.
ENTRADA E SAÍDA (E/S)
- E/S Programada: CPU faz polling para verificar se o dispositivo está pronto;
- E/S orientada à interrupção: Dispositivo avisa que está pronto através de uma
interrupção;
- E/S com DMA: CPU fica livre para fazer outras coisas e trata menos interrupções;
2. PRINCÍPIOS DE SOFTWARE DE ENTRADA E SAÍDA (E/S)
A meta geral do software de entrada e saída é organizar o software como uma série de
camadas, com as mais baixas preocupadas em esconder as peculiaridades do hardware das mais
altas e estas últimas preocupadas em apresentar uma interface amigável, limpa e simples aos
usuários.
2.1. Metas do Software de E/S
Um conceito muito importante no projeto de software de E/S é conhecido por
independência de dispositivo. Isso significa que é possível escrever um programa que faça a
leitura em um disquete, CD-Rom, disco rígido, etc sem que seja necessário modificar os programas
para cada tipo de dispositivo diferente. Cabe ao Sistema Operacional cuidar dos problemas
causados pelo fato de que esses dispositivos realmente são diferentes e requerem drivers de
dispositivo diferentes para realmente gravar os dados no dispositivo de saída.
Outra meta é a atribuição uniforme de nomes, onde o nome de um arquivo ou de um
dispositivo deve ser simplesmente uma string ou um número inteiro e não depender do dispositivo
de nenhuma maneira.
No UNIX todos os discos podem estar integrados juntos na hierarquia do sistema de
arquivos de maneiras arbitrárias para que o usuário não precise saber qual nome correspondente
a qual dispositivo. Exemplo: um CD-Rom montado no diretório /usr/backup.
Outra questão muito importante é o tratamento de erros que deve ser realizado o
mais próximo possível do hardware. Se a controladora descobrir um erro de leitura, ela deve
tentar corrigir o erro se for possível, caso contrário o driver de dispositivo deverá tratá-lo lendo o
8
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
bloco novamente. Muitos erros são transitórios, às vezes causado apenas por sujeita na mídia.
Somente quando as camadas mais baixas não conseguem resolver o problema é que as camadas
mais altas devem ser informadas.
Outro fator são as transferências síncronas (bloqueio) e assíncronas (interrupção).
Em geral, a E/S é assíncrona – a CPU inicia a transferência e segue adiante para fazer outra coisa
até a interrupção chegar. Os programas dos usuários utilizam muito a transferência síncrona depois de um comando READ, por exemplo, o programa é automaticamente suspenso até que os
dados estejam disponíveis no buffer. O Sistema Operacional tenta fazer com que as
operações baseadas em interrupção pareçam bloqueios para o usuário.
Por fim, um último fator preponderante de software de E/S são os dispositivos
compartilhados e os dedicados que fazem com que o Sistema Operacional precise saber como
tratar uns e outros sem causar problemas.
Todas as metas podem ser alcançadas estruturando o software de E/S em quatro camadas:
Manipuladores de Interrupções
Drivers de Dispositivo
Software de SO independente de dispositivo
Software de nível de usuário
Figura 8 - Camadas do Software de E/S
2.2. Manipuladores de Interrupções
O manipulador ou tratador de interrupções é uma parte do Sistema Operacional que cuida
do tratamento das interrupções. As interrupções devem ficar bem ocultas dentro de um Sistema
Operacional. Para isso, é preciso ter cada processo que inicia uma operação de E/S bloqueado até
que a E/S tenha-se completado e a interrupção tenha ocorrido. Para tanto é necessário executar
uma rotina de tratamento de interrupção propriamente dita e chamar o escalonador para decidir o
próximo processo a executar (Semáforos).
2.2.1. TRATADORES DE INTERRUPÇÃO
Tratadores de interrupção são parte do Sistema Operacional, usualmente bem escondidos.
Tendo o driver iniciado uma operação de E/S o mesmo é bloqueado até que a operação se
complete e uma interrupção ocorra, como por exemplo, operações sobre semáforos, recebimento
de uma mensagem, etc.
9
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
Ocorrendo a Interrupção a rotina de interrupção faz sua tarefa. Em seguida libera o driver
que iniciou a operação de E/S. Processar uma interrupção não é apenas interceptar uma
interrupção, sinalizar o driver e executar um IRET, mas exige trabalho adicional realizado pelo
Sistema Operacional.
Figura 9 - Níveis do mecanismo de E/S
Passos que devem ser realizados em software depois da interrupção ser completada:
1. Salvar registradores ainda não salvos por hardware;
2. Inicializar contexto para rotina de interrupção(TLB, MMU, tabela de páginas);
3. Inicializar pilha para rotina de interrupção;
4. Atender controlador de interrupções, reabilitar interrupções;
5. Copiar registradores de onde foram salvos (pilha) para tabela de processos;
6. Executar rotina de tratamento na qual extrai informações dos registradores do
controlador do dispositivo que está interrompendo;
7. Escolher próximo processo a executar;
8. Estabelecer contexto MMU para próximo processo;
9. Carregar registradores do próximo processo (PSW);
10. Iniciar execução do processo.
2.3. Drivers de Dispositivo
Todo código dependente de dispositivo deve estar nos drives de dispositivo. Estes devem
tratar de um tipo de dispositivo, ou uma classe de dispositivos.
Exemplo: Um único driver de terminal.
O driver de disco é a única parte do sistema operacional que sabe quantos registradores tal
controladora tem e para o que eles são utilizados. Sozinho ele sabe tudo sobre setores, trilhas
cilindros, cabeçotes, movimento de braço, fatores de intercalação, unidades de motor, etc no
trabalho de fazer o disco funcionar adequadamente.
Em termos gerais, o trabalho de um driver de dispositivo é aceirar solicitações abstratas do
software independente de dispositivo acima dele e cuidar para que a solicitação seja executada.
10
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
No geral, o trabalho de um driver de dispositivo é aceitar solicitações abstratas do software
independente do dispositivo acima dele e cuidar para que a solicitação seja executada. Para que
isso seja executado em um disco, o primeiro passo é traduzi-la de um termo abstrato para um
termo concreto – isso significa descobrir onde no disco o bloco requerido realmente está e em
seguida gravar nos registradores de dispositivos da controladora. Para que esse trabalho ocorra é
necessária a emissão de alguns comandos. Estes por sua vez, após a consecução do comando
bloqueia a si próprio até que as interrupções entrem para desbloqueá-lo.
Figura 10 - Camadas
2.4. Software de Sistema Operacional independente de dispositivo
Embora parte do software de E/S seja específico do dispositivo, uma grande parte dele é
independente do dispositivo. Esta divisão depende do sistema, visto que algumas funções que
poderiam ser feitas de uma maneira independente de dispositivo podem, na realidade, ser feitas
nos drivers.
Funções geralmente realizadas pelo software independente de dispositivo:
- Interfaceamento uniforme para drivers de dispositivo;
- Nomeação de dispositivo;
- Proteção de dispositivo;
11
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
- Fornecimento de um tamanho de bloco independente de dispositivo;
- Bufferização;
- Alocação de armazenamento em dispositivos de bloco;
- Atribuição e liberação de dispositivos dedicados;
- Informe de erros.
No MINIX a maioria do software independente de dispositivo é parte do sistema de
arquivos. Sua função básica é executar as funções de E/S que são comuns para todos dispositivos
e oferecer uma interface uniforme para o software de nível de usuário. Cuida ainda de realizar o
mapeamento de nomes simbólicos de dispositivos e de sua proteção. O sistema impede que os
usuários acessem dispositivos aos quais eles não têm direitos de acesso.
No UNIX, um esquema mais flexível é utilizado. Os arquivos especiais correspondentes aos
dispositivos de E/S são protegidos pelos bits rux normais. O administrador de sistema pode, então,
configurar as permissões adequadas para cada dispositivo.
Discos diferentes podem ter tamanhos de setor diferentes. Cabe ao software independente
de dispositivo esconder esse fato e oferecer um tamanho uniforme de bloco.
A bufferização também é uma questão, tanto para dispositivos de bloco como para os de
caractere. A entrada de teclado que chega antes de ser necessária também requer bufferização.
O tratamento de erros, de modo geral, é feito pelos drivers. A maioria dos erros é
altamente dependente do dispositivo; então, somente o driver sabe o que fazer (ex.: tentar
novamente, ignorar, pane). Um erro típico é causado por um bloco de disco danificado que não
pode ser mais lido. Depois que o driver tentou ler o bloco certo número de vezes, ele desiste e
informa ao software independente de dispositivo. A maneira como o erro é tratado daqui é
independente de dispositivo. Se o erro ocorreu durante a leitura de um arquivo de usuário, pode
ser suficiente informar o erro ao processo que registrou a leitura. Entretanto, se ele ocorreu
durante a leitura de uma estrutura de dados crítica do sistema, como o bloco que contém o mapa
de bits mostrado quais blocos estão livres, o sistema operacional não pode ter outras escolha
senão imprimir uma mensagem de erro e terminar.
2.5. Software de E/S no Espaço do Usuário
Embora a maioria do software de E/S esteja dentro do Sistema Operacional, uma pequena
parte consiste em bibliotecas vinculadas em programas de usuário e até mesmo programas
inteiros que executam fora do kernel. Uma biblioteca-padrão de E/S contém diversos
12
SISTEMAS OPERACIONAIS ABERTOS
Prof. Ricardo Rodrigues Barcelar
http://www.ricardobarcelar.com.br
procedimentos que envolvem E/S e todas executam como parte de programas de usuário.
Contudo, nem todo software de E/S no nível de usuário consistem em procedimentos de
biblioteca. Um exemplo é o sistema de spool. Fazer spool é uma técnica de lidar com dispositivos
dedicados de E/S em um sistema de multiprogramação. Embora pudesse ser uma técnica fácil
deixar que qualquer processo de usuário abrir o arquivo especial de caractere para a impressora,
suponha que um processo abrisse-o e, então não fizesse nada durante horas. Nenhum outro
processo poderia imprimir qualquer coisa.
A técnica de spool não é utilizada somente para impressoras. Ela também é utilizada em
outras situações, como transferência de arquivos.
A figura abaixo resume o sistema de E/S, mostrando todas as camadas e as principais
funções de cada uma. As setas mostram o fluxo de controle:
Figura 11 - Sistema de Entrada e Saída
Quando um programa de usuário tenta ler um bloco de um arquivo, por exemplo, o
Sistema Operacional é invocado para executar a chamada. O software independente de dispositivo
olha no cache de blocos. Se o bloco necessário não estiver aí, ele chama o driver de dispositivo
para enviar a solicitação ao hardware. O processo, então, é bloqueando até que operação de disco
seja concluída.
Quando o disco termina, o hardware gera uma interrupção. O manipulador de interrupções
é executado para descobrir o que aconteceu, isto é, qual dispositivo quer atenção imediatamente.
Então, ele extrai o status do dispositivo e acorda o processo adormecido para terminar a
solicitação de E/S e deixar o processo de usuário continuar.
13
Download

Modulo 4 - Entrada e Saída