Upload
internet
View
131
Download
0
Embed Size (px)
Citation preview
Silberschatz, Galvin and Gagne 200210.1Operating System Concepts
Capítulo 10: Sistemas I/O
Hardware de I/O Interface de I/O para aplicações Subsistema I/O do kernel do sistema operativo Transformação de pedidos de I/O em operações de
hardware Streams Desempenho
Sumário:
Silberschatz, Galvin and Gagne 200210.2Operating System Concepts
Hardware I/O Grande variedade de
dispositivos I/O: Dispositivos de
memória (discos e tapes)
Dispositivos de transmissão (placas de rede e modems)
Dipositivos de interface com seres humanos (ecrã, teclado, rato)
Outros dispositivos mais especializados
Conceitos comuns de comunicação entre um dispositivo I/O e o computador: Porto (port) Barramento (bus) Controlador (para
porto, barramento ou dispositivo)
Estrutura típica dum PCI bus
Silberschatz, Galvin and Gagne 200210.3Operating System Concepts
Hardware I/O (cont.):“Every transfer is an output from one device and an input into another.”
Localizações de alguns portos I/O de dispositivos de PCs
Como é que a CPU pode fornecer comandos e dados a um controlador para efectuar uma transferência I/O? O controlador tem um ou mais
registos para dados (registo data-in, registo data-out) e sinais de controlo (registo status e registo control)
A CPU comunica com o controlador através da leitura e escrita de “padrões de bits” nestes registos
Duas formas de comunicação CPU-controlador: Instruções I/O directas
(1 byte + endereço de porto I/O)
Instruções I/O mapeadas em memória
Silberschatz, Galvin and Gagne 200210.4Operating System Concepts
Hardware I/O: Comunicação CPU-Dispositivo I/O via Polling Espera Ocupada da CPU
A interacção entre a CPU e um controlador faz-se por aperto de mão (handshaking). Assuma que são usados 2 bits (busy bit do registo status e ready bit do registo command do controlador) para coordenar a relação produtor-consumidor entre o controlador e a CPU:
Determines state of device command-ready busy Error
Busy-wait cycle to wait for I/O from device
Silberschatz, Galvin and Gagne 200210.5Operating System Concepts
Busy Wait
A CPU lê repetidamente o bit busy até que seja 0 (busy-wait cycle).
A CPU activa o bit write a 1 no registo command e escreve um byte no registo data-out.
A CPU activa o bit ready a 1 no registo command. Quando o controlador nota que o bit ready está a 1, it escreve o bit
busy a 1.
O controlador lê o registo command e vê o comando write. Lê o registo data-out para obter o byte, fazendo de seguida a I/O para o dispositivo.
O controlador desactiva o bit ready a 0, assim como o bit error no registo status, para indicar que a transferência foi bem sucedida, colocando depois o bit busy a 0 para indicar que a transferência terminou.
Silberschatz, Galvin and Gagne 200210.6Operating System Concepts
Hardware I/O: Comunicação CPU-Dispositivo I/O via Interrupções
Durante I/O, interrupções são feitas por vários dispositivos quando eles ficam prontos para serviço.
Estas interrupções significam que a saída de dados terminou, ou que a entrada de dados está disponível, ou que uma falha foi detectada.
O controlador interrompe a CPU através da emissão dum sinal na linha de pedido de interrupção;
A CPU detecta a interrupção e despacha-a para o interrupt handler, que é uma rotina
A interrupt handler determina a causa da interrupção, faz o processamento necessário (rotina de serviço à interrupção) e termina; ao terminar, a CPU volta ao estado anterior à interrupção Ciclo I/O alimentado por interrupções
Silberschatz, Galvin and Gagne 200210.7Operating System Concepts
Hardware I/O: Tabela de eventos do processador Intel Pentium
Mecanismo de interrupções também usado para excepções (p.ex. divisão por 0, acesso a endereço de memória protegida ou inexistente)
A maior parte das CPUs tem agora duas linhas de interrupção: Linha de interrupção não-
mascarável, que é reservada para eventos tais como erros de memória irrecuperáveis
Linha de interrupção mascarável, que pode ser desligada pela CPU antes da execução duma sequência de instruções críticas que não podem serem interrompidas.
Vector de interrupções para despachar cada interrupção para o handler correcto Baseado em prioridades Algumas não são mascaráveis
(os primeiros 32 eventos do Intel Pentium não são mascaráveis e são usadas para sinalização de erros)
Silberschatz, Galvin and Gagne 200210.8Operating System Concepts
Hardware I/O: Acesso Directo à Memória (DMA)
Transferência directa de dados entre dispositivos I/O e a memória sem participação da CPU
Requer controlador DMA
Silberschatz, Galvin and Gagne 200210.9Operating System Concepts
Interface de I/O Interface I/O do kernel:
conjunto de funções I/O independentes do hardware (p.ex. read, write, etc.)
Device drivers: módulos do kernel dependentes do hardware, cada um dos quais encapsula o funcionamento específico de cada dispositivo (p.ex. rato, teclado, etc.).
Vantagem: um novo periférico pode ser ligado a um computador sem que a empresa vendedora do sistema operativo tenha que fornecer o código de suporte do periférico.
Estrutura I/O do kernel
Silberschatz, Galvin and Gagne 200210.10Operating System Concepts
Interface de I/O: Características dos dispositivos de I/O
Dispositivos diferenciam-se de várias maneiras: Character-stream ou block.
Um dispositivo de caracteres transfere bytes um-a-um, ao passo que um dispositivo de blocos transfere um bloco de bytes como se fosse uma unidade.
Sequenciais ou de acesso aleatório
Síncronos ou assíncronos. Transferência de dados é feita com tempos de resposta previsíveis ou não.
Partilháveis ou dedicados. Há partilha concorrente por vários processos ou não.
Velocidade de operação read-write, read only, ou
write only
Silberschatz, Galvin and Gagne 200210.11Operating System Concepts
Interface de I/O:dispositivos de blocos e de caracteres
Os dispositivos de blocos incluem os discos rígidos Interface básica: read, write, seek Modos de acesso:
Acesso de alto-nível através de interface de sistema de ficheiros
Acesso de baixo-nível através array linear de blocos (raw I/O)
Acesso a memory-mapped files colocadas no topo de block-device drivers é possível. Uma memory-mapped interface fornece acesso ao disco através dum array de bytes em memória principal.
Os dispositivos de caracteres (stream character) incluem teclados, ratos e portos série Interface básica: get, put No topo da interface, é possível
construir bibliotecas para edição de linhas (p.ex. Eliminar um carácter do input stream através de backspace).
Silberschatz, Galvin and Gagne 200210.12Operating System Concepts
Interface de I/O:Dispositivos de rede
Têm uma interface bastante diferente da interface read-write-seek usada pelos discos rígidos.
Unix e Windows NT/9i/2000 usam uma interface de sockets Há a separação entre o
protocolo de rede e o funcionamento da rede
Inclui a funcionalidade select para manipular conjuntos de sockets
Abordagens muito variadas (pipes, FIFOs, streams, queues, mailboxes)
PCMCIA compatible Fax/Modem cards
Ethernet Adapter Cards
External Fax/Modems
Silberschatz, Galvin and Gagne 200210.13Operating System Concepts
Interface de I/O:Relógios (clocks) e temporizadores (timers)
Fornecem três funções básicas para: Determinar tempo corrente Determinar tempo decorrido Activar um temporizador para despoletar uma operação
numa dada altura
Um programmable interval timer é usado para suportar a segunda e terceira funções anteriores. Este mecanismo é usado pelo escalonador para gerar uma interrupção que preempciona um processo no fim de esgotar o seu time-slice (algoritmo Round-Robin)
A função ioctl (UNIX) aborda aspectos de I/O tais como relógios e temporizadores.
Silberschatz, Galvin and Gagne 200210.14Operating System Concepts
Interface de I/O:I/O bloqueante e I/O não-bloqueante
Chamada bloqueante ao sistema - processo suspenso até que a operação I/O esteja completa Fácil de usar e compreender Insuficiente para algumas necessidades
(p.ex. Interface gráfica que recebe entrada de dados do teclado e do rato, e ao mesmo tempo processa e visualiza dados no ecrã)
Chamada não-bloqueante – chamada I/O retorna o mais rapidamente possível com um valor de retorno que indica o número de bytes transferidos (quer seja a totalidade dos dados pedidos, ou menos, ou mesmo menhuns) Interface com o utilizador, cópia de dados (buffered I/O) Implementada via multi-threading
Chamada assíncrona – processo continua a correr enquanto I/O decorre Difícil de usar Subsistema I/O sinaliza processo quando a operação I/O está completa
Silberschatz, Galvin and Gagne 200210.15Operating System Concepts
Subsistema I/O do kernel: serviços
Escalonamento I/O O escalonamento dum conjunto de
pedidos I/O requer a sua ordenação adequada por cada fila de espera dum dispositivo
Alguns sistemas operativos tentam ser justos por forma a que nenhum processo seja mal servido.
Buffering – um buffer é uma zona de memória que guarda dados enquanto estes são transferidos entre dois dispositivos ou entre um dispositivo e uma aplicação. Serve três propósitos: Suportar dispositivos com diferentes
velocidades de transferência de dados Suportar dispositivos com diferentes
tamanhos de transferência de dados. Manter a “semântica de cópia”
Caching – memória rápida que guarda cópia de dados para impedir demasiados acessos ao dispositivo I/O
Spooling Um spool é um buffer que guarda o
output para um dispositivo (ex. uma impressora) que não pode aceitar data streams entrelaçados.
Spooling é a forma dum sistema operativo coordenar o output concorrente para um dispositivo.
O output de cada aplicação é spooled para um ficheiro separado em disco.
Quando uma aplicação termina a impressão, o sistema de spooling coloca o ficheiro correspondente na fila de spooling para output para a impressora.
Tratamento de erros O sistema operativo pode recuperar de
falhas de leitura e de escrita transitória, e até mesmo de dispositivo indisponível.
Quando um pedido I/O falha, um mensagem de erro é devolvida.
Os logs de erros do sistema relatam os problemas.
Silberschatz, Galvin and Gagne 200210.16Operating System Concepts
Taxas de transferência de dados: Sun Enterprise 6000
Silberschatz, Galvin and Gagne 200210.17Operating System Concepts
Subsistema I/O do kernel: estruturas de dados do kernel
O kernel guarda informação de estado das componentes de I/O, incluindo as tabelas de ficheiros abertos, ligações à rede, comunicações com dispositivos de caracteres,etc.
Alguns sistemas operativos usam métodos orientados por objectos e passagem de mensagens para implementar I/O.
Estrutura I/O do UNIX kernel
Silberschatz, Galvin and Gagne 200210.18Operating System Concepts
Transformação de pedidos I/O em operações de hardware
Por exemplo, na leitura dum ficheiro em disco por um processo há que: Determinar o dispositivo que guarda
o ficheiro Traduzir o nome do ficheiro na sua
representação em disco (p.ex., em UNIX, o nome é mapeado para o número dum i-node, o qual contém a informação do ficheiro em disco)
Ler fisicamente dados do disco e colocá-los num buffer.
Disponibilizar os dados ao processo Devolver o controlo ao processo
Ciclo de vida dum pedido leitura bloqueante
Silberschatz, Galvin and Gagne 200210.19Operating System Concepts
STREAMS
STREAM – canal de comunicação full-duplex entre um processo do utilizador e um dispositivo
Um STREAM consiste em:
- uma STREAM head que faz a interface com o processo do utlizador
- uma driver end que faz a interface com o dispositivo- zero ou mais módulos STREAM entre eles.
Cada módulo contém uma read queue e uma write queue
Passagem de mensagens é usada para a comunicação entre queues
No System V, o mecanismo de sockets é implementado por streams
Estrutura de um stream
Silberschatz, Galvin and Gagne 200210.20Operating System Concepts
Desempenho I/O (performance) I/O é um factor fundamental no desempenho do
sistema Exige à CPU a execução de código de device
driver e a escalonar processos justa e eficientemente quando eles bloqueiam ou desbloqueiam.
As comutações de contexto resultantes sobrecarregam a CPU e as suas caches por causa das interrupções
Face a isto, a cópia harmoniosa de dados é uma das principais preocupações dum arquitecto de computadores.
Tráfico de rede também pode provocar uma taxa elevada de comutações de contexto.
Exemplo: num login remoto, um carácter escrito numa máquina local tem de ser transportado para a máquina remota
Comunicação dum carácter entre computadores
Silberschatz, Galvin and Gagne 200210.21Operating System Concepts
Desempenho I/O: optimização
Reduzir o número de comutações de contexto Reduzir o número de cópias de dados do dispositivo para a memória Reduzir a frequência de interrupções através do uso de transferências
de grandes quantidades de dados, controladores inteligentes e polling(se a espera-ocupada puder ser minimizada)
Usar DMA Calibrar o desempenho da CPU, memória, bus e I/O para o maior débito
de dados por unidade de tempo (i.e. uma sobrecarga numa zona não deve provocar a descongestão noutras)
Fim de CapFim de Capítuloítulo