Uma interrupção de hardware não é realmente parte da multitarefa da CPU, mas pode conduzi-la.
-
As interrupções de hardware são emitidas por dispositivos de hardware como disco, placas de rede, teclados, relógios etc. Cada dispositivo ou conjunto de dispositivos terá sua própria linha IRQ (Interrupt ReQuest). Com base no IRQ, a CPU despacha o pedido para o driver de hardware apropriado. (Drivers de hardware geralmente são sub-rotinas dentro do kernel ao invés de um processo separado.)
-
O driver que manipula a interrupção é executado na CPU. A CPU é interrompida pelo que estava fazendo para lidar com a interrupção, então nada adicional é necessário para chamar a atenção da CPU. Em sistemas multiprocessadores, uma interrupção normalmente só interromperá uma das CPUs. (Como casos especiais, os mainframes possuem canais de hardware que podem lidar com várias interrupções sem suporte da CPU principal.)
-
A interrupção de hardware interrompe a CPU diretamente. Isso fará com que o código relevante no processo do kernel seja acionado. Para processos que demoram um pouco para serem processados, o código de interrupção pode ser interrompido por outras interrupções de hardware.
No caso de interrupção do temporizador, o código do agendador do kernel pode suspender o processo em execução e permitir a execução de outro processo. É a presença do código do agendador que permite a multitarefa.
As interrupções de software são processadas de forma semelhante a interrupções de hardware. No entanto, eles só podem ser gerados por processos atualmente em execução.
-
Normalmente, as interrupções de software são solicitações de E / S (entrada ou saída). Estes irão chamar rotinas de kernel que agendarão a E / S para ocorrer. Para alguns dispositivos, a E / S será executada imediatamente, mas a E / S de disco geralmente é enfileirada e feita posteriormente. Dependendo da E / S que está sendo feita, o processo pode ser suspenso até que a E / S seja concluída, fazendo com que o planejador do kernel selecione outro processo a ser executado. AE / S pode ocorrer entre processos e o processamento geralmente é programado da mesma maneira que E / S de disco.
-
A interrupção de software só fala com o kernel. É responsabilidade do kernel agendar quaisquer outros processos que precisem ser executados. Este poderia ser outro processo no final de um pipe. Alguns kernels permitem que algumas partes de um driver de dispositivo existam no espaço do usuário, e o kernel agendará esse processo para ser executado quando necessário.
É correto que uma interrupção de software não interrompa diretamente a CPU. Apenas o código que está atualmente executando o código pode gerar uma interrupção de software. A interrupção é um pedido para o kernel fazer algo (geralmente I / O) para executar o processo. Uma interrupção de software especial é uma chamada do Yield, que solicita ao agendador do kernel para verificar se algum outro processo pode ser executado.
Resposta ao comentário:
-
Para solicitações de E / S, o kernel delega o trabalho para o driver do kernel apropriado. A rotina pode enfileirar a E / S para processamento posterior (comum para E / S de disco) ou executá-la imediatamente, se possível. A fila é manipulada pelo driver, geralmente ao responder a interrupções de hardware. Quando uma E / S é concluída, o próximo item da fila é enviado para o dispositivo.
-
Sim, as interrupções de software evitam a etapa de sinalização de hardware. O processo que gera a solicitação de software deve ser um processo em execução no momento, portanto, eles não interrompem a CPU. No entanto, eles interrompem o fluxo do código de chamada.
Se o hardware precisar fazer com que a CPU faça alguma coisa, isso fará com que a CPU interrompa sua atenção para o código em execução. A CPU vai empurrar seu estado atual em uma pilha para que possa retornar mais tarde ao que estava fazendo. A interrupção pode parar: um programa em execução; o código do kernel manipulando outra interrupção; ou o processo ocioso.