Buscar

Input_Output

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 26 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 26 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 26 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

1 SO I – Cap. 5 1 SO I – Cap. 5 
5 Input/Output 
5.1 Princípios de I/O em Hardware 
 
5.1.1 Dispositivos de I/O 
 
Abaixo podemos ver alguns dispositivos e suas velocidades típicas: 
 
Dispositivo Taxa de transmissão 
Teclado 10 bytes/seg 
Mouse 100 bytes/seg 
Modem 56K 7 KB/seg 
Canal de telefone 8 KB/seg 
Impressora laser 100 KB/seg 
Scanner 400 KB/seg 
Ethernet 1.25 MB/seg 
USB 1.5 MB/seg 
Disco IDE 5 MB/seg 
CD-ROM 40x 6 MB/seg 
Ethernet 100 Mbps 12.5 MB/seg 
Bus ISA 16.7 MB/seg 
Disco EIDE (ATA-2) 16.7 MB/seg 
FireWire 50 MB/seg 
Disco SCSI Ultra 2 80 MB/seg 
Gigabit Ethernet 125 MB/seg 
Bus PCI 528 MB/seg 
AGP 2,1 GB/seg 
Sun Gigaplane XB backplane 20 GB/seg 
Categorias de dispositivos: 
 Bloco: armazena informações em blocos de tamanho fixo. 
 Ex.: discos, fitas. 
 Caracter: entrega ou aceita streams de dados, sem considerar 
qualquer estrutura. 
 Ex.: terminais, impressoras, redes, mouse, etc. 
 Outros: relógio, terminais com telas mapeadas em memória. 
 
5.1.2 Controladores de dispositivos 
 
Componentes de uma unidade de I/O: 
 Mecânico: a unidade em si (pode englobar também elementos 
eletrônicos); 
 Eletrônico: controlador do dispositivo. 
 
Em PCs, o controlador é um cartão de circuito impresso que pode 
ser inserido nos slots do computador. 
 
Os mini e microcomputadores modernos usam um sistema de 
barramento único para acessar todos os dispositivos. 
Mainframes usam múltiplos barramentos e computadores 
especializados em I/O (canais de I/O) para diminuir a carga da CPU 
principal. 
Ex.: controlador de disco. 
 Um disco pode ser formatado com 32 setores de 2KB por trilha. 
 Quando se faz uma leitura, o que o disco devolve é um stream 
serial de bits! 
 Composição do stream: 
 Um preâmbulo; 
 16384 bits do setor; 
2 SO I – Cap. 5 2 SO I – Cap. 5 
 Checksum e/ou código de correção de erros (ECC). 
 Preâmbulo: escrito quando o disco é formatado; 
 Contém o cilindro, número e tamanho do setor, etc. 
 
Função da controladora de disco: 
 Converter o stream de bits em um bloco de bytes; 
 O bloco é mantido num buffer dentro da controladora. 
 Fazer correções de erros; 
 Declarar o bloco livre de erros. 
 
Registradores: 
 Cada controladora possui alguns para se comunicar com a CPU; 
 Em alguns computadores, esses registradores fazem parte da 
memória regular – I/O mapeado em memória! 
 
Controladora de I/O Endereços de I/O Vetor de interrupção 
Teclado 060-063 9 
Disco 320-32F 13 
Impressora 378-37F 15 
Disquete 3F0-3F7 14 
RS232 (princ.) 3F8-3FF 12 
RS232 (secund.) 2F8-2FF 11 
 
Endereços de I/O: 
 Faixas de endereços são relacionadas com certos dispositivos; 
 A identificação de um comando pelo dispositivo correto é feita 
pela lógica de decodificação da controladora; 
 Em geral, as faixas são padronizadas; 
 Se um fabricante altera a faixa de endereços de um dispositivo, 
todos os programas que trabalham com endereços de I/O (SO!) 
precisam ser modificados para rodar naquele computador. 
 
 O SO usa os registradores para passar comandos para a 
controladora; 
 Há registradores para receber parâmetros, também; 
 O SO dispara um comando e vai tratar de outras coisas; 
 Quando a controladora termina um comando, ela interrompe a 
CPU para avisar que o que foi pedido está feito. 
 
5.1.3 I/O Mapeado em Memória 
 
Cada controladora possui alguns registradores de controle: 
 Permitem a comunicação com a CPU; 
 O SO pode escrever neles para: 
o Passar dados; 
o Receber dados; 
o Ligar ou desligar o dispositivo. 
 Lendo esses registradores, o SO pode: 
o Determinar o estado do dispositivo; 
o Verificar se ele pode aceitar um novo comando. 
 
Além disso, cada controladora possui um ou + buffers, que o SO usa 
para escrever ou ler os dados das operações pedidas. 
 
Há duas abordagens para a CPU se comunicar com os registradores 
das controladoras. 
 
3 SO I – Cap. 5 3 SO I – Cap. 5 
Na 1
a
. cada registrador recebe um número de porta; instruções 
especiais permitem ler ou gravar dados nesses registradores. 
 
IN <REG> <PORTA> 
 
Lê um dado da porta <PORTA> para o registrador <REG> 
 
OUT <PORTA> <REG> 
 
Escreve o conteúdo de <REG> na porta <PORTA> 
 
A 2
a
. abordagem é mapear todos os registradores de controle em 
memória. Cada registrador é associado a um endereço de memória 
que não é associado a uma posição de memória real. 
 
 
 
Um sistema misto, usado pelo Pentium, possui buffers de 
controladoras nos endereços de 640KB a 1MB, enquanto os 
registradores são mapeados em memória do endereço 0 a 64KB. 
 
Quais seriam as vantagens e desvantagens desses métodos? 
 
Para o I/O mapeado em memória, a vantagem é que um programa 
escrito inteiramente em C pode controlar o I/O sem dificuldades. 
Basta mapear os registradores em variáveis do programa. 
Se o sistema usa portas e instruções de I/O, um programa em C 
precisa ter algumas rotinas em assembler. 
 
O I/O mapeado em memória permite melhor proteção, já que o SO 
pode evitar que um processo faça I/O não mapeando a região dos 
registradores no seu espaço de endereçamento. 
Se as controladoras estiverem em páginas diferentes, é possível dar 
um dispositivo a um usuário sem que ele possa acessar os demais. 
 
Com I/O mapeado em memória, instruções que testam memória 
também podem testar os registradores. 
Isso simplifica os programas. 
Se não, é preciso ler as portas para algum registrador antes de testá-
lo. 
 
Uma desvantagem importante é que, hoje, a maioria dos 
computadores possui caches de memória. Colocar as páginas dos 
registradores em cache seria desastroso. 
Ex. Um programa testa um registrador – aquela página vai para o 
cache – um novo teste pega o valor lido anteriormente – quando o 
I/O for feito (e o registrador mudar), o programa não terá como 
descobrir que isso ocorreu. 
 
