解密键盘输入:探索设备控制器的奥秘

流程初探

键盘是我们最常用的输入硬件设备之一。作为程序员,你知道当我们敲击键盘上的字母"A"时,操作系统会发生什么吗?下面我将简要介绍整个过程,以便你更容易理解为什么需要这些组件。

首先,让我们来看看CPU的硬件架构图。

image

CPU内部的内存接口需要通过系统总线和I/O桥接器与内存建立连接。而桥接器另一侧连接着通过内存总线与CPU建立连接的内存。其他外接设备,如键盘和显示器,都是通过I/O总线连接的I/O设备。

当我们敲击键盘上的字母"A"时,整个过程可以简要概括为以下几个步骤:

  1. 键盘设备控制器扫描码存储:键盘设备控制器将扫描码数据存储在数据寄存器中。
  2. 中断请求发送给CPU:键盘设备控制器向CPU发送中断请求。
  3. CPU保存上下文并调用中断处理程序:CPU接收到中断请求后,保存当前进程的上下文,并调用键盘的中断处理程序。
  4. 扫描码转换为ASCII码并存储在键盘缓冲区:中断处理程序将扫描码转换为对应的ASCII码,并将其存储在键盘缓冲区中。
  5. 键盘驱动程序读取缓冲区的扫描码:键盘驱动程序负责读取键盘缓冲区中的扫描码。
  6. 数据传递给应用程序:键盘驱动程序根据需要将数据传递给相应的应用程序。
  7. 显示驱动程序控制显示器显示:显示驱动程序负责数据一个一个写入到显示设备的控制器的寄存器中的数据缓冲区并控制显示器的显示和屏幕图像的更新。

通过以上流程,我们可以实现键盘输入的响应和字符的显示。这是一个简单的键盘输入过程,实际上还需要考虑更多的细节和处理逻辑,但以上流程可以帮助我们初步理解键盘输入的处理过程。

设备控制器

我们的电脑设备可以连接各种不同的输入输出设备,如键盘、鼠标、显示器、网卡、硬盘、打印机和音响等。每个设备都有不同的使用方式和功能,但操作系统需要统一管理这些设备。

为了减轻CPU的负担,每个外设都配备了一个专门的设备控制器,其实也跟应用程序就不需要直接与底层设备进行交互一样。设备控制器位于操作系统与硬件之间的中间层,负责处理外设硬件与CPU之间的通信和操作。

为了屏蔽设备之间的差异,每个设备都配备了对应的设备控制器(Device Control)组件。例如,硬盘有硬盘控制器,显示器有视频控制器等。这些设备控制器通过与操作系统进行交互,将外设的功能和状态信息传递给操作系统,并接收来自操作系统的指令来控制设备的运行。

image

操作系统利用设备控制器提供的接口和功能来管理和控制不同的设备。通过操作系统提供的设备驱动程序,应用程序可以通过操作系统进行与设备的交互。设备驱动程序负责与设备控制器通信,并将数据传递给相应的设备。例如,键盘驱动程序负责读取键盘设备控制器中的扫描码,并将其转换为对应的ASCII码,然后传递给应用程序。

设备控制器内部包含芯片,这些芯片具有自己的逻辑功能,并且拥有与CPU进行通信的寄存器。这些寄存器包括状态寄存器(Status Register)、命令寄存器(Command Register)以及数据寄存器(Data Register)。

通过操作系统向这些寄存器写入命令,可以指示设备执行发送数据、接收数据、开启或关闭等操作。通过读取这些寄存器,操作系统可以获取设备的状态信息,例如设备是否准备好接收新的命令等,如下图:

image

具体而言,命令寄存器用于向设备发送命令,告知设备进行输入/输出操作。当命令被接收后,设备开始执行对应的任务,并在任务完成后将状态寄存器中的状态标记为完成。

状态寄存器的作用是向CPU传递设备的工作状态,以告知CPU设备当前是否正在工作或已经完成工作。如果设备处于工作状态,CPU再次发送数据或命令是没有意义的,直到前面的工作完成,状态寄存器将状态标记为已完成,CPU才能发送下一个字符或命令。

数据寄存器用于CPU向I/O设备写入需要传输的数据。例如,如果要打印内容为"Hello",CPU首先向对应的I/O设备发送一个’H’字符。

通过读写设备控制器中的寄存器,CPU能够方便地控制设备。相比于CPU直接控制输入输出设备,这种方式更加便捷和标准化。

另外,设备控制器还可以根据设备的特性将输入输出设备分为两大类:块设备(Block Device)和字符设备(Character Device)。

块设备将数据存储在固定大小的块中,每个块都有自己的地址。常见的块设备有硬盘、USB等。而字符设备则以字符为单位发送或接收字符流,它们是不可寻址的,也没有寻道操作。鼠标就是一个典型的字符设备。

