As interrupções são usadas para indicar que a saída está pronta ou a entrada foi concluída?

0

Operating System Concepts diz:

During I/O, the various device controllers raise interrupts when they are ready for service. These interrupts signify

  • that output has completed, or
  • that input data are available, or
  • that a failure has been detected.

As interrupções são usadas para indicar que a saída está pronta ou a entrada foi concluída?

Se não, eles precisam ser representados de alguma outra forma?

Obrigado.

    
por Tim 01.10.2018 / 16:50

2 respostas

4

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

  1. 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.
  2. 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.

    
por 01.10.2018 / 17:44
5

É uma coisa boa você colocar ou no título, já que a resposta é sim.

Ou seja, a resposta exata depende da interrupção exata que você está perguntando. Vamos usar uma porta SPI e DMA como exemplo. O SPI é uma interface serial bidirecional.

É comum, por exemplo, que as interrupções de DMA marquem os chamados níveis de água. Você terá uma interrupção quando o buffer de DMA estiver cheio, quando estiver "quase cheio" (digamos 3/4), quando estiver "quase vazio" (digamos 1/4) e quando estiver completamente vazio.

Para uma porta SPI, você terá dois canais DMA. Um manipulará os dados provenientes do dispositivo externo e outro manipulará os dados que serão enviados de seu computador para o dispositivo.
Portanto, quando a interrupção do canal de saída DMA indica que o buffer está vazio, isso significa que a saída foi concluída. Quando a interrupção do canal DMA de entrada indica que o buffer não está vazio, isso significa que os dados de entrada estão disponíveis.

    
por 01.10.2018 / 17:02

Tags