Uma solução para esse problema é desativar o cache para 
determinadas páginas. Isso obriga a se ter um hardware + complexo, 
e o SO também. 
 
4 SO I – Cap. 5 4 SO I – Cap. 5 
Mas o grande problema parece estar na seguinte tendência atual. 
Os computadores modernos possuem barramentos dedicados de alta 
velocidade para acesso à memória. 
 
 
 
O problema é que os dispositivos não tem como ver os acessos à 
memória, já que eles seguem por barramentos diferentes. 
 
Há 3 soluções para esse problema, nenhuma delas completamente 
boa: 
 A CPU envia todos os endereços para a memória; se algum não 
responder, ela envia por outro barramento. 
o Exige + complexidade do hardware. 
 Usar um dispositivo intermediário que testa os endereços e 
repassa-os para dispositivos potencialmente interessados. 
o O problema é que dispositivos não conseguem tratar 
requisições na mesma velocidade da memória. 
 Usar um sistema + complexo, como a ponte PCI do Pentium, que 
possui tabelas carregadas em tempo de boot com faixas de 
endereços reservados. 
o Endereços recebidos que pertencem a regiões não 
mapeadas são desviados para o barramento PCI. 
 
 
5.1.4 DMA – Direct Memory Access 
 
Como a leitura de disco acontece sem DMA? 
1. A controladora lê um bloco (1 ou + setores) do disco; 
2. Isso é feito bit a bit, até que o bloco inteiro esteja armazenado no 
buffer interno da controladora; 
3. Em seguida, ela computa o checksum para verificar se houve 
algum read error; 
4. A controladora causa uma interrupção; 
5. O SO realiza um loop lendo byte a byte (ou palavra a palavra) do 
buffer, através de um registrador da controladora, e transfere o 
bloco para a memória. 
 
Problema: perde tempo de CPU! 
 
O DMA livra a CPU deste trabalho: 
 Ao fazer o pedido de leitura, a CPU fornece 3 parâmetros: 
 Endereço do bloco no disco (setor); 
 Endereço de memória onde o bloco deve ser armazenado; 
 Número de bytes a transferir. 
 Para fazer DMA, a controladora precisa ter alguns elementos: 
 O buffer; 
 Um registrador que aponta o byte atual dentro do buffer; 
 Um registradorcom o endereço de memória para transferir o 
byte atual; 
 Um contador de bytes a transferir. 
5 SO I – Cap. 5 5 SO I – Cap. 5 
 Loop de transferência: 
 A controladora transfere o byte atual do buffer para a 
memória; 
 Incrementa os 2 registradores; 
 Subtrai 1 do contador; 
 Quando o contador chega a Zero, o processo para. 
 Ao término da transferência, ocorre uma interrupção para avisar 
o SO que os dados estão no endereço dado! 
 
 
 
Por que é preciso um buffer para a controladora? 
 O barramento é único! 
 O fluxo de bits do disco para a controladora não pode ser 
interrompido; 
 Se a controladora vai armazenar um byte na memória e o 
barramento está ocupado por outra operação, ela tem que 
esperar! 
 Isso pode levar a perda de bits do disco se a controladora não 
estiver pronta para recebê-los! 
 
O buffer interno torna o projeto da controladora mais simples. Ela 
não precisa ser real time! 
 
Conseqüências: 
 Enquanto a transferência está sendo feita, o próximo setor pode 
passar pela cabeça de leitura! 
 Algumas controladoras não conseguem fazer entrada e saída 
simultaneamente: 
 Seriam necessários pelo menos 2 buffers; 
 Além disso, seria preciso um sistema de duplo controle 
(possivelmente paralelo)! 
 Neste caso, enquanto a controladora está transferindo dados para 
a memória, o próximo setor é perdido. 
 
Interleaving: 
 Processo de armazenar os setores em disco de forma alternada; 
 Em vez de os blocos serem mantidos em seqüência (0 - 1 - 2 - 3 - 
4 - 5 - 6 - 7), eles são mantidos de forma alternada (0 - 4 - 1 - 5 - 
2 - 6 - 3 - 7 - interleaving simples); 
 Dependendo da necessidade, é possível manter um interleaving 
de mais níveis (0 - 3 - 6 - 1 - 4 - 7 - 2 - 5 - duplo). 
 
O acesso ao barramento pode ser de 2 tipos: 
 Uma palavra por vez: 
o A controladora de DMA pede uma palavra por vez; 
o Se nesse tempo a CPU quiser usar o barramento, ela 
espera; 
o Também chamado de cycle stealing. 
 
 
6 SO I – Cap. 5 6 SO I – Cap. 5 
 Por bloco: 
o O DMA diz ao dispositivo para adquirir o controle do 
barramento; 
o Várias transferências são feitas; 
o O barramento é liberado; 
o Mais eficiente, mas pode bloquear a CPU e outros 
dispositivos por tempo considerável. 
 
Nem todos os computadores usam DMA. 
As CPUs atuais são mais rápidas que o DMA. 
Esta opção permite projetar hardware mais simples, o que é 
interessante em sistemas embutidos. 
 
5.1.5 Interrupções 
 
Num computador típico, o sistema de interrupções funciona 
conforme a figura a seguir: 
 
 
 
Atualmente, usa-se linhas de interrupção no barramento, em vez de 
linhas específicas entre cada dispositivo e a controladora. 
A controladora de interrupção atende uma interrupção 
imediatamente, desde que não esteja ocupada. 
Se ela estiver tratando uma interrupção anterior, a atual é ignorada. 
Mas o dispositivo continua com o pedido ativo até ser atendido. 
 
Se duas interrupções chegam à controladora simultaneamente, 
aquela de maior prioridade será atendida primeiro. A prioridade é 
definida em geral por tipo de dispositivo ou por ordem no 
barramento. 
 
A controladora coloca um número nas linhas de endereço que indica 
qual dispositivo requer atenção e gera um sinal que interrompe a 
CPU. 
 
O sinal faz com que CPU pare o que está fazendo e passe a fazer 
outra coisa: 
 O número nas linhas de endereço é usado como um índice numa 
tabela chamada de vetor de interrupção; 
 Desta tabela se tira um endereço novo para o contador de 
instruções; 
 Esse endereço é o início da rotina de tratamento para aquele 
dispositivo; 
 A localização do vetor de interrupções pode ser fixa por 
hardware, ou definida por algum registrador especial. Neste 
caso, o SO carrega a tabela com os endereços que quiser. 
 
