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

news/2024/12/23 0:53:19/

当你在 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

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

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

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

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


http://www.ppmy.cn/news/1527101.html

相关文章

学成在线练习(HTML+CSS)

准备工作 项目目录 内部包含当前网站的所有素材,包含 HTML、CSS、图片、JavaScript等等 1.由于元素具有一些默认样式,可能是我们写网页过程中根本不需要的,所有我们可以在写代码之前就将其清除 base.css /* 基础公共样式:清除…

【PostgreSQL里vacuum但是无法回收死元组的原因】

PostgreSQL数据库里的vacuum/autvacuum在我们日长的使用中可能会遇到很多问题,例如vacuum被阻塞,vacuum时间长,vacuum成功执行后,仍旧无法回收死元组等等。,本文主要介绍PostgreSQL的vacuum成功执行后,仍旧…

力扣100题——动态规划(二)

单词划分 题目 139. 单词拆分 - 力扣&#xff08;LeetCode&#xff09; 思路 使用dp数组记录当前下标对应的字符串长度能否被正确划分 确定状态转移方程&#xff0c;当j<i时&#xff0c;d[i] d[j]&&wordDict.contains(s.substring(j, i)) 代码 public boole…

C++——多线程编程(从入门到放弃)

进程&#xff1a;运行中的程序 线程&#xff1a;进程中的进程 线程的最大数量取决于CPU的核心数 一、将两个函数添加到不同线程中 demo&#xff1a;两个函数test01()和test02()&#xff0c;实现将用户输入的参数进行打印输出1000次 将这两个函数均放到独立的线程t1和t2中&…

代码随想录训练营 Day60打卡 图论part10 SPFA算法 Bellman-Ford 之判断负权回路 Bellman-Ford 之单源有限最短路

代码随想录训练营 Day60打卡 图论part10 一、Bellman_ford 队列优化算法&#xff08;又名SPFA&#xff09; 例题&#xff1a;卡码94. 城市间货物运输 I 题目描述 某国为促进城市间经济交流&#xff0c;决定对货物运输提供补贴。共有 n 个编号为 1 到 n 的城市&#xff0c;通过…

第159天:安全开发-Python-协议库爆破FTPSSHRedisSMTPMYSQL等

案例一: Python-文件传输爆破-ftplib 库操作 ftp 协议 开一个ftp 利用ftp正确登录与失败登录都会有不同的回显 使用ftplib库进行测试 from ftplib import FTP # FTP服务器地址 ftp_server 192.168.172.132 # FTP服务器端口&#xff08;默认为21&#xff09; ftp_po…

深度学习实战电路板缺陷检测【数据集+YOLOv5模型+源码+PyQt5界面】

基于深度学习的电路板缺陷检测- 文章目录 研究背景1. 电路板制造的重要性2. 传统检测方法的局限性3. 深度学习技术的兴起4. 深度学习在缺陷检测中的应用5. 研究进展6. 面临的挑战7. 结论 代码下载链接一、效果演示1.1 图像演示1.2 视频演示1.3 摄像头演示 二、技术原理2.1 整体…

2024年9月HarmonyOS鸿蒙应用开发者高级认证全新题库(覆盖99%考题)

一个小时通过鸿蒙高级认证 1、在开发 Harmony0S 应用工程时&#xff0c; 随着业务的发展&#xff0c;现在需要创建一个模块&#xff0c; 关于在 DevEco Studio 中创建 Module &#xff0c; 下列选项哪种方式是错误的? 必对 在 hvigor 目录下&#xff0c;单击鼠标右键&#xf…