- Explique a diferença entre
programada,
por interrupção e DMA.
Passo 1
O enunciado pede que eu explique a diferença entre três maneiras de fazer entrada/saída:
programada,
por interrupção e
.
Informações que tenho (implícitas no enunciado): cada método descreve como um periférico transfere dados entre si e a memória/CPU; é importante comparar quem faz o trabalho (CPU, periférico, controlador), quando isso acontece (polling contínuo, evento assíncrono, transferências diretas), e quais são vantagens e desvantagens (uso de , latência, throughput, complexidade).
Informações que tenho (implícitas no enunciado): cada método descreve como um periférico transfere dados entre si e a memória/CPU; é importante comparar quem faz o trabalho (CPU, periférico, controlador), quando isso acontece (polling contínuo, evento assíncrono, transferências diretas), e quais são vantagens e desvantagens (uso de
Passo 2
Conceito básico de
que preciso dominar antes de diferenciar métodos:
-
é a operação de mover dados entre um periférico (teclado, disco, rede, etc.) e a memória do sistema. - Elementos envolvidos: o periférico, o barramento do sistema, a memória e a
(ou um controlador especializado). - Dois recursos limitantes: tempo da
(quanto esforço a precisa gastar) e largura de banda do barramento/memória (quanto dado pode ser movido por unidade de tempo).
Entender isso ajuda a ver por que existem três estratégias: cada uma equilibra uso da, complexidade e rendimento de formas diferentes.
Passo 3
- Ideia central: a
controla ativamente a transferência, consultando o dispositivo repetidamente até que ele esteja pronto. - Sequência típica (passos que você poderia escrever na prova):
- A
escreve um comando no registrador do periférico para começar a operação (por ex.: ler um byte). - A
entra num laço de polling: lê o registrador de status do dispositivo repetidamente para ver se o bit “ready” ficou 1. - Quando o status indica pronto, a
lê (ou escreve) o dado no registrador de dados do periférico e move esse dado para a memória (ou do memória para o periférico). - Repete até terminar a transferência completa.
- A
- Características importantes (explique na prova com frases curtas):
- Uso de
: alto. A fica ocupada verificando o status (wasteful). - Latência: baixa resposta imediata ao terminar o polling, mas ocupação da
é alta. - Throughput: ruim para grandes blocos de dados porque a
faz todo o trabalho palavra a palavra. - Complexidade: simples de implementar (boa para dispositivos lentos e simples).
- Uso de
- Exemplo concreto para entender: teclado — se a
ficasse verificando a cada ciclo se o usuário apertou tecla, isso gastaria muito tempo; por isso polling é ruim para entradas esporádicas.
Passo 4
- Ideia central: o periférico notifica a
quando precisa de atenção, por meio de uma interrupção; a só age quando recebe esse sinal. - Sequência típica:
-
programa o periférico iniciando a operação e habilita interrupções daquele dispositivo. - A
continua executando outras tarefas; não fica verificando o status. - Quando o periférico está pronto (por exemplo, chegou um byte), ele gera uma interrupção ao controlador de interrupções.
- A
suspende a tarefa atual, executa a rotina de tratamento de interrupção (ISR — Interrupt Service Routine) que lê/escreve o dado do registrador do periférico e possivelmente inicia a próxima transferência. - A
retorna à tarefa interrompida.
-
- Características importantes:
- Uso de
: moderado. A só atua quando necessário (reduz desperdício em comparação ao polling). - Latência: boa resposta ao evento, mas há overhead de trocar contexto/entrar na ISR.
- Throughput: melhor que polling para entradas esporádicas e moderadas; porém, para grandes blocos de dados contínuos, as muitas interrupções (uma por palavra/byte) ainda geram overhead elevado.
- Complexidade: maior que polling (necessita vetor de interrupção, ISRs e sincronização).
- Uso de
- Exemplo de uso ideal: teclado e mouse (event-driven); dispositivos que geram eventos discretos e não transferem grandes blocos contínuos.
Passo 5
- Ideia central: um controlador
especializado move blocos de dados diretamente entre um periférico e a memória sem envolver a para cada palavra. A apenas configura a transferência e é notificada no fim. - Sequência típica:
-
programa o controlador com: endereço de origem, endereço de destino, tamanho do bloco e direção (leitura ou escrita). -
inicia a operação e pode continuar outras tarefas. - O controlador
assume o barramento e realiza transferências de memória por bloco, copiando dados periférico↔memória sem intervenção da . - Ao final da transferência o
gera uma interrupção (ou seta um flag) para avisar que a operação terminou.
-
- Modos de operação do
(útil para prova): - Cycle stealing:
rouba ciclos de barramento entre acessos da (menor impacto em latência de CPU, throughput moderado). - Burst mode:
toma o barramento e transfere um grande bloco de uma vez (máximo throughput, maior latência para ).
- Cycle stealing:
- Características importantes:
- Uso de
: muito baixo durante a transferência (CPU livre para outras tarefas). - Latência:
tem latência para acessar o barramento dependendo do modo do , mas transferências têm alto throughput. - Throughput: alto — ideal para discos, placas de rede, vídeo, qualquer dispositivo que mova grandes blocos de dados.
- Complexidade: requer controlador
, lógica de arbitragem do barramento e cuidado com sincronização/cache (problema prático: coerência de cache).
- Uso de
- Exemplo de uso ideal: leitura de setores de disco para memória, envio/recebimento de pacotes de rede, transferência de frames de vídeo.
Passo 6
Comparação direta (forma que funciona bem em prova — pontos curtos):
- Quem faz a cópia:
-
programada: palavra a palavra. -
por interrupção: quando o periférico gera interrupção (por evento). -
: controlador faz a cópia em bloco; só configura e finaliza.
-
- Uso de
: - Programada: elevado.
- Interrupção: médio (atividade em eventos).
-
: baixo.
- Overhead / eficiência:
- Programada: ineficiente para grandes transferências.
- Interrupção: eficiente para eventos esporádicos, ineficiente se interrupções forem muito frequentes.
-
: mais eficiente para grandes blocos (melhor throughput).
- Complexidade de implementação:
- Programada: simples.
- Interrupção: requer ISRs e tratamento de concorrência.
-
: mais complexa (hardware adicional, arbitragem, coerência de cache).
- Quando usar (regra prática):
- Programada: dispositivos muito lentos e simples; quando simplicidade vence eficiência.
- Interrupção: dispositivos de velocidade moderada com eventos esporádicos.
-
: transferências de alto volume (disco, rede, vídeo).
Passo 7
Cuidados e problemas práticos que caem na prova (e como responder):
- Coerência com cache:
pode deixar cache inconsistente — precisa de flush/invalidate; mencione isso se a questão exigir detalhes de sistema moderno. - Interrupções frequentes: se cada byte gera uma interrupção, a
gasta muito tempo em ISRs — por isso existem modos híbridos (ex.: usar interrupção por bloco, não por byte). - Arbitragem do barramento:
precisa disputar o barramento com a — cite cycle stealing vs burst como diferença importante.
Dica rápida para prova: se o enunciado fala de “muitos dados” ou “alto throughput”, escreva; se fala de “evento” ou “tecla” escreva interrupção; se fala de “simples” ou “sistema embarcado muito básico”, polling pode ser aceitável.
Passo 8
Exemplos curtos tipo “responda na prova” (frases prontas):
- Teclado: “usar
por interrupção — gera evento quando tecla pressionada.” - Transferir um arquivo do disco para RAM: “usar
— eficiente para grandes blocos.” - Firmware simples sem
em microcontrolador pequeno: “ programada (polling) se simplicidade for prioridade.”
Passo 9
Resumo final motivacional (modo amigo): lembre assim — polling = ficar olhando (muito trabalho para
), interrupção = bater na porta quando chegar algo (bom para eventos),
= manda um ajudante que carrega o caminhão inteiro (melhor para muita carga). Você manda a ordem, e cada método tem o momento certo; na prova cite quem faz a cópia, uso de
, throughput e um exemplo simples.