Uma das primeiras coisas que a rotina de tratamento faz é confirmar 
que recebeu a interrupção. 
Isso é feito colocando um valor em um dos registradores da 
controladora de interrupções. 
7 SO I – Cap. 5 7 SO I – Cap. 5 
O atraso desta confirmação pode evitar condições de corrida caso 
ocorram interrupções simultâneas. 
 
O hardware deve salvar certas informações antes de iniciar a rotina 
de tratamento. 
O que salvar depende da CPU. O mínimo seria o CI, mas algum 
sistema pode exigir que todos os registradores sejam salvos, etc. 
 
Uma pergunta importante: onde salvar esses dados? 
 
Uma opção é colocar em registradores internos. O SO pode ler esses 
dados depois 
Um problema é que a interrupção não pode ser confirmada até que 
esses dados todos sejam salvos (uma nova interrupção pode 
sobrescrever os dados da anterior). 
Isso causa períodos longos de tempo com interrupções desabilitadas, 
que podem causar perda de dados. 
 
Assim, a maioria das CPUs salva os dados em pilha. 
 
A questão é: qual pilha? 
Se for a corrente, pode ser de um processo do usuário. 
O ponteiro de pilha pode não ser legal (causaria um erro fatal). 
A rotina de tratamento pode ganhar uma falha de página (seria muito 
desagradável). 
 
Se for o do kernel, obrigaria uma mudança de estado da CPU. 
Isso obriga uma troca de contexto na MMU, invalida caches, TLB, 
etc. 
As CPUs modernas são superescalares e usam muitos pipelines. 
Uma interrupção obriga a perder pipelines, invalidar caches, etc. 
 
Outro problema: a instrução corrente não pode ser definida com 
precisão. Há circuitos de processamento paralelo, instruções sendo 
executadas adiantadas, etc. 
Salvar que contexto, neste caso? 
 
Uma interrupção que deixa a máquina num estado bem definido é 
chamada de interrupção precisa. Para tanto, é preciso atender 4 
propriedades: 
 O CI é salvo em lugar conhecido; 
 Todas as instruções anteriores àquela apontada pelo CI foram 
executadas completamente; 
 Nenhuma instrução depois daquela apontada pelo CI foi 
executada; 
 O estado de execução da instrução apontada pelo CI é 
conhecido. 
 
Essas regras têm algumas implicações: 
 Instruções depois daquela apontada pelo CI podem ser iniciadas; 
 Caso elas tenham feito mudanças em registradores e/ou 
memória, elas devem ser desfeitas antes que a interrupção 
aconteça; 
 A instrução do CI pode ou não ter sido executada; 
 Esse estado deve ser preciso; 
 Em geral, se a interrupção é de I/O a instrução ainda não foi 
executada; 
 Se temos um trap ou page fault, então o CI aponta para a 
instrução que causou o problema; 
 
8 SO I – Cap. 5 8 SO I – Cap. 5 
Uma interrupção que não atende esses requisitos é chamada de 
interrupção imprecisa: 
 São bastante desagradáveis para um projetista de SO; 
 Essas máquinas, em geral, guardam um grande volume de dados 
sobre o estado interno do sistema na pilha; 
 O SO deve varrer esses dados e determinar o que acontece; 
 Salvar e tratar esses dados em cada interrupção toma muito 
tempo; 
 Isso leva a um contrassenso interessante: CPUs superescalares 
muito rápidas às vezes não são apropriadas para aplicações de 
tempo real devido a sistema de interrupções lento. 
 
No Pentium Pro, a Intel usou pela 1
a
. vez sistemas superescalares: 
 Foi adotado o sistema de interrupções precisas por 
compatibilidade com os processadores anteriores, que não eram 
superescalares; 
 A lógica de interrupção é bem complexa, para garantir que as 
interrupções não contrariem uma das propriedades; 
 O preço pago é em área do chip (não em tempo); 
 Se não houvesse o problema de compatibilidade, essa área 
poderia ser usada por caches maiores, dando mais velocidade ao 
sistema; 
 Por outro lado, interrupções imprecisas fazem o SO mais 
complicado e lento. 
 
Difícil dizer qual abordagem é melhor. 
 
Uma possibilidade é fazer uso de sistemas mistos: 
 Interrupções de I/O seriam precisas, pois são mais rápidas de 
tratar; 
 Traps tipo erros fatais de execução seriam imprecisos, pois não 
seria necessário reiniciar a execução do processo. 
 
5.2 Princípios de I/O em Software 
 
5.2.1 Metas do Software deI/O 
 
Independência de dispositivo: 
 Programas podem usar arquivos em discos ou disquetes da 
mesma maneira! 
 
Nomes uniformes: 
 Os nomes de arquivos devem ser strings ou inteiros; 
 Esses nomes não podem depender de onde os arquivos estão 
armazenados. 
 
Tratamento de erros: 
 Erros devem ser tratados o mais perto possível do hardware; 
 Se a controladora descobre um erro de leitura, ela deve tentar 
corrigi-lo sozinha; 
 Em geral, ela tenta ler novamente; 
 Muitos erros são transientes - ex. problemas elétricos no 
momento da leitura - desaparecem se a operação é repetida. 
 
Síncrono x assíncrono: 
 A maioria do I/O é assíncrona (a CPU dispara e vai fazer outra 
coisa); 
 Programas são mais fáceis de escrever se o I/O for bloqueante; 
 Depende do SO tornar operações assíncronas em síncronas. 
9 SO I – Cap. 5 9 SO I – Cap. 5 
Buffers: 
 É comum ter que armazenar um dado antes que ele seja entregue 
no destino (pacotes de rede); 
 Alguns dispositivos têm restrições de tempo que obrigam a 
guardar dados em buffers para atender as taxas de transmissão 
(som e vídeo); 
 O uso de buffers implica em tempo para copiar dados de um lado 
para outro. 
 
Dispositivos compartilhados x exclusivos: 
 Alguns dispositivos (ex. disco) podem ser usados por mais de 
um usuário ao mesmo tempo; 
 Outros (ex. fitas) devem ser dedicados; 
 Dispositivos dedicados trazem problemas, tipo deadlocks. 
 
5.2.2 I/O Programado 
 
Forma mais simples de se fazer I/O, onde a CPU é responsável por 
tudo. 
Suponha um programa que deseja imprimir alguma coisa. 
O processo do usuário adquire a impressora (desde que esteja 
disponível) e faz uma chamada para imprimir o que deseja. 
 
O SO copia o texto para um buffer no espaço do kernel. 
 Ele faz isso porque talvez o mapa de memória precise ser 
alterado. 
O SO verifica se a impressora está disponível (há um registrador que 
permite ver o estado dela). 
Se estiver, copia um caracter do buffer para o registrador de dados 
da impressora. 
Esta ação ativa a impressora. 
O SO verifica se a impressora está pronta para receber o próximo 
carcater e assim por diante. 
 
 
 
