
Atualizado em 28/05/98
Prof. Rui Mano
E-mail: rmano@tpd.puc-rio.br
ENTRADAS E SAIDAS - CONTINUAÇÃO
MÉTODOS DE EXECUÇÃO DE E/S
E/S POR PROGRAMA
Inicialmente a comunicação entre UCP e periféricos era controlada por um conjunto especial de instruções de E/S
executadas pela própria UCP. Com as controladoras (ou interfaces), a UCP podia solicitar o início da transferência de
dados à controladora e depois a UCP ficava testando o estado do dispositivo para verificar se a operação de E/S terminara.
Assim, a UCP ficava num loop de espera e teste ("busy wait").
Outra forma foi liberar a UCP para outras tarefas e, a intervalos regulares, testar o dispositivo ("polling"). Este esquema
viabilizou os primeiros sistemas multiprogramáveis, pois no intervalo de tempo entre duas varreduras consecutivas do
dispositivo (entre dois pollings) a UCP ficava livre para executar outras tarefas. O polling ainda hoje é usado, por exemplo,
em linhas de comunicação serial.
CONSIDERAÇÕES:
São 2 tempos de espera:
Podemos imaginar a situação, fazendo uma analogia com um telefone que não tivesse campainha. Seria necessário tirar o fone do gancho periodicamente, para ver se alguma comunicação está em curso. No entanto, tal como o telefone, há outro meio de resolver esse problema: usar um "sinal de chamada", o que equivale a solicitar ao dispositivo que execute uma tarefa e que avise quando tiver terminado; enquanto isto, o processador poderia fazer outras coisas.
E/S COM INTERRUPÇÃO
Neste esquema, a UCP emite a instrução de E/S para a interface e desvia sua atenção para executar outra tarefa. A
interface verifica o estado do dispositivo e, quando este estiver pronto para iniciar a transferência de dados com a UCP, a
interface envia um "aviso" (interrupção) para a UCP, informando que o periféricos está "pronto para transmitir".
Neste caso, a UCP só ficará ociosa durante o tempo de transferência dos dados. No entanto se o programa depender dessa
transferência para, por exemplo, executar a próxima instrução, a UCP terá que esperar tal como no item 1.
INTERRUPÇÕES:
Inicialmente, quando começou-se a usar sistemas operacionais, um programa que estivesse sendo executado tomava o
controle da máquina e só quando o programa encerrava é que o controle era devolvido para o sistema operacional. Quando
ocorria algum problema (por exemplo, um erro no programa) não havia meios do sistema operacional retomar o controle da
máquina, exceto com o usuário derrubando o sistema e recarregando o sistema operacional. Ficou então evidente a
necessidade de haver um meio do sistema operacional poder retomar o controle da máquina, em situações de exceção.
Também ocorreu que as UCP's ficaram mais rápidas e mais eficientes, porém os dispositivos periféricos de E/S compatíveis
progrediram menos em velocidade (ou seja, ficaram comparativamente mais lentos).
A resposta a estes problemas foi a utilização do mecanismo de INTERRUPÇÕES. Interrupções são modificações no fluxo
de controle causadas por uma ação externa, geralmente relacionada a Entrada ou Saída. Uma interrupção é um sinal de
controle enviado por um agente externo (um dispositivo) ao microprocessador, quando um determinado evento é detectado.
A interrupção é um sinal de hardware.
Este mecanismo força o processador a tratar o evento externo. A detecção de uma interrupção faz com que o processador
transfira o controle para uma rotina de tratamento de interrupção ("interrupt handler"). A rotina de tratamento de
interrupções faz o processador executar as seguintes ações:
INTERRUPÇÕES DE SOFTWARE ("TRAPS"OU "EXCEPTIONS")
Interrupções de software são devidas a:
PRIORIDADES E MASCARAMENTO DAS INTERRUPÇÕES
Pode ocorrer que um ou mais dispositivos enviem sinal de interrupção simultaneamente ao processador. Neste caso, o
processador atenderá primeiramente ao dispositivo de mais alta PRIORIDADE. São prioritárias para atendimento as
interrupções devidas a:
Durante o atendimento a uma interrupção, o processador não poderá simultaneamente atender a outra interrupção. Para
evitar essa situação, existe o recurso de habilitar / desabilitar as interrupções, de forma que o processador, ao iniciar o
atendimento a uma interrupção, DESABILITA as demais interrupções e, ao terminar o atendimento, volta a habilitar todas
as interrupções. Algumas interrupções não são MASCARÁVEIS (isto é, não podem ser desabilitadas), tais como os erros
de hardware e reset.
PROCESSAMENTO DA INTERRUPÇÃO
O processamento de uma interrupção inclui os seguintes passos: salvamento do contexto do programa, execução da rotina de
E/S e restauração do contexto original (volta ao programa principal). A seguir, é apresentado um fluxograma mostrando os
passos para o tratamento de uma interrupção.

