É possível que o Windows não detecte entrada?

1

Digamos que você tenha um computador decente (executando o Windows) com um processador dual core, mas você o leva ao limite um pouco. Seria possível para o Windows não detectar nenhuma entrada por um segundo ou dois.

O motivo pelo qual estou perguntando é porque entendo que, mesmo em computadores com mais de um microprocessador na CPU, o sistema operacional ainda agenda processos para garantir que cada um obtenha nanossegundos de capacidade de processamento. Então, certamente, se o processador estava ocupado o suficiente e você teve o azar de tentar mover o mouse quando o processador estava processando um processo diferente, o Windows não seria capaz de detectar isso?

Além disso, com um processador de núcleo único, se o sistema operacional tiver a tarefa de agendar processos, como a CPU saberá voltar ao sistema operacional depois que um processo tiver sido executado se o processo não informar?

    
por Andy 13.07.2013 / 14:07

1 resposta

2

Geralmente, o modo como os dispositivos de entrada funcionam é, quando são usados, uma interrupção (IRQ) é gerada. (Os únicos dispositivos que não são assim seriam a antiga porta de jogos no estilo PC, e não sei como o sistema operacional lida com isso.)

Os IRQs fazem com que um núcleo da CPU salte imediatamente para outro lugar - o manipulador de IRQ precisa salvar o estado da CPU, lidar com o dispositivo (como capturar a entrada e relate-o através de qualquer mecanismo do SO) e, em seguida, retorne da interrupção.

Os IRQs também fazem com que o núcleo da CPU desative mais interrupções. Assim, por um breve período de tempo, ele não pode fazer mais nada ou ser interrompido novamente, mesmo que um dispositivo tente acionar outra interrupção. Os PCs têm hardware APIC que está strongmente envolvido no controle, distribuição e gerenciamento de interrupções, portanto considere isso uma simplificação excessiva. (Por exemplo, acho que o APIC pode lembrar se outro IRQ entra enquanto a CPU está processando um, e imediatamente acionar no lado da CPU logo após a CPU informar ao APIC "hey, eu terminei com este IRQ.")

O Windows lida com interrupções por meio de algo chamado "chamada de procedimento adiada" - ele faz o mínimo necessário neste estado "interrompido" para obter o pedido do dispositivo reconhecido e, em seguida, transfere o restante do processamento para o driver de dispositivo real responsável , que cuida disso quando o agendador acha conveniente ou necessário.

Portanto, por causa disso, o Windows deve reconhecer o IRQ causado por cada dispositivo, a menos que esteja em um estado interrompido em algum lugar devido a um driver defeituoso, dispositivo defeituoso ou corrupção grave de binários do sistema operacional. Os DPCs que realmente fazem com que o Windows faça algo interessante com a solicitação do dispositivo podem ser o que fica atrasado.

A maneira geral para um sistema operacional forçar um processo a desistir da CPU é ter um temporizador de hardware que, quando se esgota, causa um IRQ. O mesmo tipo de IRQ, conforme descrito acima. IRQs sempre fazem com que a CPU mude para o modo kernel. Então, nesse ponto, o kernel tem controle e pode mudar para outro processo. Sem esse mecanismo, você depende totalmente do processo para informar ao sistema operacional quando isso é feito, e isso é chamado de "multitarefa cooperativa" em vez de "multitarefa preventiva".

    
por 13.07.2013 / 15:16