Capítulo 5 - Entrada/Saída
5.1 Princípios do hardware de E/S
5.2 Princípios do software de E/S
5.3 Camadas do software de E/S
Capítulo 5 - Entrada/Saída
5.1 Princípios do hardware de E/S
5.2 Princípios do software de E/S
5.3 Camadas do software de E/S
Controladores de Dispositivos


Composto por dispositivos:

Mecânico

Eletrônico
Exemplo:

HD


Mecânico: Discos magnéticos com cabeçote de leitura e
motores que rotacionam e movem os discos e
cabeçotes.
Eletrônico: Controlador
Controladores de Dispositivos



Podem ser reutilizados em outros dispositivos,
fornecendo uma modularização.
Tem como principal função converter o fluxo
serial de bits em blocos de bytes e corrigir
eventuais erros.
Podem ter registradores dentro do espaço de
memória (E/S mapeada na memória).
E/S Mapeada na Memória
(a) Espaços de memória e E/S separados
(b) E/S mapeada na memória
(c) Híbrido
Espaço de Memória e E/S
Separados


Possui registradores específicos para E/S.
É necessário usar códigos específicos de
Assembly para acessar os registradores.
E/S Mapeada na Memória



Mapeia todos os registradores de controle no
espaço de memória.
É possível acessar através de métodos IN/OUT
de C.
Não necessita de qualquer mecanismo de
proteção, pois o usuário está apenas
acessando uma área da memória.
E/S Mapeada na Memória (Cont.)

Desta forma o SO é capaz de modificar os
acesso do usuário a um dispositivo específico
apenas incluindo/removendo as páginas
desejas em sua tabela de páginas.
Dois Espaços de Endereçamento
de E/S


Este último esquema reserva um espaço na
memória para os dispositivos de E/S.
Tem desvantagem a necessidade de calcular
em tempo de inicialização do sistema quais
endereços de memória estão reservados para
os dispositivos de E/S.
Direct Memory Access (DMA)


O controlador solicita um bloco de dados,
armazena-o em um buffer e o contador de
blocos é decrementado. Ao final deste loop, os
blocos de dados são copiados diretamente na
memória e uma interrupção é solicitada.
Desta forma a CPU é utilizada apenas para
iniciar a transferência e esta pode ser alocada
para o próximo processo.
Direct Memory Access (DMA)
Buffer Interno



O uso de um buffer interno é de extrema
importância, pois os dados chegam a uma taxa
constante ao controlador.
Caso não houvesse um buffer, os dados seriam
perdidos e teriam quer ser relidos.
E no caso do barramento se manter ocupado
por um longo tempo, um erro de overrun é
levantado.
Buffer Interno


Uma solução para este problema é a leitura
intercalada dos dados no disco.
A intercalação única resolve o problema
quando a taxa de leitura dos dados ocorrem
duas vezes mais rápidas que o controlador
consegue escrever na memória.
Buffer Interno
(a) Nenhuma intercalação.
(b) Intercalação única.
(c) Intercalação dupla.
Capítulo 5 - Entrada/Saída
5.1 Princípios do hardware de E/S
5.2 Princípios do software de E/S
5.3 Camadas do software de E/S
Projeto de Software de E/S

Objetivos

Independência de dispositivo.

Nomeação uniforme.

Tratamento de erros.
Projeto de Software de E/S

Independência de dispositivo:


A escrita de programas que acessam os
dispositivos de E/S não deve distinguí-los.
Um programa escrito para acessar um dispositivo
de bloco (HD) deve ser capaz de acessar da
mesma forma um outro dispositivo de bloco (cdrom).
Projeto de Software de E/S

Nomeação uniforme:


Deve suportar uma nomeação independente de
dispositivo, usando uma cadéia de caracteres ou
um número inteiro.
No Unix, todos os discos podem ser integrados a
hierarquia do sistema de arquivo e o usuário não
precisa qual nome corresponde a qual dispositivo.
Projeto de Software de E/S

Tratamento de erros:



Os erros devem ser tratados o mais próximo
possível do hardware.
O erro só é passado adiante quando não é possível
corrigí-lo.
Um exemplo é quando um disquete está sendo lido
e o cabeçote está sujo, uma nova solicitação de
leitura pode remover a sujeira do cabeçote e o
dado é, finalmente, lido.
Transferência Síncrona vs
Assíncrona


Na transferência síncrona é realizado o
bloqueio, ou seja, o processo se mantém
esperando o resultado/disponibilidade do
dispositivo.
A assíncrona é orientada à interrupção, a CPU
inicia o processo e é alocada para o próximo
processo.
Transferência Síncrona vs
Assíncrona