O que o SO faz pode ser visto abaixo: 
 
 
 
A 3
a
. linha é uma operação de busy waiting (neste caso, também 
chamada de polling). 
Quando a impressão estiver terminada, o sistema devolve o controle 
para o processo do usuário. 
 
Este método é interessante se o tempo de impressão de um caracter 
for pequeno. 
10 SO I – Cap. 5 10 SO I – Cap. 5 
Também é útil em sistemas embutidos, onde a CPU não tem mais 
nada para fazer. 
Sistemas mais complexos, onde há muitas atividades pendentes, 
precisam de outras soluções. 
 
5.2.3 I/O Baseado em Interrupções 
 
Suponha uma impressora que não bufferiza os caracteres recebidos e 
imprime a 100 caracteres/seg. 
A impressão de um caracter leva 10 mseg. 
Neste tempo, é possível fazer uma troca de contexto e processar 
outra coisa. 
 
 
 
Neste caso, em (a) o tratamento da chamada de sistema dispara o 
primeiro caracter e chama o scheduler. 
Com interrupções habilitadas, quando a impressora imprimir um 
caracter ela gera uma interrupção. 
O serviço de interrupções verifica se os caracteres acabaram e 
desbloqueia o processo que pediu a impressão. 
Se não, envia outro caracter, confirma a interrupção para a 
impressora e devolve o controle ao processo interrompido. 
 
5.2.4 I/O Usando DMA 
 
A desvantagem do método anterior é que as interrupções ocorrem a 
cada caracter. 
O tratamento de uma interrupção toma um certo tempo, então isso 
leva a queda de desempenho da CPU. 
Uma alternativa é o uso de DMA. 
 
 
Neste caso, o controlador de DMA é programado e a CPU vai fazer 
outra coisa. 
Apenas no fim, o tratamento de interrupção é avisado e o I/O está 
pronto. 
 
 
 
 
 
 
 
 
11 SO I – Cap. 5 11 SO I – Cap. 5 
5.3 Camadas de Software de I/O 
 
 
 
5.3.1 Interrupt handlers 
 
 Processos que pedem I/O bloqueiam! 
 Formas de bloqueio: 
 Um down() em um semáforo; 
 Um wait() numa variável de condição; 
 Receive() de uma mensagem. 
 Quando a interrupção ocorre (comunicando que o I/O está 
pronto), o procedimento que manipula a interrupção desbloqueia 
o processo que solicitou (up(), signal(), send(), etc.). 
 
Uma amostra do tratamento necessário pode ser visto abaixo: 
 Salvar os registradores que não tenham sido salvos; 
 Criar um contexto para a rotina de tratamento de interrupções 
(TLB, MMU, tabelas de páginas, etc.); 
 Alocar uma pilha; 
 Dar confirmação para o controlador de interrupções; 
 Copiar os registradores salvos para a tabela de processos; 
 Chamar o serviço de tratamento de interrupções – ele extrai 
informações do controlador de interrupções; 
 Escolher que processo deve executar a seguir; 
 Montar o contexto do processo escolhido (MMU, TLB, etc.); 
 Carregar os registradores do processo escolhido; 
 Iniciar a execução do novo processo. 
 
5.3.2 Device Drivers 
 
 Contém o código dependente do dispositivo; 
 É o elemento que dispara os comandos para a controladora 
preenchendo seus registradores; 
 Verifica o status da controladora após os comandos; 
 Ex.: device driver de um disco: 
 Sabe quantos registradores a controladora tem e para que 
servem; 
 Conhece todos os elementos do disco: setores, trilhas, 
cilindros, cabeças, movimento do braço, interleave, motor, 
etc. 
 
Função do device driver: 
 Aceita requisições abstratas da camada independente de 
dispositivo; 
 Dispara os comandos; 
 Trata de múltiplas requisições; 
 Verifica as condições do dispositivo para realizar os comandos; 
 Preenche os registradores da controladora; 
 Bloqueia quando o comando for demorado; 
 Acorda por interrupção; 
 Verifica (e corrige) erros; 
12 SO I – Cap. 5 12 SO I – Cap. 5 
 Passa dados para o software independente de dispositivo; 
 Retorna informação de status ou de erro. 
 
Drivers podem ser reentrantes, no sentido de que um driver pode 
ser interrompido enquanto está fazendo um tratamento, e pode ser 
chamado novamente para tratar um evento relativo ao mesmo 
dispositivo. 
Ex. Placas de rede – enquanto está tratando um pacote, pode chegar 
outro. 
 
Drivers não tem permissão para fazer system calls. 
Mas podem chamar outros pontos do kernel diretamente, se 
necessário. 
Ex. Para liberar páginas para usar como buffers. 
 
5.3.3 Software de I/O Independente de Dispositivo 
 
Funções: 
 Interface uniforme com os device drivers: 
 O uso de interfaces diferentes para cada dispositivo tornaria 
o SO muito complexo; 
 Ele teria que ser modificado para cada novo dispositivo; 
 A interface significa o conjunto de funções disponíveis para 
contactar o driver. 
 
 Nomes: 
 É preciso um cuidado especial em mapear um nome 
simbólico para o driver apropriado; 
 No Unix, um nome qualquer ( /dev/disk0 ) na verdade 
especifica um i-node para um arquivo especial; 
 Esse i-node contém o major device number, usado para 
encontrar o driver correto; 
 Também possui o minor device number, passado como 
parâmetro para o driver (especifica a unidade). 
 
 Proteção: 
 No Unix, os dispositivos aparecem no sistema de arquivos 
como objetos com nomes comuns; 
 As regras de proteção de arquivos se aplicam aos 
dispositivos; 
 O administrador do sistema pode estabelecer as permissões 
adequadas para cada dispositivo. 
 
 Tamanho de bloco independente de dispositivo: 
 Discos diferentes podem ter diferentes tamanhos de bloco 
físico; 
 O software independente de dispositivo pode criar um 
tamanho de bloco lógico para o sistema e resolver as 
diferenças entre as unidades específicas. 
 
 Buffers: 
 O uso de buffers é extremamente importante em qualquer 
dispositivo; 
 Na figura abaixo, pode-se ver o uso de um modem com e 
sem buffers; 
 Em (a) o processo do usuário recebe diretamente cada 
caracter – inviável; 
 Em (b) o processo fornece um buffer noespaço do usuário 
para receber N caracteres – o processo é acordado quando o 
buffer está cheio; 
13 SO I – Cap. 5 13 SO I – Cap. 5 
 Em (c) o kernel fornece um buffer – quando ele está cheio, o 