O processamento de interrupções tem como uma de suas principais características a transparência. Isso significa que o
programa interrompido não é afetado, sendo que a interrupção pode ocorrer e ser atendida a qualquer momento (na
realidade, o instante de ocorrência de uma interrupção é totalmente imprevisível) sem causar problemas à execução do
programa que estiver sendo executado (exceto, é claro, perder um pouco de tempo devido ao processamento da
interrupção).
A seguir é apresentado um diagrama mostrando o circuito que controla as interrupções num IBM PC XT, utilizando o circuito
integrado Controlador de Interrupções 8259A

A seguir são descritos os passos no atendimento de uma interrupção com o 8259A:
DMA ou Acesso Direto à Memória (implementada na controladora)
Nesse estágio da tecnologia, um problema permanecia insolúvel: toda transferência de dados entre memória e periféricos
exigia a intervenção da UCP. A técnica de DMA (Acesso Direto à Memória ou, em inglês, Direct Memory Access) permite
que dados sejam transferidos entre a memória e periféricos, ocorrendo intervenção da UCP apenas no início e ao final da
transferência.
CONSIDERAÇÕES
Quando a UCP deseja ler ou gravar algum bloco de dados em um dispositivo de E/S, a UCP envia um comando específico
para o controlador DMA. Este comando contém:
Durante uma transferência DMA, a UCP fica liberada para efetuar outras tarefas. Ao completar a operação de transferência,
o controlador DMA envia um sinal para a UCP (uma interrupção) avisando que a transferência foi completada e os dados
estão disponíveis. A área de memória utilizada pelo controlador na técnica de DMA é chamada 'buffer'.
O controlador DMA pode assumir temporariamente o controle do barramento do sistema. Para isso, será necessário que a
UCP suspenda o acesso ao barramento. O barramento de dados do sistema é usado para transferir instruções e dados, tanto
pela UCP quanto pelos controladores de E/S. Desta forma, quando em um determinado instante existir concorrência entre
um dispositivo DMA e a UCP pela utilização do barramento, será necessário que um controlador (chamado arbitrador ou
árbitro de barramento) controle o acesso ao barramento, determinando qual dispositivo terá prioridade para acessar o
barramento. Ao contrário do que poderia parecer óbvio, a prioridade geralmente é para dispositivos como a unidade de
disco magnético, porque sendo um dispositivo com partes móveis que não podem ser paradas, submetê-los a espera poderia
em alguns casos causar perda de dados. Se a UCP em um dado instante não tem concorrência pelo acesso ao barramento,
todos os ciclos do barramento podem ser usados pela UCP para acesso à memória. No entanto, quando algum dispositivo
estiver requerendo acesso ao barramento, ocorrerá roubo de ciclos do barramento para possibilitar a transferência dos
dados do dispositivo, o que ocasiona perda de desempenho do computador.
[P15] [Índice] [Home-page] [Início da Página] [Seção Anterior] [Próxima Seção]
[Sistemas de Numeração] [Representação de Dados] [Componentes do Computador] [Representação de Instruções] [Circuitos Lógicos] [Entrada e Saída] [Tópicos Avançados de Arquitetura] [Sistemas de Arquivos] [Glossário]