Os programas de usuário são mais simples de
escrever usando operações bloqueantes
(síncrona).
Fica a cargo do sistema operacional realizar as
operações orientadas à interrupção parecerem
bloqueantes (assíncrona).
Uso de Buffer



Os programas de E/S podem utilizar buffers
para o armazenamento temporário dos dados.
Um exemplo é um pacote proveniente da placa
de rede.
O SO não sabe onde armazenar o pacote sem
antes ser analizado.
Dispositivos Compartilhados vs
Dedicados



Alguns dispositivos podem ser usados por
vários usuários simultaneamente.
Este compartilhamento só é possível em Hds
devido a sua capacidade de acesso aleatório
Unidades de fita não é capaz de ser
compartilhada (dedicada).
Formas de E/S

Existem três maneiras de se realizar E/S:

E/S programada.

E/S orientada a interrupção.

E/S que usa DMA.
E/S Programada

A CPU realiza todo o trabalho e fica dedicada
ao processo que solicitou a operação.
E/S Programada
E/S Programada

O SO escreve no registrador de E/S os dados
byte a byte (b) e, após cada byte escrito, o SO
fica esperando o dispositivo ficar disponível
novamente (c).
E/S Programada
E/S Programada


A principal desvantagem do uso deste método
é que a CPU fica contínuamente verificando o
status do dispositivo, causando uma espera
ociosa ou polling.
Tem como principal vantagem ser
extremamente simples de implementar.
E/S Orientada à Interrupção

Permite que a CPU fique livre para realizar
outras operações enquanto o dispositivo não
fica disponível.
E/S Orientada à Interrupção
E/S Orientada à Interrupção


O processo envia o primeiro byte, quando o
dispositivo fica disponível novamente, uma
interrupção é lançada e o tratamento de
interrupção é chamado (a).
O tratamento de interrupção verifica se ainda
há algum dado a ser enviado ao dispositivo,
caso haja, o próximo byte é enviado e o
processo continua bloqueado (b).
E/S Orientada à Interrupção


Tem como principal desvantagem a ocorrência
de uma interrupção a cada byte.
Interrupções são operações custosas.
E/S com DMA

O controlador de DMA faz o papel da CPU e a
operação é realizada usanda E/S programada.
E/S com DMA
E/S com DMA


O processo solicita a operação de E/S e o
controlador DMA inicia a tranferência byte a
byte, assim como é feita a E/S programada (a).
Assim que o buffer inteiro é transferido, uma
interrupção é lançada e o processo pode enviar
outro buffer ou ser desbloqueado.
E/S com DMA


A principal vantagem é que ocorre uma
interrupção a cada buffer, invés de uma a cada
byte.
Porém, o controlador pode ser mais lento que a
CPU e isto impediria que o dispositivo funcione
em sua máxima velocidade.
Capítulo 5 - Entrada/Saída
5.1 Princípios do hardware de E/S
5.2 Princípios do software de E/S
5.3 Camadas do software de E/S
Camadas do Software de E/S
Camadas do Software de E/S
Tratadores de Interrupção


As interrupções devem ser escondidas ao
máximo.
Isto é feito bloqueando o driver que iniciou a
opração de E/S.
Tratadores de Interrupção


O tratamento de uma interrupção é algo bem
mais complexo que um simples UP sobre
algum semáforo.
Uma série de passos devem ser executados
quando uma interrupção ocorre.
Passos de Tratamento de
Interrupção (1)
1. Salva quaisquer registradores que ainda não
foram salvos pelo hardware de interrupção.
2. Estabele um contexto para a rotina de
tratamento de interrupção.
3. Estabele uma pilha para a rotina de tratamento
de interrupção.
Passos de Tratamento de
Interrupção (2)
4. Sinaliza o controlador de interrupção.
5. Copia os registradores de onde eles foram
salvos para a tabela de processos.
6. Executa a rotina de tratamento de interrupção.
Ela extrairá informações dos registradores do
controlador do dispositivo que está
interrompendo.
Passos de Tratamento de
Interrupção (3)
7. Escolhe o próximo processo a executar. Se a
interrupção deixou pronto algum processo de
alta prioridade anteriormente bloqueado, este
pode ser escolhido para executar agora.
8. Estabelece o contexto da MMU (Unidade de
gerenciamento de memória) para o próximo
processo a executar. Algum ajuste na TLB
(tabela de tradução de endereços) também
pode ser necessário.
Passos de Tratamento de
Interrupção (4)
9. Carrega os registradores do novo processo,
incluido sua PSW (Program Status Word).
10. Inicia a execução do novo processo.
Camadas do Software de E/S
Drivers do Dispositivo