modem é interrompido e o conteúdo é copiado para o 
usuário; 
 Em (d) o kernel fornece 2 buffers – quando um está cheio, o 
modem pega o outro, enquanto o kernel transfere os dados 
recebidos até o momento. 
 
 
 
O problema com a bufferização em excesso é o desempenho. P. Ex. 
Abaixo pode-se ver o uso de vários buffers em momentos diferentes 
da transferência de um pacote de rede. 
 
 
 
 Alocação de espaço em dispositivos de blocos: 
 
 Alocar e liberar dispositivos dedicados; 
 Alguns dispositivos só podem ser usados por um processo 
por vez (ex. Gravador de CD); 
 O SO examina as requisições e libera ou não, dependendo se 
o dispositivo está disponível; 
 No Unix, a requisição é um open num arquivo especial que 
descreve o dispositivo; 
 Se este arquivo não estiver presente, o dispositivo está em 
uso; 
 Uma alternativa é ter um mecanismo especial de controle 
desse tipo de dispositivos; 
 Se um deles está em uso, o processo é bloqueado. 
 
 Retorno de erros. 
 
14 SO I – Cap. 5 14 SO I – Cap. 5 
 Realiza funções de I/O comuns a todos os dispositivos; 
 Interface uniforme com o software ao nível do usuário. 
 
5.3.4 Software de I/O no Espaço do Usuário 
 
Bibliotecas que são link-editadas nos programas do usuário. 
 
Ex.: contador = write(fd, buffer, nbytes); 
 
Formatação. Ex.: printf(). 
 
Spool: 
 Manuseia dispositivos dedicados em ambientes 
multiprogramados; 
 Processo que faz spool  daemon; 
 Diretório de spool  onde são armazenadas as requisições para 
o daemon. 
 
 
 
A figura acima é um sumário do sistema de I/O. 
5.4 Discos 
 
5.4.1 Hardware de Disco 
 
Organização de um disco: 
 Cilindros; 
 Cada cilindro contém tantas trilhas quanto cabeças empilhadas 
verticalmente (em geral, de 1 a 16); 
 Trilhas são divididas em setores (8 a 32 em disquetes, várias 
centenas em hard disks); 
 Todos os setores contém o mesmo número de bytes; 
 Setores do centro são menores que os da borda; 
 Ainda assim, eles têm o mesmo número de bytes; 
 O espaço extra dos setores externos não é usado. 
 
Alguns discos são muito simples e entregam apenas um fluxo de 
bits. Nesse caso, a controladora faz todo o trabalho. 
Outros (ex. IDE) contém microcontroladores que realizam tarefas 
sofisticadas, permitindo à controladora fornecer comandos de alto 
nível. 
 
Uma controladora de disco pode manusear mais de uma unidade, 
podendo disparar um seek em cada uma - overlapped seeks. 
Algumas controladoras podem ler ou gravar em um disco enquanto 
fazem seeks em outros. 
Ler ou gravar em mais de um disco exige a capacidade de manusear 
mais de um fluxo de bits ao mesmo tempo: 
 Esses bits chegam à taxa de microsegundos, ocupando toda a 
capacidade da controladora. 
 
15 SO I – Cap. 5 15 SO I – Cap. 5 
Mesmo trabalhando com mais de um disco, a controladora só pode 
manipular uma transferência por vez para a memória (em geral, o 
barramento é um só). 
 
Atabela abaixo compara uma unidade de disquete com um disco 
rígido da Western Digital. 
 
 
 
Discos modernos têm uma geometria diferente dos discos antigos. 
Antes, o número de setores por trilha era o mesmo para todos os 
cilindros. 
Os novos discos são divididos em regiões, onde as mais internas têm 
menos setores que as mais externas (a). 
Para esconder isso do software, os discos possuem uma geometris 
virtual que é apresentada ao SO (b). 
O software faz requisições na base de x cilindros, y cabeças e z 
setores por trilha. 
O hardware do disco traduz para o cilindro, cabeça e setores reais. 
 
 
 
 
No Pentium, por compatibilidade com as limitações do PC original, 
os limites são 65535 cilindros, 16 cabeças e 63 setores por trilha 
(campos de 16, 4 e 6 bits – cilindros e setores começam de 1, 
cabeças de 0). 
Com 512 bytes por setor, o tamanho máximo de um disco é de 31,5 
GB. 
Para ultrapassar esse limite, muitos discos suportam um sistema 
chamado logical block addressing, onde os setores são numerados a 
partir do Zero apenas, independente da geometria. 
 
RAID 
 
O desempenho das CPUs têm crescido muito desde a última década, 
mas o dos discos nem tanto. 
Nos anos 70, a média de tempo de seek estava entre 50 e 100 msegs. 
Agora, começo de 2000, está abaixo de 10 msegs. 
16 SO I – Cap. 5 16 SO I – Cap. 5 
Na indústria de automóveis, um incremento de 5 ou 10 vezes em 
desempenho em 2 décadas seria um grande feito. 
Na computação, é embaraçoso! 
Portanto, a diferença entre as CPUs e os discos tem aumentado. 
 
Para aumentar o desempenho das CPUs, os projetistas têm usado 
processamento paralelo. 
Tem-se cogitado o uso de I/O paralelo. 
Em 1988, Patterson et al. (criador do sistema RISC) propôs um 
sistema de organização de discos que pode ser usado para melhorar 
o desempenho e/ou a confiabilidade. 
RAID (Redundant Array of Inexpensive Disks) foi rapidamente 
adotado pela indústria: 
 Mudaram o I para Independent; 
 Abriu-se a possibilidade de usar discos caros num sistema 
RAID! 
 
Um RAID é uma caixa cheia de discos ligada a um computador 
servidor. 
A controladora é substituída por uma controladora RAID. 
O conjunto é considerado pelo computador como se fosse um disco 
único, só que com melhor desempenho e maior confiabilidade. 
 
Todos os RAIDs possuem os dados distribuídos pelos drives, 
permitindo operações em paralelo. 
Patterson definiu 6 organizações, nomeadas como RAID 0 a 5. 
 
Na figura a seguir, pode-se ver os 6 tipos. 
 
 
17 SO I – Cap. 5 17 SO I – Cap. 5 
No RAID 0, um disco virtual único é dividido em N discos de M 
setores cada um. Os setores são distribuídos por todos os discos de 
forma roud-robin. 
O RAID 0 trabalha melhor com grandes requisições. 
Ele não apresenta redundância, então neste item o RAID 0 pode ser 
pior que um drive único e grande. 
Ex. MTBF de 20000 horas por disco, um RAID 0 de 4 discos terá 
uma falha a cada 5000 horas em média, enquanto um disco único 
falhará após 20000 horas. 
 
