敲击键盘到屏幕上打印字符计算机都做了什么

当你在 Linux 系统上按下键盘的 x 键并看到屏幕上打印出字母 x 时,Linux 系统内部发生了很多过事情,涉及硬件、操作系统内核和用户空间的多个层次。下面是一个大致的流程:

1. 硬件层

  • 键盘硬件捕获按键 :当你按下 x 键,键盘会通过键盘控制器检测到按键动作。
  • 生成扫描码 :键盘硬件会生成一个与按键对应的扫描码(Scan Code),表示你按下了哪个键(对于 x 键,会生成特定的扫描码)。这个扫描码通过键盘控制器发送到 CPU。

2. 中断处理

  • 键盘中断(IRQ 处理) :扫描码通过中断请求(IRQ 1,专门为键盘保留)通知操作系统键盘事件发生。CPU 暂停当前任务,调用中断处理程序(Interrupt Handler)。
    • CPU 寄存器:为了处理中断,CPU 会保存当前正在运行的程序状态,包括通用寄存器的内容和程序计数器(Program Counter,PC)。这些状态通常会被保存到内存中的中断栈(Interrupt Stack),以便中断处理程序完成后能够恢复。
  • 中断服务程序(Interrupt Service Routine, ISR) :内核中的中断服务程序会接收扫描码,并将其翻译成键值(Keycode),然后将其传递到内核的输入子系统。
    • 扫描码转换:扫描码由键盘中断处理程序接收,并通过内核中的键盘驱动程序进行处理。此时,键值会被存储在内核空间的某些数据结构中。
    • 内核使用内存:键值和扫描码会被存储在内核的输入缓冲区中,通常位于内存中的一个环形缓冲区(ring buffer)里,用于暂时存储输入数据。

3. 输入子系统

  • 内核输入处理:Linux 内核的输入子系统会处理键值,将其作为字符输入,并判断应该将其发送到哪个终端(TTY)。
  • TTY(终端)驱动程序:TTY 是 Linux 的虚拟终端。输入子系统将字符发送到相应的 TTY 驱动程序(你的终端模拟器实际上就是通过 TTY 与系统通信)。TTY 驱动程序处理字符并准备输出到终端设备。

4. 用户空间与终端模拟器

  • 终端模拟器接收字符 :TTY 驱动程序将字符传递给终端模拟器(例如 gnome-terminalxterm),终端模拟器负责在屏幕上显示字符。
  • 字符显示 :终端模拟器根据你当前的字符编码和显示设置,将 x 以图形方式显示在屏幕上。

5. 图形系统(如果使用)

  • 如果你在 X Window 系统或 Wayland 上运行图形终端,终端模拟器会与图形显示服务器(如 Xorg 或 Wayland)进行交互,图形服务器负责在显示器上绘制窗口和字符。

6. 屏幕更新

  • 最终,字符 x 被绘制到显示屏的指定位置,你就会看到屏幕上显示的字母 x

总结

整个过程从按下键盘的 x 键到显示在屏幕上大致包括以下步骤:

  • 键盘检测按键并生成扫描码
  • 通过中断请求传递扫描码到 CPU
  • 内核输入子系统将扫描码翻译为键值
  • TTY 驱动将键值传递到终端模拟器
  • 终端模拟器在屏幕上显示字母 x

这个过程涉及到硬件中断、内核处理和用户空间应用的协调与交互。

在整个按键到显示的过程中,内存和寄存器在多个步骤中发挥了关键作用:

  • 寄存器:用于中断处理、数据传递、程序计数、字符处理等。
  • 内存:用于存储键值、传递字符数据、管理缓冲区、以及图形渲染的显示缓冲区。

寄存器负责处理快速、短暂的数据传输,而内存用于存储较大的数据块,并在内核与用户空间、图形显示等模块之间进行协调。

相关推荐
A小辣椒1 天前
TShark:Wireshark CLI 功能
linux
A小辣椒1 天前
TShark:基础知识
linux
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5203 天前
Linux 11 动态监控指令top
linux
不会C语言的男孩3 天前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言