Cada dispositivo necessita de um código
específico do mesmo para controlá-lo.
Este código é chamado de driver do
dispositivo.
Drivers do Dispositivo


Geralmente é escrito pelo fabricante e
fornecido juntamente com o dispositivo.
Cada sistema operacional precisa do seu
próprio driver.
Drivers do Dispositivo


Para ter acesso direto aos registradores dos
dispositivos, o driver deve fazer parte do núcleo
do SO.
Isso é devido à proteção de acesso aos
registradores de E/S.
Drivers do Dispositivo


É possível criar um driver que execute no
espaço do usuário e solicite ao SO a escrite e
leitura dos registradores.
Isto, na realidade, até proporcionaria uma maior
estabilidade ao SO, visto que drivers
defeituosos podem interferir no núcleo do SO.
Posicionamento Lógico dos Drivers
Drivers do Dispositivo



O SO deve permitir a instalação de novos
drivers.
No Unix o SO costumava ser um único
programa binário, compilado para usar os
periféricos.
Qualquer mudança nos dispositivos de E/S
necessitava uma recompilação do SO.
Drivers do Dispositivo

Em geral, possuem uma estrutura similar:


Inicia verificando se os parâmetros estão corretos
e, algumas vezes, uma tradução dos valores é
necessária
Verifica se o dispositivo está disponível e se o
hardware pode executar a requisição
imediatamente.

Em alguns casos que alguns dispositivos sejam ligados.
Drivers do Dispositivo


O driver escreve os comandos nos
registradores e, alguns, podem ter uma de
comandos que são executados sem a ajuda do
SO.
Controlar um dispositivo significa emitir uma
sequência de comandos.

É no driver onde a sequência de comandos está
armazenada.
Drivers do Dispositivo


Nos casos que o driver espera por uma ação
ser completada, este se autobloqueia e espera
por uma interrupção para desbloqueá-lo.
Ao fim da operação o driver verifica se há
alguma requisição pendente, caso não haja,
este se bloqueia e fica a espera de novas
requisições.
Drivers do Dispositivo



Na realidade, o processo de espera e execução
de um comando pode ser mais complexo.
Uma requisição pode chegar enquanto o driver
está executando alguma ação.
Alguns devem ser capazes de prover
reentrância.

Capacidade de executar o código
concorrentemente e de forma segura.
Drivers do Dispositivo


Um dispositivo pode ser removido durante a
execução de um processo que o utilizava.
O driver deve ser capaz de interromper a
transferência e informar os processos sobre a
remoção.

Isto deve ser feito sem causar nenhum dano às
estruturas de dados do núcleo.
Camadas do Software de E/S
Software Independente de
Dispositivo
•
O SO deve fornecer uma interface uniforme a
todos os drivers.
–
Um HD (dispositivo de bloco) não deve ser
tratado diferente de um CD, por exemplo.
–
Sem isto, as funções de acesso seriam
diferentes para cada dispositivo.
–
Facilita o desenvolvimento.
Software Independente de
Dispositivo
•
O acoplamento de um novo driver se torna
mais fácil.
–
•
O desenvolvedor sabe o que se espera dele
(quais funções devem ser disponibilizadas).
Na prática não é exatamente assim,
entretanto, alguns dispositivos compartilham
semelhanças.
Uso de Buffer
(a) Entrada sem uso de buffer.
(b) Buffer no espaço do usuário.
(c) Buffer no espaço do usuário e no
núcleo.
Uso de Buffer
•
Novamente o uso de buffer é de extrema
importância.
•
Sem um buffer, a CPU é interrompida,
constantemente, para armazenar/analisar o
dado que chega.
–
Os dados podem chegar a uma taxa constante
e os novos dados podem ser perdidos.
Uso de Buffer
(a) Entrada sem uso de buffer.
(b) Buffer no espaço do usuário.
(c) Buffer no espaço do usuário e no
núcleo.
Buffer no Espaço do Usuário


Uma solução proposta para este problema é
utilizando um buffer no espaço de usuário.
A rotina de tratamento de interrupção
preenche o buffer com os dados que chegam.

