¿Qué sucede realmente dentro de una computadora cuando presionamos una tecla?

Es el trabajo del sistema operativo manejar la entrada del hardware y proporcionar esas entradas a las aplicaciones de software. Entonces, lo que sucede después de presionar una tecla es el siguiente:

1. Se envía una señal eléctrica a la computadora desde el teclado. (ver: Dentro del teclado – Cómo funcionan los teclados de computadora).

2. El sistema operativo tiene un controlador de hardware, un programa que funciona con un dispositivo de hardware en particular, para aceptar la entrada del teclado.

3. El sistema operativo también sabe qué programa está esperando en la entrada del teclado porque ese programa está en un estado de espera de Entrada / Salida (o E / S).

4. El sistema operativo proporciona la entrada de caracteres del teclado a ese programa a través de un “evento” de pulsación de tecla. La aplicación procesa ese evento y hace lo que se supone que debe hacer con esa clave (como escribirlo en la pantalla que usa el sistema operativo nuevamente y otro controlador de hardware).


¡Buena pregunta!

¿Qué tan profundo quieres analizar esto?
La pulsación de tecla en sí misma provoca una variación de alguna propiedad eléctrica de un circuito (puede pensar en un interruptor que se cierra y luego se abre de nuevo). La electrónica dentro del teclado detecta esta variación. Asocian cada clave a dos códigos: uno es el código de escaneo físico de la clave, el otro es un código de caracteres. Luego crean un mensaje que contiene el código de escaneo, el código de caracteres, información sobre el evento (tecla abajo / arriba) e información sobre otras teclas que se presionan al mismo tiempo (como shift o control, por ejemplo).
Este mensaje, que es solo una secuencia de bytes, se envía a través de un canal de comunicación. Este canal de comunicación solía ser un puerto serie simple que transportaba solo el mensaje, pero hoy en día es generalmente un puerto USB o una radio bluetooth (un puerto USB generalmente se usa también para teclados no extraíbles como los de una computadora portátil: hoy en día a menudo solo están conectados a través de un USB internamente, pero también se podría usar un puerto serie). Esto significa que los datos del mensaje real se encapsulan en un protocolo más complejo (especificado como parte del estándar USB o Bluetooth).
La computadora recibe esta transmisión a través del hardware correspondiente (USB / Bluetooth) y la transmisión se maneja como todos los demás del mismo tipo. La diferencia es que el puerto lógico del receptor (nivel de software) es el controlador del teclado en el núcleo (mientras que para otros dispositivos USB / Bluetooth podría ser el controlador de entrada de audio o el controlador SCSI de bajo nivel del disco duro o lo que sea).
Ese controlador procesa el mensaje y puede traducirlo a un mensaje de nivel de software diferente (por ejemplo, si está utilizando un teclado alemán pero el sistema operativo está configurado para tratarlo como un teclado francés, el código de caracteres que proviene del hardware se descarta y el scancode se usa para seleccionar un código de caracteres diferente).
El mensaje de nivel de software (o mensajes, ya que un solo mensaje de teclado puede generar múltiples mensajes de nivel de software) se pone en cola y finalmente se entrega a una de las aplicaciones que se ejecuta en el sistema (esto generalmente se hace de forma sincrónica, cuando la aplicación sondea el pendiente mensajes).

El teclado envía una señal eléctrica. Esta señal es captada por una pieza de hardware con un programa de nivel bajo muy específico en la placa base (para evitar que propague “ruido” al resto del sistema) y se pasa a otra parte de la placa base. Este componente alerta al sistema operativo de que capturó una señal, y el sistema operativo “decide” qué hacer con esto, lo que a menudo a su vez alerta al programa que tiene el enfoque actual del usuario de que se ha presionado una tecla con un cierto valor. Este programa puede a su vez dirigir esta información a un módulo particular de su código (por ejemplo, en los navegadores web, solo el componente que tiene el foco normalmente obtiene esta información).

De hecho, ¡bastante! Algunos detalles aquí: https://github.com/alex/what-hap