O RAID 1 é um sistema de discos duplicados, com um conjunto 
primário e outro secundário. 
Na gravação, um bloco é gravado duas vezes. 
Na leitura, alterna-se entre as cópias distribuindo a carga. 
O desempenho nas gravações não é bom, mas para leitura é 
excelente. Sem contar com a tolerância a falhas pela redundância. 
 
O RAID 2 trabalha num sistema baseado em palavra (ou mesmo 
byte). Na figura, cada byte é dividido em 2 partes de 4 bits cada. Um 
Hamming Code é adicionado, com 3 bits para cada 4 bits. 
Os 7 bits resultantes são gravados, um bit por drive. 
Ex. O computador CM-2 da Thinking Machines usa um esquema de 
32 bits por palavra, 6 bits de Hamming Code + um bit por paridade. 
Isso permite alto desempenho, com 32 setores gravados no tempo de 
um. O Hamming Code permite correção ou recuperação de um bit, o 
que significa que um drive pode ser perdido sem problemas. 
 
O RAID 3 é uma simplificação do RAID 2, com um único bit de 
paridade acrescentado por cada conjunto de bits de dados. 
Para correção de erros, é um sistema fraco. Mas para recuperação de 
crashes é interessante, porque a posição do bit com problema é 
conhecida. Ao carregar o disco novo, todos os bits são marcados 
como Zero. Se houver um erro de paridade, basta mudar aquele bit 
para 1. 
 
RAID 4 é um sistema de discos, com paridade por lista de drives. A 
paridade é mantida em um único drive. Isso pode levar a baixo 
desempenho se a atualização for feita em um único disco, já que é 
necessário ler os demais para recalcular a paridade. 
 
Esse problema não ocorre no RAID 5, onde a paridade é distribuída 
por todos os drives. 
 
CD-ROMS 
 
Os discos óticos foram desenvolvidos originalmente para a gravação 
de programas de TV. 
Com sua grandecapacidade, são usados para manter dados de 
computador de forma mais estética. 
A 1
a
. geração de discos óticos for criada pela Philips para manter 
filmes. Eram discos de 30 cm. Não tiveram grande aceitação, exceto 
no Japão. 
Em 1980, a Philips e a Sony desenvolveram o CD, que rapidamente 
substituiu os LPs de vinil. 
Um CD possui 120 mm, com 1,2 mm de altura e um furo de 15 mm. 
A proposta inicial era que o sistema durasse 100 anos. 
O CD é gravado numa espiral contínua que faz 22188 voltas ao 
redor do disco (cerca de 600 por mm). Esticado, teria 5,6 km. 
 
18 SO I – Cap. 5 18 SO I – Cap. 5 
 
 
Para compensar a velocidade externa e interna, o disco gira a 200 
rpm na região externa e a 530 rpm na interna. Os setores têm todos o 
mesmo tamanho, independente de onde residem. 
 
Em 1984, a Philips e Sony lançaram o padrão de armazenamento 
para computadores usando CDs. O formato do setor de um CD-
ROM pode ser visto abaixo. 
 
 
 
CDs têm 2 modos: 
 Modo 1: figura acima; 
 Modo 2: combina os campos Data e ECC em um campo de 2336 
bytes, para aplicações que não se preocupam com correção de 
erros (som e vídeo). 
 
Há 3 níveis de correção de erros: 
 Dentro de um símbolo; 
 Dentro de um frame; 
 Dentro de um setor. 
 
Erros de um bit são corrigidos no 1
o
. nível; rajadas de erros são 
corrigidos no 2
o
. nível. O restante é corrigido no 3
o
. nível. 
 
O custo é alto: um grupo de 2048 bytes é armazenado em 98 frames 
de 588 bits (7203 bytes), com 28% de eficiência. 
 
Um drive de CD de velocidade simples opera a 75 setores/seg, ou 
153600 bytes/seg (modo 1), ou 175200 bytes/seg (modo 2). 
 
19 SO I – Cap. 5 19 SO I – Cap. 5 
Assim, um drive 40x pode entregar dados à velocidade de 40 x 
153600 (6144000) bytes/seg, desde que controladora, barramento e 
SO possam manipular esta velocidade. 
Um CD padrão de áudio pode conter 74 min. de música. No modo 1, 
isso significa uma capacidade de 681.984.000 bytes. Isso é indicado 
como 650 MB, porque 1 MB é 2
20
 bytes (1.048.576). 
Este valor de 74 min. foi definido por Akio Morita (1921-1999), 
presidente da Sony, que determinou que o CD de música deveria 
conter a 9
a
 Sinfonia de Beethoven completa, de forma que fosse 
possível ouvir toda aquela obra sem interrupção. 
 
Para guardar arquivos de computador em CDs, foi feito um acordo 
sobre um sistema de arquivos padrão. 
Esse sistema possui 3 níveis: 
 Nível 1: nomes tipo MS-DOS (8 + 3) – diretórios até 8 níveis, 
sem extensões. Arquivos contíguos. 
 Nível 2: nomes até 32 caracteres. 
 Nível 3: arquivos não contíguos. 
 
A princípio, apenas o nível 1 é reconhecido como padrão. 
 
CD-R 
 
O CD-R é um CD que só pode ser gravado uma vez. Ele possui uma 
camada de material ótico que o laser destrói na 1
a
. gravação. Os 
dados gravados tornam-se permanentes e o CD não pode ser gravado 
novamente. 
O CD-R tem que ser gravado de uma vez só, ou é perdido. 
Ele é composto de 3 camadas: 
 Uma camada protetora; 
 Uma camada reflexiva; 
 Uma camada de material transparente (dye layer) mas que pode 
fixar dados se o laser for aplicado com toda potência (8-16 mW). 
 
A leitura é feita à potência de 0,5 mW. 
 
 
 
O CD-R criou o problema de cópia de material com copyright. 
Para evitar cópias de material não autorizado, alguns esquemas 
apareceram: 
 Marcar os arquivos com tamanho inválido; 
o O tamanho correto é mantido em outra região do CD, 
possivelmente cifrado. 
 ECCs incorretos em setores selecionados; 
o O software de leitura corrige os erros, tornando o setor 
inválido; 
20 SO I – Cap. 5 20 SO I – Cap. 5 
o A aplicação verifica os ECCs carregados, recusando a 
execução se os valores estiverem corretos. 
 
CD-RW 
 
CDs regraváveis usam um material diferente para fixação dos dados 
do que o CD-R. 
Esse material possui 2 estados: cristalino e amorfo, cada um com 
diferentes características de reflexão. 
Os lasers dos drives de CD-RW possuem 3 potências diferentes: 
 Na + alta, o laser converte o estado cristalino do material no 