由于块设备通常传输的数据量较大,因此设备控制器设立了一个可读写的数据缓冲区。当CPU向控制器的缓冲区写入数据时,只有当缓冲区中的数据达到一定程度时,才会发送给设备。而当CPU从控制器的缓冲区读取数据时,也需要等待缓冲区中的数据达到一定程度后,才能将数据拷贝到内存中。这样做的目的是为了减少对设备的操作次数,提高数据传输的效率。

那么,CPU是如何与设备的控制寄存器和数据缓冲区进行通信的呢?这里存在两种方法:

一种是通过端口 I/O方式,每个设备的控制寄存器都被分配了一个独立的I/O端口。CPU可以通过特殊的汇编指令(如in/out指令)来操作这些寄存器,实现与设备的通信。

另一种是通过内存映射 I/O方式,将所有设备的控制寄存器映射到内存空间中。这样,CPU就可以像读写内存一样,直接读写设备的控制寄存器和数据缓冲区。这种方式相对于端口 I/O方式来说,更加灵活和方便。

总结

键盘输入的处理过程包括键盘设备控制器将扫描码存储、中断请求发送给CPU、中断处理程序将扫描码转换为ASCII码并存储在键盘缓冲区、键盘驱动程序读取缓冲区的扫描码并传递给应用程序,最后显示驱动程序控制显示器显示字符和更新屏幕图像。

设备控制器位于操作系统与硬件之间的中间层,负责处理外设硬件与CPU之间的通信和操作。它通过与操作系统进行交互,将外设的功能和状态信息传递给操作系统,并接收来自操作系统的指令来控制设备的运行。

设备控制器内部包含有自己的逻辑功能和与CPU通信的寄存器,例如状态寄存器、命令寄存器和数据寄存器。通过操作系统向这些寄存器写入命令,可以指示设备执行相应的输入/输出操作,通过读取这些寄存器,操作系统可以获取设备的状态信息。

通过本文的介绍,我们可以初步了解键盘输入的处理过程和设备控制器的作用,从而更好地理解操作系统与硬件之间的交互过程。


我是努力的小雨,一名 Java 服务端码农,潜心研究着 AI 技术的奥秘。我热爱技术交流与分享,对开源社区充满热情。同时也是腾讯云创作之星、阿里云专家博主、华为云云享专家、掘金优秀作者。

💡 我将不吝分享我在技术道路上的个人探索与经验,希望能为你的学习与成长带来一些启发与帮助。

🌟 欢迎关注努力的小雨!🌟

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/402724.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux下 vim的用法

目录 前言 一、初始Vim 二、使用Vim 1.1命令模式 2.1底行模式 3.1插入模式 前言 提示:这里可以添加本文要记录的大概内容: 本篇文章会介绍vim的基本用法和为什么我们要学习vim。 提示:以下是本篇文章正文内容,下面案例可供…

PumpkinRaising靶机

端口扫描 目录扫描 访问80端口, 在页面上面发现提到了一个Jack,可能是一个用户名 f12查看源码 找到一个页面 拼接访问 查看源码 发现一个注释 解密 是一个目录 /scripts/spy.pcap 访问,自动下载了一个文件 wireshark打开流量包 找到第一个s…

IndexError: list index out of range | 列表索引超出范围完美解决方法

IndexError: list index out of range 📉 | 列表索引超出范围完美解决方法 IndexError: list index out of range 📉 | 列表索引超出范围完美解决方法摘要 📄引言 🚀 什么是 IndexError: list index out of range?&…

vba代码插入折线图

xqwertyy52152018139hi303533312015 Sub test()Set sht1 ThisWorkbook.Worksheets("示例")x sht1.Range("I1").Lefty sht1.Range("I1").Topw sht1.Range("N15").Width * 15h sht1.Range("N15").Height * 25Set ch1 s…

路径规划 | 基于改进蝙蝠算法的多无人机路径规划(Matlab)

目录 效果一览基本介绍程序设计参考文献 效果一览 基本介绍 路径规划 | 基于改进蝙蝠算法的多无人机路径规划(Matlab) 蝙蝠算法(Bat Algorithm)是一种基于自然界蝙蝠群体行为的启发式优化算法。该算法模拟了蝙蝠在寻找食物时的行为…

Github Copilot 使用技巧

🎯目标读者 本文不包含如何安装 Github Copilot本文介绍了 Github Copilot 使用方法和一些技巧 本人已经使用 Github Copilot 2 年了,交了 3 次年费,每年 100$ 着实心痛,但是用着确实爽歪歪 但是感觉一直只用了一小部分功能&am…

技术证书认证-附考试答案-AIGC与大模型通识-英特尔大湾区科技创新中心证书认证

目录 课程简介 面向人群 考核步骤 试题答案 知孤云出岫主页 课程以及考试链接:AIGC与大模型通识 - 英特尔大湾区科技创新中心 【英特尔大湾区科技创新中心】公益新课《AIGC与大模型通识》上线官网!首期结业认证进行中,提升AI应用技能&…

顶顶通呼叫中心中间件-通话之前录音配置方法(mod_cti基于FreeSWITCH)

