E/S PROGRAMADA QUANDO A CPU FAZ TODO O TRABALHO RELACIONADO A UMA OPERAÇÃO DE E/S, NO CASO DO PROCESSO QUERER IMPRIMIR (NA IMPRESSORA) ABCDEFGH : ESTES CARACTERES SÃO COLOCADOS EM UMA ÁREA DE MEMÓRIA DO PROCESSO A IMPRESSORA É REQUISITADA NA ABERTURA DE UM ARQUIVO. SE INDISPONÍVEL, CÓDIGO DE ERRO OU BLOQUEIO (DEPENDE DO S.O. E DOS PARÂMETROS) CHAMADA PARA IMPRIMIR OS CARACTERES OS CARACTERES SÃO COPIADOS EM UM BUFFER NO NÚCLEO E/S PROGRAMADA PROCESSO QUER IMPRIMIR (NA IMPRESSORA) ABCDEFGH. IMPRESSORA NÃO TEM UM BUFFER (PODE SER QUE TENHA): 100 CARACTERES / MIN, OU SEJA, 1 CARACTERE / 10 MSEG S.O. VERIFICA SE IMPRESSORA ESTÁ PRONTA, ATRAVÉS DO REGISTRADOR DE STATUS ISTO PODE TER QUE SE REPETIR SE NÃO ESTIVER PRONTA (ESPERA OCUPADA OU POLLING) S.O. COPIA UM CARACTERE POR VEZ PARA O REGISTRADOR DA IMPRESSORA ATRAVÉS DE E/S MAPEADA EM MEMÓRIA CARACTERE É PRODUZIDO NO PAPEL REPETIÇÃO PARA TODA A CADEIA DE CARACTERES E/S USANDO INTERRUPÇÃO AO INVÉS DO POLLING, A CPU ESCALONA OUTRO PROCESSO E A IMPRESSORA A INTERROMPE ASSIM QUE TIVER IMPRESSO UM CARACTERE E ESTEJA PRONTA PARA O PRÓXIMO A ROTINA DE TRATAMENTO DA INTERRUPÇÃO DA IMPRESSORA CONFIRMA O RECEBIMENTO DA INTERRUPÇÃO (PORQUE?), COLOCA O PRÓXIMO CARACTERE OU DESBLOQUEIA O PROCESSO, E VOLTA A PROCESSAR
E/S USANDO DMA INTERRUPÇÕES REQUEREM TEMPO DE CPU PARA CONSEGUIR GANHAR ESSE TEMPO, PODE-SE USAR UM DMA PARA ALIMENTAR OS CARACTERES PARA A IMPRESSORA, SEM ENVOLVIMENTO DA CPU DIMINUI-SE O NÚMERO DE INTERRUPÇÕES PARA UMA ÚNICA NA MAIOR PARTE DAS VEZES, USAR DMA É VANTOJOSO CAMADAS DE SOFTWARE DE E/S ORGANIZAÇÃO DO SOFTWARE ENVOLVIDO COM E/S COMO UMA SÉRIE DE CAMADAS PERMITE QUE: AS PARTICULARIDADES DO HARDWARE FIQUEM ESCONDIDAS NAS CAMADAS MAIS BAIXAS O USUÁRIO VEJA UMA INTERFACE SIMPLES, PADRONIZADA E LIMPA NA CAMADA SUPERIOR baseado na Figura 5.10, página 215, Tanembaum SOFTWARE NO NÍVEL DO USUÁRIO SOFTWARE INDEPENDENTE DE DISPOSITIVOS ACIONADORES DE DISPOSITIVOS (DRIVERS) HARDWARE
AS ROTINAS DE TRATAMENTO DE INTERRUPÇÕES DEVEM SER ESCONDIDAS A FIM DE QUE APENAS UMA PEQUENA PARTE DO S.O. NECESSITE SABER DE SUA EXISTÊNCIA. UMA MANEIRA SIMPLES PARA CONSEGUIR ESCONDER É: CONSIDERAR UM DRIVER DE DISPOSITIVO BLOQUEÁ-LO QUANDO O COMANDO DE E/S FOR INICIADO QUANDO DA INTERRUPÇÃO, O TRATAMENTO É O DO DESBLOQUEIO DO DRIVER, USANDO SEMÁFOROS, MONITORES OU MENSAGENS. SALVAR REGISTRADORES (INCLUINDO PSW) ESTABELECER UM CONTEXTO PARA A ROTINA DE TRATAMENTO DE INTERRUPCÃO, COM TABELA DE PÁGINAS ESTABELECER UMA PILHA PARA A ROTINA DE TRATAMENTO DE INTERRUPÇÃO SINALIZAR (INTERRUPT ACKNOWLEDGE) AO CONTROLADOR DE INTERRUPÇÃO OU REABILITAR AS INTERRUPÇÕES (EI ENABLE INTERRUPT) COPIAR OS REGISTRADORES DE ONDE ELES FORAM SALVOS PARA A TABELA DE PROCESSOS (SALVA CONTEXTO NO PCB) EXECUTAR A ROTINA DE TRATAMENTO DE INTERRUPÇÃO, QUE VAI VERIFICAR STATUS DA OPERAÇÃO ESCOLHER O PRÓXIMO PROCESSO A EXECUTAR. SE INTERROMPEU UM PROCESSO DE ALTA PRIORIDADE, ESTE DEVERÁ SER O ESCOLHIDO. ESTABELECER O CONTEXTO PARA O PRÓXIMO PROCESSO. CARREGAR OS REGISTRADORES DO NOVO PROCESSO.
INICIALIZAR O NOVO PROCESSO. O TRATAMENTO PODE ENVOLVER A TABELA DE PÁGINAS, O CONTROLE DE SUBSTITUIÇÃO (BITS R E M) E A CACHE. DRIVERS DE DISPOSITIVOS UM DRIVER DE MOUSE DEVE ADQUIRIR INFORMAÇÕES SOBRE O QUANTO O CURSOR FOI MEXIDO NA TELA E QUAL FOI O BOTÃO PRESIONADO. UM DRIVER DE DISCO DEVE CONTROLAR: CILINDROS, CABEÇAS E SETORES; MOVIMENTO DO BRAÇO; CONTROLADOR DE MOTOR; TEMPO DE AJUSTE DA CABEÇA ETC. CADA TIPO DE DRIVER REQUER CÓDIGO ESPECÍFICO PARA O DISPOSITIVO, GERALMENTE FORNECIDO PELO FABRICANTE DO DISPOSITIVO. DRIVERS DE DISPOSITIVOS NORMALMENTE EXISTE UM DRIVER POR TIPO DE DISPOSITIVO OU POR CLASSE DE DISPOSITIVO. TODO O CÓDIGO QUE DEPENDE OU DO QUAL DEPENDA O DISPOSITIVO FAZ PARTE DO DRIVER O DRIVER É A ROTINA ENCARREGADA DA COMUNICAÇÃO COM A CONTROLADORA (COMANDOS E RESULTADOS) O DRIVER DEVE SER A ÚNICA PARTE DO S.O. QUE SABE QUANTOS REGISTRADORES (I/O PORTS) EXISTEM NA CONTROLADORA E PARA QUÊ SERVEM (TEM ACESSO A ELES)
DRIVERS DE DISPOSITIVOS DEVEM SER PARTE DO NÚCLEO DO S.O. OU DEVEM EXECUTAR NO ESPAÇO DO USUÁRIO, COM CHAMADAS AO SISTEMA PARA LER OU ESCREVER NOS REGISTRADORES (PERMITE ISOLAR O S.O.) POSICIONADOS ABAIXO DO RESTANTE DO S.O. OFERECEM UMA INTERFACE PADRÃO POR TIPO DE DISPOSITIVO (ORIENTADO A BLOCO OU CARACTERE) PODEM SER COMPILADOS JUNTO COM O NÚCLEO DO S.O. OU SEREM CARREGADOS DINAMICAMENTE. DRIVERS DE DISPOSITIVOS, FUNÇÕES: ACEITAR E EXECUTAR REQUISIÇÕES DE E/S VINDAS DA CAMADA INDEPENDENTE DE DISPOSITIVO (CID). INICIALIZAR O DISPOSITIVO, SE NECESSÁRIO. TRATAR DAS NECESSIDADES DE ENEGIA DO DISPOSITIVO. REGISTRAR OS EVENTOS. DRIVERS DE DISPOSITIVOS, REQUISIÇÃO DA CID: VALIDA OS PARÂMETROS DE ENTRADA (ISSO NÃO OCORRE GERALMENTE NO RESTANTE DE UM S.O.) PODE SER NECESSÁRIO TRADUZIR A ENTRADA (EXEMPLO, NÚMERO DE BLOCO PARA CHS) VERIFICA SE O DISPOSITIVO ESTÁ EM USO, CASO POSITIVO, ENFILEIRA A REQUISIÇÃO PODE SER NECESSÁRIO LIGAR O DISPOSITIVO OU SEU MOTOR
ESCREVE NOS REGISTRADORES DO DISPOSITIVO DRIVERS DE DISPOSITIVOS, REQUISIÇÃO DA CID: BLOQUEIA (PARA ALGUNS DISPOSITIVOS EM ALGUMAS SITUAÇÕES, NÃO HÁ NECESSIDADE EXEMPLO SCROLL DE TELA) DEPOIS DO TRATAMENTO DA INTERRUPÇÃO (OU SEM TER SIDO BLOQUEADO), VERIFICA OCORRÊNCIA DE ERRO PODE TENTAR TRATAR O ERRO (EVENTUALMENTE VOLTA A ALGUM PONTO ANTERIOR) RETORNA STATUS PARA A CID VERIFICA REQUISIÇÃO PENDENTE REPETE OU BLOQUEIA DRIVERS DE DISPOSITIVOS, COMPLICAÇÕES: UM DRIVER EM EXECUÇÃO PODE SOFRER UMA INTERRUPÇÃO UMA INTERRUPÇÃO PODE CAUSAR A EXECUÇÃO DE UMA NOVA CÓPIA DO DRIVER (REENTRANTE) EM HOT PLUGGABLE SYSTEMS, PODE OCORRER DO USUÁRIO REMOVER O DISPOSITIVO ENQUANTO O DRIVER ESTÁ SENDO EXECUTADO DRIVERS NÃO SÃO APTOS A FAZER CHAMADAS AO SISTEMA, MAS PERMITEM-SE CHAMADAS A ALGUNS PROCEDIMENTOS DO NÚCLEO: ALOCAR E DESALOCAR BUFFERS, GERÊNCIA DE RELÓGIO, GERÊNCIA DO CONTROLADOR DE DMA ETC.
Exercícios 1. Em qual situação é vantajoso conviver com a espera ocupada de uma E/S programada? 2. O que é polling e em qual situação ela ocorre? 3. Como é que uma rotina de tratamento de interrupção começa a ser executada? 4. Com relação a interrupções: a) A rotina de tratamento de interrupção é executada a partir do acesso ao vetor de interrupções. b) O vetor de interrupções contém interrupções. c) O vetor de interrupções é manipulado pelas rotinas de tratamento de interrupções. d) Pode haver uma troca de contexto quando de uma interrupção. e) Não existe arquitetura de HW que permita a inibição de uma interrupção. 5. Explicar para que servem as instruções EI (enable interrupt), ACK (interrupt acknowledge), DI (disable interrupt), IRQ (interrupt request) 6. Justifique: o uso de um DMA ocasiona a diminuição de interrupções. 7. Qual seria a vantagem de um driver ser executado no espaço do usuário ao invés de deixá-lo no núcleo do S.O.? 8. No passado os drivers eram compilados junto ao restante do S.O. Atualmente, os drivers podem ser dinamicamente carregados no S.O. em tempo de execução. Indique o que é verdadeiro em relação às duas colocações: a) Os problemas causados na situação do passado em nada implicaram na ocorrência da situação atual. b) A geração de um único executável para o S.O. com drivers se deveu a raramente os dispositivos serem trocados. c) Com a grande quantidade de dispositivos existentes na atualidade, fica difícil ter que recompilar o S.O. quando da adição de um novo dispositivo. d) Não é possível recompilar o S.O. e) Poucos usuários são capazes de recompilar um S.O. 9. Qual é o motivo que pode levar a um driver validar os parâmetros de entrada? 10. Qual é a definição para reentrância? Em qual situação um driver necessita ser reentrante? Problemas 4 a 6 (página 265 do livro do Tanembaum).