estado amorfo, armazenando dados; 
 Na média, o estado amorfo volta a ser cristalino; 
 Na baixa, é possível verificar o estado do material sem alterá-lo. 
 
DVD 
 
No início, DVD era a sigla para Digital Video Disk, mas agora é 
oficialmente Digital Versatile Disk. 
O DVD veio para atender necessidades de 3 indústrias diferentes e 
poderosas: filmes, eletrônica de consumo e computadores. 
O formato físico de um DVD é idêntico ao de um CD, mas as 
seguintes diferenças são importantes: 
 Pontos menores (0,4 microns contra 0,8 microns nos CDs); 
 Espiral mais densa (0,74 microns entre as trilhas contra 1,6 
microns nos CDs); 
 Laser vermelho (0,65 microns contra 0,78 microns nos CDs). 
 
Juntas essas melhorias permitem uma capacidade de 4,7 GB. 
Um drive 1x opera a 1,4 MB/seg. 
O uso de um laser diferente obriga a ter um segundo laser na 
unidade para ler CDs antigos, CD-Rs e CD-RWs. 
 
Com 4,7 GB e usando MPEG-2, um DVD pode armazenar 133 
minutos de vídeo full-screen, full-motion a alta resolução (720 x 
480), bem como trilha sonora em até 8 idiomas e legendas em 32 
idiomas. 
 
Foram definidos 4 formatos possíveis: 
 Um lado e uma camada (4,7 GB); 
 Dois lados e duas camadas (8,5 GB); 
 Dois lados e uma camada (9,4 GB); 
 Dois lados e duas camadas (17 GB). 
 
Essa quantidade de formatos foi decidida para agradar a todos os 
interessados: Philips e Sony, Toshiba e Time Warner, etc. 
 
 
 
Discos de 2 lados teriam uma altura maior que os de 1 lado só. Para 
que todos os discos sejam iguais, os de um lado só tem uma camada 
de substrato extra. 
 
21 SO I – Cap. 5 21 SO I – Cap. 5 
O DVD foi criado por um concórcio de empresas de eletrônica (7 
japonesas) em cooperação com estúdios de Holiwood (alguns 
pertencentes às empresas japonesas do consórcio). 
O foco do projeto foi o aluguel de discos e vendas de shows. 
Uma futura característica inclui a possibilidade de classificar cenas, 
permitindo ao aparelho pular cenas não apropriadas para a 
assistência. 
DVDs dos EUA não são compatíveis com os da Europa, por razões 
mercadológicas. 
Holywood não queria que a Europa pudesse comprar filmes 
americanos após o lançamento nos EUA, mas antes do lançamento 
na Europa. 
 
5.4.2 Formatação de discos 
 
Antes que um disco possa ser usado, ele deve receber uma 
formatação de baixo nível por software. 
O formato de um setor pode ser visto abaixo: 
 
 
 
O preâmbulo começa com um padrão de bits fácil de reconhecer 
para identificar o início de um setor. Contém também o cilindro e 
número de setor. 
O tamanho dos dados depende da formatação, mas em geral é de 512 
bytes. 
O ECC é um código de erros que permite recuperar alguns bits. Um 
tamanho comum é de 16 bytes. 
 
A posição do setor 0 de cada trilha é deslocada por um offset da 
trilha anterior. Isso é chamado de cylinder skew. 
A idéia desse mecanismo é bastante simples. 
Suponha que um programa vai ler setores em sequência de um disco. 
Se uma trilha tem 32 setores, ler 34 exige ler uma trilha inteira e 
passar para a próxima. Essa passagem, na verdade, é um seek. 
 
P. ex. Um drive de 10000 RPM faz uma rotação em 6 msegs. 
Se uma trilha contém 300 setores, um novo setor passa pela cabeça a 
cada 20 microsegs. 
Se o seek para a próxima trilha leva 800 microsegs., então 40 setores 
passarão durante o seek. 
Assim, o skew deveria ser de 40 setores. 
 
Em geral, um disco perde 20% de sua capacidade na formatação, por 
conta de todos os controles adicionados para cada conjunto de 
dados. 
Há uma grande confusão na medição de capacidade de um disco: 
 Alguns fabricantes divulgam a capacidade antes da formatação; 
 Alguns SOs trabalham com a unidade GB como 230 bytes; 
 Outros SOs consideram que 1 GB é 109 bytes. 
 
Em redes, 1 Gbps significa 10
9
 bits/seg, da mesma forma que 1 
quilômetro significa 1000 metros (e não 1024). 
A formataçãodetermina o desempenho também: 
 Um disco de 10000 RPM com 300 setores por trilha de 512 bytes 
cada; 
 Leva 6 msegs. para ler 153.600 bytes de uma trilha, ou 24,4 
MB/seg; 
22 SO I – Cap. 5 22 SO I – Cap. 5 
 Essa taxa é a taxa máxima possível, não importa o tipo de 
recurso que se use! 
 
A controladora tem um buffer para receber os dados lidos do disco. 
Se ela ler 2 setores consecutivos, após ler o 1
o
. ela deve transferir os 
dados para a memória. Com isso, o 2
o
. setor é perdido. 
Uma solução para esse problema é o uso de interleaving. 
 
 
 
Entre um setor e o próximo, existe um setor intermediário (no caso 
de interleaving simples). Se o tempo de trânsito de um setor não for 
suficiente, pode-se usar interleaving duplo (dois setores entre um e 
seu próximo). 
 
Depois da formatação, vem o particionamento do disco. 
No Pentium e na maioria dos computadores, o setor 0 contém o 
Master Boot Record (MBR). Ele contém o código de boot e a 
tabela de partições, com o setor inicial e tamanho de cada partição. 
No Pentium, esta tabela tem espaço para 4 partições: 
 Se todas forem Windows, serão nomeadas como C:, D:, E: e F:; 
 Se 3 forem Windows e uma for Unix, as 3 serão nomeadas como 
C:, D: e E:. O primeiro CD será F:. 
 Para se dar boot de uma partição, ela precisa ser marcada como 
ativa. 
 
O passo final é a formatação alto-nível de cada partição. 
Esta operação cria um bloco de boot, uma lista de blocos livres (lista 
ou bitmap), diretório raiz e um sistema de arquivos vazio. 
Para cada partição, o SO indica qual o sistema de arquivos em uso. 
 
O procedimento de boot, em geral, é o seguinte: 
 Ao se ligar a força, o BIOS é executado; 
 Ele lê o MBR, carrega a rotina de boot e passa o controle para 
ela; 
 Essa rotina verifica qual partição está ativa, lê o setor de boot 
desta partição e executa-o; 
 Esse setor contém um programa que verifica o diretório raiz por 
um programa específico e executa-o; 
 Esse programa pode ser o próprio SO ou um carregador maior. 
 