O processo é desbloqueado quando este está
cheio.
Buffer no Espaço do Usuário
•
Se o buffer estiver paginado no disco quando
um dado chegar, este terá que ser trazido a
memória principal para incluir o novo dado.
•
O buffer pode ser trancado na memória e se
manter na memória principal.
–
Porém se vários processos realizam isto, a
memória ficará cheia de processos que não
podem ser paginados.
Uso de Buffer
(a) Entrada sem uso de buffer.
(b) Buffer no espaço do usuário.
(c) Buffer no espaço do usuário e
no núcleo.
Buffer no Espaço do Usuário e no
Núcleo
•
Um buffer pode ser criado no núcleo e os
dados são transferidos para o buffer no
espaço do usuário quando este está cheio.
–
Novamente, o tratador de interrupção preenche
o buffer no núcleo.
–
A página associada ao buffer do usuário é
carregada na memória principal e os dados são
copiados.
Buffer no Espaço do Usuário e no
Núcleo
•
Porém, os dados que chegam enquanto a
página do buffer do usuário está sendo
carregada são perdidos.
•
A velocidade com que o buffer no núcleo é
esvaziado pode ser menor que a velocidade
com que os dados chegam.
Uso de Buffer
(a) Entrada sem uso de buffer.
(b) Buffer no espaço do usuário.
(c) Buffer no espaço do usuário e no
núcleo.
Buffer Duplo no Núcleo
•
Uma melhor solução é utilizando um buffer
duplicado no núcleo.
•
Enquanto um buffer está sendo esvaziado, o
outro é utilizado para armazenar os dados
que chegam.
Uso de Buffer na Saída
•
Estes problemas podem ocorrer na saída de
dados, também.
•
O processo poderia ficar bloqueado até o
envio ser concluido.
–
Porém, isto pode levar um longo tempo.
Uso de Buffer na Saída
•
O processo poderia ser liberado e uma
interrupção seria lançada para avisar a
conclusão da transferência.
–
Poderia gerar uma condição de corrida.
–
Difícil de programar.
–
O processo não sabe quando poderá usar o
buffer novamente.
Uso de Buffer na Saída
•
O uso de um buffer no núcleo permite que o
processo seja liberado imediatamente.
–
O processo pode usar o buffer usado na
transferência novamente, pois foi copiado para
o buffer do núcleo.
Uso de Buffers
•
O uso de buffers pode diminuir o desempenho
das atividades de E/S.
–
Os passos devem seguir uma ordem.
–
Introduzindo novos passos (para uso do buffer)
iria aumentar a quantidade de passos.
Relatório de Erros
•
Os erros específicos de dispositivo devem ser
tratados pelo driver.
•
Mas o modelo do tratamento de erro não
depende do dispositivo.
Relatório de Erros
•
Podem existir erros de programação.
–
•
Solicitações erradas.
Fica a cargo do driver resolver erros reais de
E/S.
Alocação/Liberação de Dispositivos
Dedicados
•
O SO deve examinar as requisições e aceitála ou rejeitá-la.
–
•
Depende da disponibilidade do dispositivo e
das permissões de acesso.
Uma solução é realizar uma chamada open
para a abertura de arquivos especiais (que
estão diretamente associados ao dispositivo).
–
Caso não esteja disponível, o open falha.
Alocação/Liberação de Dispositivos
Dedicados
•
O processo também poderia ser bloqueado
até o dispositivo ser liberado.
–
Pode causar um deadlock.
Tamanho de Bloco Independente de
Dispositivo
•
Os discos possuem diferentes tamanhos de
setores.
•
Cabe ao software independente de dispositivo
esconder isto.
•
Deve ser fornecido um tamanho uniforme.
–
As camadas acima tratam apenas de
dispositivos abstratos.
Camadas do Software de E/S
Software de E/S no Nível do
Usuário
•
Maior parte do software de E/S está dentro do
SO.
•
Uma pequena parte dele é constituida de
bibliotecas ligadas aos programas do usuário
ou até mesmo programas completos que
rodam fora do núcleo.
Software de E/S no Nível do
Usuário
•
As chamadas do sistema são normalmente
feitas por procedimentos de bibliotecas.
–
•
O conjunto de todos os procedimentos de
biblioteca fazem parte do sistema de E/S.
Nem todo software de E/S no nível do usuário
utiliza procedimentos de biblioteca.
–
Sistema de Spooling se enquadra nesta
categoria.
Spooling
•
O uso de spool é uma forma de lidar com
dispositivos dedicados de E/S em sistemas
multiprogramação.
•
Um processo de usuário poderia escrever
diretamente na impressora.
–
Mas se este reter o controle por várias horas,
nenhum outro processo poderá usá-lo.
Spooling
•
•
Para resolver este problema, são utilizados:
–
Daemon, é um processo especial que realiza a
requisição de E/S.
–
Diretório de spool, é um diretório especial onde
as requisições são colocadas.
O daemon é o único processo com acesso ao
dispositivo dedicado.
Spooling
•
É, principalmente, utilizado em sistemas de
impressão.
•
Pode ser usado em sistemas de transferência
de arquivos pela rede, sistemas de
newsgroups...
Download

Buffer