顶顶通呼叫中心中间件-通话之前录音配置方法(mod_cti基于FreeSWITCH) 1、修改配置文件 点击配置文件 -> 点击vars -> 根据图中配置 -> 点击提交XML ->重新启动freeswitch 修改成true就是电话接通开始录音&#xff0c;修改成false就是通话之前开始录音。 <!--应…

微信小程序免费《短视频去水印》

分享一个uniapp开发的微信小程序免费《短视频去水印》小程序 <template><view class"content"><view class"area-wrap"><textarea name"" v-model"state.content" maxlength"800" id"" cols…

~Keepalived高可用集群~

一、Keepalived简介 是一个用于实现高可用性的解决方案&#xff0c;它主要应用于云主机的主备切换&#xff0c;以达到高可用性&#xff08;HA&#xff09;的目的。当主服务器发生故障无法对外提供服务时&#xff0c;动态将虚拟IP切换到备服务器&#xff0c;继续对外提供服务&a…

宏定义———C语言

*符号代表全部的意思*.i代表的是全部的点i文件 宏定义 &#xff1a; 1.定义&#xff1a; #define 宏名 常量功能&#xff1a;宏名代替常量&#xff0c;宏名要求全大写且见名知义 2.示例&#xff1a; #include <stdio.h> #define PI 3.14 #define Q 4 #define P QQi…

虚幻5|给武器添加碰撞检测与伤害

本章内容衔接上两章&#xff0c;需要完成上两章才能用本章内容 虚幻5|角色武器装备的数据库学习&#xff08;不只是用来装备武器&#xff0c;甚至是角色切换也很可能用到&#xff09;-CSDN博客虚幻5|普通攻击&#xff0c;使用接口更方便-CSDN博客 如有疑问&#xff0c;可访问…

利用EditPlus进行Json数据格式化

利用EditPlus进行Json数据格式化 git下载地址&#xff1a;https://github.com/michael-deve/CommonData-EditPlusTools.git (安装过editplus的直接将里面的json.js文件复制走就行) 命令&#xff1a;Cscript.exe /nologo “D:\Program Files (x86)\EditPlus 3\json.js” D:\P…

简单的敏感词提示功能

简单的敏感词提示功能 1. 需求 公司现在接到通知&#xff0c;部分接口的部分手动输入字段&#xff0c;需要新增敏感词报红提示&#xff0c;敏感词汇现在应该是7000多个左右&#xff0c;需要我们提供一个敏感词校验接口&#xff0c;如果前端输入敏感词&#xff0c;则前端提示出…

【网络】UDP回显服务器和客户端的构造,以及连接流程

文章目录 回显服务器&#xff08;Echo Server&#xff09;0. 构造方法1. 接收请求2. 根据请求计算响应3. 将响应写回客户端4. 完整代码 客户端&#xff08;Echo Client&#xff09;0. 构造方法1. 读取输入2. 构造一个 UDP 请求3. 从服务器读取响应4. 完整代码 服务器与客户端连…

【自动化测试】技术交流论坛

前言 本篇使用Selenium3Junit5对个人技术交流论坛进行简单的自动化测试&#xff0c;如有错误&#xff0c;请在评论区指正&#xff0c;让我们一起交流&#xff0c;共同进步&#xff01; 文章目录 前言1. 项目基础描述2. 编写手工测试用例3. 测试用例转自动化测试用例3.1 前置准…

NVR方案背景与产品介绍与构建一套完整的NVR产品解决方案

一、NVR和DVR 在视频监控领域&#xff0c;DVR和NVR是两种常用的录像技术。它们在系统结构、视频处理、存储和访问方式等方面存在明显的区别。&#xff0c;但都在视频监控中扮演着重要的角色。首先来了解它们的区别和特点&#xff0c;这有助于在选择合适的设备时做出明智的决策…

C语言第20天笔记

文件操作 概述 什么是 文件 文件时保存在外存储器上&#xff08;一般代指磁盘&#xff0c;也可以是U盘、移动硬盘等&#xff09;的数据的集合。 文件操作体现在哪几个方面 1. 文件内容的读取 2. 文件内容的写入 数据的读取和写入可被视为针对文件进行输入和输出的操作&a…

pytorch实现单层线性回归模型

文章目录 简述代码重构要点 数学模型、运行结果数据构建与分批模型封装运行测试 简述 python使用 数值微分法 求梯度&#xff0c;实现单层线性回归-CSDN博客 python使用 计算图&#xff08;forward与backward&#xff09; 求梯度&#xff0c;实现单层线性回归-CSDN博客 数值微分…

24/8/17算法笔记 策略梯度reinforce算法

import gym from matplotlib import pyplot as plt %matplotlib inline#创建环境 env gym.make(CartPole-v0) env.reset()#打印游戏 def show():plt.imshow(env.render(mode rgb_array))plt.show() show()定义网络模型 import torch #定义模型 model torch.nn.Sequential(t…