Entrada e saída
Controladores, varrimento, interrupções, DMA e custo de CPU por transferência.
Um sensor produz um bloco de dados e o CPU precisa de o recolher antes de o buffer voltar a encher. O controlador expõe comandos, estado e dados e faz a ponte entre o dispositivo e o sistema. Polling, interrupções e DMA repartem de formas diferentes o trabalho de consultar, transferir e notificar.
Interface com o controlador
Registos de comando iniciam ações; de estado indicam pronto, ocupado ou erro; de dados transportam informação. Em memory-mapped I/O, ocupam endereços no espaço de memória; em I/O isolado, usam instruções ou um espaço de portas próprio.
Uma leitura de registo pode ter efeito, como remover um item de uma fila. Não trates um acesso a I/O automaticamente como uma leitura comum que o compilador ou a cache pode eliminar/reordenar. A plataforma define permissões, ordenação e zonas não cacheáveis.
Um barramento partilhado dá acesso alternado aos participantes. Ligações ponto a ponto e pontes podem permitir tráfegos simultâneos, mas cada caminho tem largura e limites. A taxa do periférico não implica que todo o percurso suporte essa taxa.
Varrimento periódico
Se uma consulta custa ciclos e se repete a cada ciclos, a fração do CPU é . Com e , são 2%. Mesmo que apenas metade das consultas encontre dados, o CPU paga todas. A atividade do dispositivo e a ocupação do CPU têm denominadores diferentes.
Em polling, o CPU consulta o estado e, quando necessário, transfere dados. Um ciclo de espera ativa consulta repetidamente; um varrimento periódico executa consultas a intervalos definidos. Não são o mesmo custo.
Se o periférico pode receber R bytes/s e armazena blocos de B bytes, são no máximo blocos/s. Com um só bloco de armazenamento, o intervalo de consulta não pode exceder no modelo ideal; atraso do serviço também deve caber na margem disponível.
Para 16000 bits/s e blocos 400 bits: 40 blocos/s e intervalo 25 ms. Se cada consulta custa 300 ciclos num CPU a 2 GHz, a ocupação por consultas é , isto é 0,0006%. Conta separadamente a transferência se esse custo ainda não a inclui. O vídeo acompanha a relação entre taxa de chegada, tamanho do bloco e período de consulta.
Interrupções
O dispositivo notifica o CPU quando precisa de serviço. O CPU conserva o estado necessário, identifica a origem, executa uma rotina e retoma a tarefa interrompida. Prioridades, máscara e possibilidade de interrupções aninhadas definem quem espera e quem pode interromper quem.
Com atividade média de 10% no exemplo anterior, chegam 4 blocos/s e há 4 interrupções/s. O polling exigiria 40 consultas/s para suportar o máximo.
Contudo, uma rotina de interrupção pode custar mais do que uma consulta.
Se polling custa ciclos/s e interrupções custam , o ponto de igualdade é:
Com , consulta 400 ciclos e interrupção 600, interrupções gastam menos abaixo de . Isso compara custo de CPU; não prova que a latência ou a capacidade sejam suficientes.
O vídeo mostra o desvio para a rotina de interrupção e a retoma da tarefa interrompida.
Latência de comunicação e tamanho da mensagem
Uma ligação com maior taxa pode ter maior custo fixo por mensagem. Num modelo sem sobreposição, o tempo completo de uma mensagem de bytes é:
mede bytes por segundo; as outras parcelas são atrasos, não taxas. Compara duas redes do mesmo modelo docente, com unidades decimais:
| Parcela | Rede A | Rede B |
|---|---|---|
| Taxa de transmissão | 1,125 MB/s | 10 MB/s |
| Envio por software | 200 μs | 207 μs |
| Ligação | 21 μs | 56 μs |
| Receção por software | 241 μs | 360 μs |
Os custos fixos somam 462 μs em A e 623 μs em B. Cada byte demora μs em A e 0,1 μs em B. Para 250 bytes, os tempos são aproximadamente 684,22 μs e 648 μs: B termina primeiro apesar do custo fixo maior.
Para saber onde muda a escolha, iguala os tempos, todos em μs:
A diferença fixa é 161 μs; cada byte reduz a vantagem de A em μs. Logo:
Para tamanhos inteiros, A é mais rápida até 204 bytes e B a partir de 205. Esse limiar depende destes custos e do modelo sem sobreposição; não é uma propriedade universal de redes rápidas. Se envio, transferência e receção se sobrepuserem, segue o caminho crítico em vez de somar todos os tempos.
DMA
Se preparar e concluir uma transferência custa 500 ciclos e transferir por programa custa 4 ciclos por byte, os custos igualam-se em bytes. Acima desse tamanho, o custo de CPU do DMA é menor neste modelo, antes de considerar contenção e sobreposição.
O CPU configura origem/destino, tamanho e direção; o controlador transfere diretamente entre dispositivo e memória; uma interrupção ou outro mecanismo assinala o fim. O CPU paga preparação e conclusão, mas não uma operação por palavra.
Para taxa R bytes/s, blocos de B bytes, custo c ciclos por transferência e frequência f, o número de transferências por segundo é e a fração de CPU é:
Com dois discos de 100 MB/s cada, 1800 ciclos de preparação e 200 de conclusão, CPU 2 GHz e limite 1%, a taxa agregada é e :
São unidades decimais. Reduzir o bloco aumenta o número de transferências; mais dispositivos ativos aumentam o custo agregado.
DMA e dados em cache
DMA de entrada pode escrever na RAM enquanto o CPU conserva uma cópia antiga em cache. DMA de saída pode ler RAM antiga enquanto uma linha WB dirty contém dados novos.
Antes de DMA de saída, descarrega as linhas dirty relevantes e respeita a ordenação exigida. Para entrada, assegura que nenhuma linha dirty velha volta a sobrescrever os dados recebidos e invalida as cópias antigas no momento definido pela plataforma. Em hardware coerente, o protocolo pode realizar parte desse trabalho. Não uses um simples invalidate como substituto de um clean necessário.
O sistema operativo costuma gerir essas condições, o mapeamento e a vida dos buffers. O programa deve respeitar quem possui o buffer durante a transferência, porque alterar dados enquanto o dispositivo os usa pode produzir resultados inconsistentes.
Custo, latência e limite de taxa
DMA liberta tempo de CPU, mas usa interligador e memória. Preparação pode dominar blocos pequenos; interrupções muito frequentes podem saturar o CPU. Calcula separadamente taxa de bytes, taxa de transferências, ciclos por transferência e latência de um pedido. São medidas de aspetos diferentes.
Exercícios
Escolher consultas e calcular ocupação
Entrada de 16000 bits/s e buffer de 400 bits, removido numa consulta. Cada consulta custa 300 ciclos num CPU de 2 GHz. Calcula o intervalo máximo ideal e a ocupação de CPU por consultas nessa frequência. Ignora atraso adicional na remoção e calcula apenas consultas, sem custo de transferência.
Solução
Chegam 16000/400=40 blocos/s. O intervalo máximo ideal é 1/40 s=25 ms. As consultas gastam 40×300=12000 ciclos/s; a fração é 12000/(2×10⁹)=0,000006, ou 0,0006%. O serviço real precisa de margem para a remoção, atrasos e jitter.
Confere a tua resposta:
- Obtive 40 blocos por segundo e intervalo ideal de 25 ms.
- Calculei 12000 ciclos de consulta por segundo.
- Obtive ocupação 0,0006% sem contar transferência ou jitter.
Comparar custos de serviço
Polling 40 consultas/s a 400 ciclos; interrupções 40 u/s a 600 ciclos. Qual ocupação u iguala custos? Responde como fração, entre 0 e 1.
Pista
Solução
u=400/600=2/3. Abaixo deste valor, interrupções gastam menos ciclos no modelo dado.
Erros frequentes
Assumir que uma interrupção custa igual a uma consulta.
Dimensionar o bloco para três discos
Três discos de 60 MB/s cada, continuamente ativos; DMA 1600 ciclos por bloco; CPU 3 GHz; limite 2% CPU; MB decimal. Qual tamanho mínimo de bloco de cada transferência?
Pista
Solução
B≥180×10⁶×1600/(0,02×3×10⁹)=4800 bytes. Cada disco faz 12500 transferências/s; os três gastam 37500×1600=60 milhões de ciclos/s, ou 2% do CPU.
Erros frequentes
Reduzir o bloco quando aumenta a taxa agregada ou usar 2 como fração de 2%.
Preparar DMA de saída
DMA de saída lê RAM, sem coerência de hardware. O CPU tem dados novos em linha WB dirty. Qual preparação é necessária?
Pista
Solução
Faz clean/write-back das linhas relevantes, ordena antes do arranque e respeita o protocolo de posse do buffer. Invalidar só descarta a cópia; não é substituto de escrever os dados novos.
- Descarregar dados dirty e aplicar a ordenação da plataforma. O dispositivo deve ler a versão mais recente na memória.
- Invalidar sem descarregar todos os dados dirty. Isso pode perder os dados novos antes de DMA os ler.
- Não fazer nada porque a cache é válida. Válida e dirty pode diferir da RAM; faltaria garantia de coerência.
Erros frequentes
Confundir validade com igualdade RAM ou tratar entrada e saída DMA da mesma forma.
Uma rede mais rápida pode demorar mais numa mensagem curta
Rede A: taxa 1,125 MB/s e atrasos de envio, ligação e receção 200,21,241 μs. Rede B: taxa 10 MB/s e atrasos correspondentes 207,56,360 μs. MB é decimal; as parcelas não se sobrepõem. Qual rede termina primeiro uma mensagem de 200 bytes? Determina a partir de que tamanho inteiro B passa a ser mais rápida. Não uses só a taxa anunciada.
Solução
Os custos fixos são 462 μs e 623 μs. A transferência de 200 bytes custa 200×8/9≈177,778 μs em A e 20 μs em B. Totais 639,778 μs e 643 μs, portanto A ganha. Igualando 462+(8/9)B=623+0,1B, obtém-se B=161×90/71≈204,085 bytes. Como o tamanho é inteiro, A ganha até 204 bytes e B a partir de 205. A vantagem fixa de A deixa de compensar a transferência mais lenta quando a mensagem cresce.
Confere a tua resposta:
- Incluí custos fixos de envio, ligação e receção.
- Obtive 639,778 μs e 643 μs para 200 bytes.
- Obtive um limiar de cerca de 204,085 bytes.
- Escolhi A até 204 bytes e B a partir de 205.