5.4.3 Algoritmos de Escalonamento do Braço do Disco 
 
Elementos que influem no tempo de leitura/gravação: 
 Seek: tempo para mover o braço para o cilindro correto; 
 Atraso de rotação: espera pelo setor apropriado passar na 
cabeça; 
 Tempo de transferência. 
 
Na maioria dos discos, o seek time é o maior! 
 
 
 
23 SO I – Cap. 5 23 SO I – Cap. 5 
FCFS (First Come, First Served): 
 Requisições são atendidas na ordem em que são feitas. 
 
Ex.: disco de 40 cilindros, requisições para 11, 1, 36, 16, 34, 9, 12. 
 
 
0 5 10 15 20 25 30 35 39 
 
 
 
 
 
 
 
Distância: 10+35+20+18+25+3=111 
 
SSF (Shortest Seek First): 
 
0 5 10 15 20 25 30 35 39 
 
 
 
 
 
 
Distância: 1+3+7+15+33+2=61 
 
Problema do SSF: com altas cargas e requisições por todo o disco, 
tende a se manter onde está. 
 
Elevador: 
0 5 10 15 20 25 30 35 39 
 
 
 
 
 
 
Distância: 5+18+2+24+3+8=60 
 
Neste algoritmo, o braço mantém sua direção de movimento 
enquanto houver alguma requisição naquela direção. 
 
Algumas controladoras fornecem um recurso interessante quando há 
mais de uma requisição para o mesmo cilindro: 
 Quando a cabeça está no cilindro certo, é feita uma leitura para 
determinar qual o setor que está passando pela cabeça; 
 As requisições são ordenadas para atendimento de acordo com a 
ordem que os setores passarão pela cabeça. 
 
Futuro: 
 O tempo de seek está ficando cada vez menor; 
 Já há discos em que o tempo de rotação é menor do que o de 
seek; 
 Neste caso, o elevador torna-se obsoleto para levar em 
consideração primeiro o tempo de rotação. 
 
5.4.4 Tratamento de Erros 
 
Tipos de erros mais comuns em discos: 
24 SO I – Cap. 5 24 SO I – Cap. 5 
 Programação: requisitar um setor inexistente; 
 Erros transientes de checksum: causados por flutuação de 
energia na cabeça; 
 Erros permanentes de checksum: blocos fisicamente danificados; 
 Seek: braço enviado para um cilindro mas chega em outro; 
 Erro de controladora: ela se recusa a aceitar um comando. 
 
Problemas no processo de produção podem produzir setores ruins, 
que não permitem ler de volta os valores escritos. 
Esses erros podem ser de poucos bits: 
 Nesse caso, se o código de ECC for suficiente o setor pode ser 
aproveitado ainda; 
 Sempre que este setor for lido, o código de ECC terá que ser 
usado para corrigir aqueles bits. 
 
Se os erros forem maiores, não poderão ser disfarçados. 
Há duas abordagens para setores ruis: 
 Tratar deles na controladora; 
o Após o teste de qualidade na fábrica, o disco recebe uma 
relação dos setores com defeito; 
o O disco possui setores sobressalentes, que não são usados 
no trabalho normal; 
o Os setores com defeito são substituídos pelos 
sobressalentes. 
 
 Tratar deles no SO; 
o Nesse caso, o SO identifica que o setor está com defeito e 
retira-o das tabelas de alocação; 
o Não sendo mais usado, não causa problemas. 
 
 
 
Um problema importante com relação a setores defeituosos é a 
realização de backups: 
 Se o backup é feito arquivo por arquivo não há problema; 
 Se for feito setor por setor fica difícil evitar que o programa 
acesse os setores com defeito; 
 Nesse caso, espera-se que ele seja esperto o suficiente para ver 
que após 10 tentativas com erro o setor deve ser ignorado. 
5.5 Relógios 
 
5.5.1 Hardware de relógios 
 
Tipos: 
 
 Simples: ligado na corrente elétrica de 110 ou 220 volts, causa 
uma interrupção a cada ciclo (50 ou 60 Hz); 
 Oscilador: possui 3 componentes: 
 Um cristal oscilador; 
 Um contador; 
 Um registrador de carga. 
25 SO I – Cap. 5 25 SO I – Cap. 5 
 
 
 Sob tensão, o cristal produz um sinal periódico preciso na faixa 
de 5 a 100 MHz; 
 A cada período, uma unidade é subtraída do contador; 
 Quando ele chega a zero, é gerada uma interrupção. 
 
Depois, há vários tipos de relógios: 
 Uma possibilidade é realizar a contagem UMA vez; 
 Outra é usar o registrador de carga para recarregar o contador e o 
processo é executado novamente; 
 As interrupções periódicas geradas são chamadas de clock tick! 
 
5.5.2 Software de Relógio 
 
Funções do software de relógio: 
 
 Manter a hora certa; 
 Evitar que os processos executem mais que o permitido; 
 Contabilidade do uso de recursos; 
 Chamada ALARM feita por processos usuários; 
 Cronômetro para o SO; 
 Monitoração e estatística. 
Abaixo pode-se ver 3 formas de se manter a hora certa. 
 
 
 
Abaixo, pode-se ver a simulação de múltiplos cronômetros com um 
único relógio físico. 
 
 
 
5.6 Terminais 
 
5.6.1 Hardware de Terminal 
 
Tipos de terminais: 
 Interface RS-232: 
 Hardcopy: o que é digitado é transmitido para o computador; 
caracteres recebidos são impressos; 
26 SO I – Cap. 5 26 SO I – Cap. 5 
 Tela TTY: como o Hardcopy, mas mostra os caracteres numa 
tela; 
 Inteligente: computadores reduzidos (aceita comandos com 
seqüências de escape – endereça cursor, etc.); 
 Blit: computadores completos. 
 Mapeado em memória: 
 Orientado a caracter; 
 Orientado a bit. 
 
RS-232: 
 Sistema de comunicação de hardware; 
 Usa um conector de 25 pinos (terra, transmissão, recepção, e 
outros que compõem o protocolo); 
 Transmite 1 caracter por vez, bit a bit, precedido de um start bit 
e finalizado por 1 ou 2 stop bits; 
 Taxas de transmissão: 1200, 2400, 4800 e 9600 bps. 
 
UART (Universal Asynchronous Receiver Transmitters): 
 Converte caracter para série de bits e vice-versa. 
 Conectados ao computador por um cartão RS-232; 
 Taxa de transmissão entre 50 e 9600 bps; 
 Pode demorar 1 mseg. para transmitir um caracter; 
 O driver, em geral, envia um caracter e bloqueia, até que a placa 
possa aceitar outro.

Continue navegando