Arquitetura do computador: os teclados USB são menos responsivos devido à faixa estreita de IRQ?

18

Aqui está uma declaração que acabei de pensar. Alguém pode me dizer se, e por que, é verdade?

Declaração: Como os teclados USB dependem de um driver genérico USB e arquitetura que só tem acesso a níveis mais baixos de IRQ, ele não pode dar acesso ao teclado a um IRQ como prioritário. alto como outro (digamos PS2) controlador.

Isso (se é verdade) significa que os teclados USB teriam menor prioridade (em termos de disponibilidade do que a velocidade) do que os teclados conectados a outro tipo de porta (como PS2)?

Considere, por exemplo, um teclado USB mapeado para um IRQ de prioridade média, em um sistema defeituoso que está preso em outra rotina de interrupção de prioridade média. Devido à sua prioridade relativamente igual, os eventos de teclado seriam ignorados e você não conseguiria enviar Ctrl-Alt-del ou qualquer outro pressionamento de tecla de emergência. Se o teclado tivesse uma prioridade mais alta, o sistema poderia entrar na rotina de interrupção de teclas.

Ou o controlador USB tem um intervalo de IRQ suficiente (seja em termos de prioridade contínua ou não) para dar ao seu teclado a prioridade de que necessita (basicamente logo abaixo da falta de energia)?

E os teclados virtuais, mapeados por meio de conexão de rede em uma sessão de área de trabalho remota?

EDIT: Minha pergunta não é muito sobre velocidade (ver comentários): a questão principal é: um teclado PS2 tem mais chances de falar com uma CPU que está presa em algum lugar em uma prioridade de interrupção maior que USB e menor que teclado?

    
por PPC 01.08.2012 / 22:50

2 respostas

16

Não se trata do intervalo de IRQ, são cerca de três fatores principais:

  1. Quantidade de loteamento de ônibus
  2. Quantidade de dados
  3. Comprimento do caminho de dados

No passado, teclados e mouses teriam um IRQ dedicado (IRQ1 para teclados, IRQ12 para mouses PS / 2).

Isso significava que, quando uma tecla era pressionada, ela tinha uma linha quase direta para a CPU (via PIC; mas, ainda assim, apenas um salto). Isso permitiu que os eventos do teclado fossem processados muito rapidamente no hardware, particularmente porque ele tinha IRQ1. (Claro que isso é tudo sobre o uso normal do teclado e ignora a linha de reset que vai do controlador de teclado diretamente para a CPU.)

Dispositivos USB, por outro lado, compartilham o mesmo barramento e o IRQ do controlador USB (que geralmente é um dos IRQ que são compartilhados com outros dispositivos, como NICs, placas de vídeo e outros). Como tal, com um teclado USB, os eventos vão do controlador de teclado, através do barramento USB para o controlador host USB, a partir daí, para o PIC secundário, depois para o PIC principal e depois para os drivers no SO ou no BIOS. e depois na CPU. Além disso, há dados de verificação de erros adicionados aos dados transferidos via USB.

Em outras palavras, simplesmente há mais coisas acontecendo com um teclado USB do que com um teclado AT ou PS / 2. O caminho dos dados é mais longo e há mais dados, e pode até ter que passar por software . Mesmo que a largura de banda USB seja suficientemente grande, ter outros dispositivos na mesma porta causa colisões e atrasos (você pode adicionar um hub, mas todas as portas nele ainda são a mesma porta no controlador). Então, há muito mais espera acontecendo.

