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

40

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

Se eu entendi corretamente, o propósito 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, então não terá que chamar 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 ela primeiro entra em contato com o processo do kernel e o processo do kernel então entra em contato / interrompe a CPU?

Por outro lado, acho que o propósito de uma interrupção de software é para um processo atualmente em execução em uma CPU solicitar alguns recursos.

  1. Quais são os recursos? Eles estão todos na forma de processos em execução? Por exemplo, o processo do driver da CPU e os processos do driver da memória representam recursos da CPU e da memória? O processo de 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 com os processos (que representam os recursos) indiretamente através do processo do kernel? É certo que, diferentemente de uma interrupção de hardware, uma interrupção de software nunca interrompa diretamente a CPU, mas, ao invés disso, ela interrompe / contata o processo do kernel?
por Tim 03.08.2011 / 20:15

1 resposta

50

Uma interrupção de hardware não é realmente parte da multitarefa da CPU, mas pode conduzi-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 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.)

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

  3. 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.

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

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

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

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

por 04.08.2011 / 01:36