that output has completed, or
As interrupções [também] são usadas para indicar que a saída está pronta?
Sim.
Considere escrever em um dispositivo de porta serial. O dispositivo tem um buffer de recepção chamado FIFO, para armazenar uma pequena quantidade de dados, e. 16 bytes.
Pode haver uma interrupção quando
- o buffer fica vazio e a saída está completa . Isso é usado para implementar
tcdrain()
no Linux. Alegadamente "esta função deve ser usada ao alterar os parâmetros que afetam a saída". Por exemplo. Quando você quiser alterar a "taxa de transmissão" (frequência) da porta serial, você pode usar isso para esperar até que todos os dados em buffer tenham sido transmitidos usando a taxa de transmissão atual. - um byte foi transmitido do buffer. Agora há espaço disponível. O dispositivo está pronto para que a CPU envie outro byte para o buffer.
that input data are available, or
As interrupções [também] são usadas para indicar que a entrada foi concluída?
Talvez. Eu não tenho certeza se há duas coisas diferentes aqui, pelo menos no meu exemplo.
Considere a leitura de um dispositivo de porta serial. O dispositivo tem um buffer de transmissão chamado FIFO, para armazenar uma pequena quantidade de dados, e. 16 bytes.
Quando o FIFO coletou pelo menos um byte da entrada, o dispositivo envia uma interrupção. Por exemplo, pode mudar de baixa para alta tensão em uma linha conectada à CPU.
A CPU pode consumir bytes do buffer, lendo de uma porta IO ou da memória IO.
Sidenote: essas transações podem demorar mais do que a leitura da RAM do sistema. Para permitir isso, o dispositivo IO deve inserir "estados de espera" no barramento. Ou seja existe um breve aperto de mão, onde pode levar vários ciclos da frequência de barramento antes que o dispositivo de IO defina um bit de "dados prontos". Os estados de espera também podem ser aplicados ao gravar em uma porta IO / IO. No entanto, os estados de espera são usados apenas para cobrir uma diferença conhecida na freqüência / latência da operação entre diferentes dispositivos. Eles não são usados para aguardar entrada ou saída externa. Isso ocorre porque eles bloqueiam a CPU de continuar e fazer qualquer outra coisa .
Assim, quando a entrada está disponível, uma interrupção é sinalizada. Se você quiser, pode dizer que a entrada está "concluída" quando a CPU leu no byte de entrada. Mas nenhuma interrupção é necessária para sinalizar isso. Assim como nenhuma interrupção é necessária para sinalizar que uma leitura da memória está completa.
Uma condição em que o buffer de entrada está cheio, na verdade, parece mais uma condição de erro - sugere um estouro de buffer. Essa condição pode de fato ser registrada pelo dispositivo, permitindo que o sistema operacional detecte o erro. No entanto, não acho que haja motivos para enviar uma interrupção especificamente para estouro. Porque o dispositivo já poderia ter enviado uma interrupção quando a entrada se tornou disponível.