O que são interrupções de software e hardware e como elas são processadas?

43

Não sei se entendi o conceito de interrupções de hardware e software.

Se bem entendi, o objetivo de uma interrupção de hardware é chamar a atenção da CPU, parte da implementação da multitarefa da CPU.

  1. Então, o que causa uma interrupção de hardware? É o processo do driver de hardware?
  2. Se sim, onde está o processo do driver de hardware em execução? Se estiver rodando na CPU, não precisará chamar a atenção da CPU por interrupção de hardware, certo? Então, está sendo executado em outro lugar?
  3. Uma interrupção de hardware interrompe a CPU diretamente ou entra em contato com o processo do kernel e o processo do kernel entra em contato / interrompe a CPU?

Por outro lado, acho que o objetivo de uma interrupção de software é que um processo atualmente em execução em uma CPU solicite alguns recursos.

  1. Quais são os recursos? Todos eles estão na forma de processos em execução? Por exemplo, o processo do driver da CPU e os processos do driver de memória representam recursos de CPU e memória? O processo do driver dos dispositivos de E / S representa recursos de E / S? Existem outros processos em execução com os quais o processo gostaria de se comunicar também com recursos?
  2. Se sim, uma interrupção de software entra em contato indiretamente com os processos (que representam os recursos) por meio do processo do kernel? É certo que, diferentemente de uma interrupção de hardware, uma interrupção de software nunca interrompe diretamente a CPU, mas interrompe / entra em contato com o processo do kernel?
Tim
fonte

Respostas:

55

Uma interrupção de hardware não faz parte da multitarefa da CPU, mas pode controlá-la.

  1. 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 de IRQ (Interrupt ReQuest). Com base no IRQ, a CPU enviará a solicitação para o driver de hardware apropriado. (Drivers de hardware são geralmente sub-rotinas no kernel, em vez de um processo separado.)

  2. O driver que lida com a interrupção é executado na CPU. A CPU é interrompida pelo que estava fazendo para lidar com a interrupção; portanto, nada adicional é necessário para chamar a atenção da CPU. Nos sistemas multiprocessadores, uma interrupção geralmente interrompe apenas uma das CPUs. (Como casos especiais, os mainframes possuem canais de hardware que podem lidar com várias interrupções sem o suporte da CPU principal.)

  3. A interrupção do hardware interrompe a CPU diretamente. Isso fará com que o código relevante no processo do kernel seja acionado. Para processos que levam algum tempo para serem processados, o código de interrupção pode permitir-se ser interrompido por outras interrupções de hardware.

    No caso de interrupção do timer, o código do agendador do kernel pode suspender o processo que estava sendo executado 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 da mesma forma que as interrupções de hardware. No entanto, eles só podem ser gerados por processos em execução no momento.

  1. Normalmente, interrupções de software são solicitações de E / S (entrada ou saída). Eles chamarão rotinas de kernel que agendarão a E / S para ocorrer. Para alguns dispositivos, a E / S será feita imediatamente, mas a E / S do disco geralmente é colocada na fila e 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 para executar. A E / S pode ocorrer entre processos e o processamento geralmente é agendado da mesma maneira que a E / S do disco.

  2. A interrupção do software fala apenas com o kernel. É de responsabilidade do kernel agendar outros processos que precisam ser executados. Este poderia ser outro processo no final de um tubo. 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. Somente o código atualmente em execução pode gerar uma interrupção de software. A interrupção é uma solicitação para o kernel fazer algo (geralmente E / S) para o processo em execução. Uma interrupção especial de software é uma chamada Yield, que solicita ao agendador do kernel que verifique se algum outro processo pode ser executado.

Resposta ao comentário:

  1. Para solicitações de E / S, o kernel delega o trabalho no 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 é tratada pelo driver, geralmente ao responder a interrupções de hardware. Quando uma E / S é concluída, o próximo item na fila é enviado ao dispositivo.

  2. Sim, 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, para que eles não interrompam a CPU. No entanto, eles interrompem o fluxo do código de chamada.

    Se o hardware precisar que a CPU faça algo, isso fará com que a CPU interrompa sua atenção no código que está sendo executado. A CPU empurrará seu estado atual em uma pilha para que possa retornar posteriormente 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 inativo.

BillThor
fonte
Obrigado! (1) Na interrupção do software, as operações de E / S são realizadas pela rotina do driver de dispositivo de E / S no processo do kernel? (2) é correto que o caminho que a interrupção do software percorra seja um passo mais curto que o caminho para a interrupção do hardware? Em outras palavras, para interrupção de software: programa de software -> rotina de driver de dispositivo no processo do kernel; para interrupção de hardware: hardware -> CPU -> rotina de driver de dispositivo no processo do kernel?
Tim
Obrigado! É certo que a interrupção do hardware faça com que a CPU empurre seu estado atual em uma pilha para que o driver do hardware possa executar na CPU e depois retornar o processo interrompido na CPU? A interrupção do software também faz com que o processo em execução na CPU seja empurrado para uma pilha para que o serviço solicitado possa ser executado na CPU?
Tim
Qualquer interrupção fará com que o estado seja empurrado na pilha. Isso permite que o sistema recarregue o estado quando terminar a interrupção.
BillThor
Obrigado! se o serviço solicitado não for executado na CPU, como operações de E / S executadas nos dispositivos de E / S em vez da CPU, e o processo de solicitação puder continuar em execução sem aguardar a conclusão do serviço solicitado, o processo de solicitação ainda será colocado em uma pilha ?
Tim
Normalmente, a leitura de E / S é chamada de forma síncrona e o processo não será executado até que a E / S seja concluída. Para leituras, você quase sempre quer isso. As gravações geralmente ocorrem de forma assíncrona, permitindo que o processo continue em execução.
BillThor