Além disso, ter seu próprio (IRQ significava que um teclado mais antigo poderia interromper o processamento da CPU sempre que necessário. Com USB, o teclado não tem esse mecanismo e só pode enviar alguns dados e esperar / esperar que o controlador USB interromper a CPU em algum momento.

Os teclados virtuais são ainda piores porque eles definitivamente passam por um software que, é claro, não pode competir com uma linha de hardware.

Aqui está uma simples visualização da diferença entre um teclado AT ou PS / 2 e um teclado USB:

    
por 01.08.2012 / 23:50
14

Resposta curta

Ambos os teclados teriam um desempenho absolutamente igual para o código no nível do usuário. Pode haver pequenas diferenças ( nano - para micro - segundos em um PC moderno) se você gravar drivers de dispositivo. Se o sistema travasse, ambos os teclados não resolveriam o problema. Vá para hard reboot.

Resposta longa TL; DR;

O que é uma interrupção?

Quando o hardware (ou alguma parte crítica do software interno do sistema operacional, como o kernel) requer um serviço de processador, ele dispara uma mensagem ou uma interrupção , que solicita que o processador adie o que está fazendo e manipule essa solicitação.

Como funciona?

Quando o hardware gera uma interrupção (por exemplo, um pressionamento de tecla), essa solicitação entra em um controlador de interrupção. O controlador interrompe imediatamente a CPU em uma única linha de seu código de máquina (a CPU ainda executa esta última linha). Quando o processador estiver pronto para atender a essa solicitação, ele solicitará a um controlador de interrupção uma Solicitação de interrupção (IRQ) e uma rotina de manuseio. O controlador de interrupções tem uma estrutura de dados interna - Interrupt Dispatch Table , que contém um ponteiro para uma rotina que deve ser executada pela CPU para um determinado IRQ.

Todas as interrupções diferentes correspondem a Nível de solicitação de interrupção bem definido e limitado (IRQL ). Por exemplo, em sistemas x86 existem 32 IRQLs, e em x64 e IA64 existem menos - 16 IRQLs. Claramente, há mais dispositivos de hardware e serviços de software do que IRQLs, o que significa que todos os objetos do sistema compartilharão os IRQLs.

Tabela IRQLs para x64

    IRQL  |    Description
--------------------------------------------
    15    |    High/Profile
    14    |    Interprocessor interrupt/Power
    13    |    Clock
    12    |    Sync
    11    |    Device N
    ..    |    ...
     3    |    Device 1
     2    |    Dispatch/DPC
     1    |    APC
     0    |    Passive/Low

O IRQL mais alto (com maior número) tem maior prioridade. Todos os componentes de um sistema tentam manter o atual IRQL de um processador no nível mais baixo possível - 0. Se ocorrer uma interrupção de nível mais alto, o nível atual de IRQL de um processador é elevado e as interrupções com nível mais baixo não serão manipuladas até todas as interrupções com níveis mais altos são resolvidas. O IRQ pode ser tratado em lote se o agendador de IRQ puder enfileirar vários IRQs do mesmo nível para a execução do processador.

Qual é o objetivo?

Tudo isso foi muito bem projetado para separar o usuário final das complexidades do hardware e criar uma arquitetura universal que pode trabalhar com muitos tipos de hardware / software.

  1. O código no nível do usuário (ou seja, não no nível do kernel) é executado apenas quando o processador está no IRQL Passivo / Baixo (0). O ponto é que você só pode manipular um evento pressionado em sua aplicação após todos os IRQLs terem sido manipulados. Portanto, para um teclado, não importa qual IRQL é atribuído à interrupção de hardware.

  2. IRQL são apenas abstrações do sistema operacional e não estão definidas na pedra . IRQ e IRQL correspondentes são armazenados no registro do Windows (por exemplo) e qualquer usuário entusiasta pode alterá-los manualmente.

Conclusões

Citações da pergunta

Because USB keyboards rely on a USB generic driver and architecture that has only access to a few IRQ channels, it cannot give the keyboard access to an IRQ as priority-high as another (say PS2) controller would.

Talvez o autor significasse IRQL menor em vez dos menos canais IRQ . De qualquer forma, isso realmente não importa, pois não é visível para o usuário em qualquer PC moderno. As possíveis diferenças são do nível nano - para micro - segundos e elas acontecem apenas no nível do kernel. Em ambos os casos, o código no nível do usuário é bloqueado pelo kernel do SO.

Does this (if it is true) mean that USB keyboards would be less responsive than keyboards plugged onto another port type?

Não é verdade por causa da maneira como o SO é projetado. Se o sistema operacional estiver ocupado com algo e estiver "lento", os dois teclados se comportarão de maneira idêntica.

Take for instance a USB keyboard mapped to a medium priority IRQ, on a faulty system that is stuck on another medium priority interrupt routine

Neste caso, o sistema irá rotinas de tratamento BSOD, IRQ devem ser concebidos até um determinado padrão (como eles devem ser rápidos, síncronos, sem bloqueio, etc). Qualquer desvio deste e do kernel será BSOD.

Due to its relatively equal priority, keyboard events would be ignored and you won't be able to send Ctrl-Alt-del or any other emergency keystroke.

Se o sistema trava, há muitas coisas que podem dar errado, mas provavelmente o IRQL de pressionamento de tecla será tratado no nível do driver. O problema é que ele não será entregue ao aplicativo que se inscreveu para essa notificação, pois o sistema operacional está ocupado fazendo outra coisa.

    
por 02.08.2012 / 00:28