信号----硬件中断


硬件中断

键盘组合键是向进程发送信号,那么键盘数据是如何输入到内核中,然后变成信号的?这个信号又是由谁发送给进程的?

当键盘被按下,操作系统先知道用户用键盘输入了内容

那么操作系统是如何知道键盘上有内容了?
键盘数据是如何输入给内核的 ,ctrl+c是如何变成信号的?ctrl+c会被解释为2号信号。

根据冯诺依曼体系结构,键盘不能被直接访问,只能由它的管理者操作系统访问,所有首先知道键盘被按下的是操作系统先知道。

操作系统是如何知道键盘被按下,也就是如何知道键盘上有数据了,然后读取数据到他里面呢。是通过中断号!根据冯诺依曼体系结构,键盘属于外设
在这里插入图片描述
操作系统想要知道键盘是否有数据,要做定期检查。在Liunx下一切皆文件,键盘也是文件,有自己的文件描述符和内核缓冲区,他有自己的内核数据结构,操作系统把内核数据结构拷贝到文件缓冲区中。文件有自己的缓冲区,操作系统要拷贝前提是要知道键盘上已经有数据了,如何知道他定期的检查,那么计算机中存在很多的外设操作系统不可能去一一检查,他忙不过来有自己的事情要做,只有当他空闲的事情再检查,但是空闲时候检查有影响了效率,那么这个事情交给cpu去做

在计算机体系结构中,CPU不和外设直接打交道(在数据层面),不过在控制层面可以

cpu要读取外设,然后外设数据读到操作系统,操作系统读取数据时,实际上是拷贝到文件缓冲区中。在CPU上存在很多的帧角,直接集成在主板上,而设备也是插在主板上的,所有键盘间接在物理上可以和cpu连接。

cpu虽然不在键盘上读取数据,但是键盘是可以在硬件上给cpu发送一个硬件中断,硬件中断操作系统在执行对应工作时一旦硬件中断号就绪那么操作系统就会执行硬件中断号对应硬件中断表中的方法,一旦键盘上有数据了,键盘会通过一些硬件单元(常见8259)转化,把键盘中一些信息发送给cpu。

在计算机中存在很多设备cpu要计算这些数据先由操作系统将这些数据拷贝内存中,在拷贝这件事情上不难,但是怎么知道有数据是个问题,所有这一个问题不要操作系统去检查,通过cpu确定。当外设有数据了,外设会通过硬件单元发送硬件中断给cpu帧角,然后表明该设备有数据了,之后再通知操作系统去拷贝!
计算机中存在各种设备,各种设备都可以发送中断,所有cpu存在辨别中断是由哪一个设备发过来的,因此每一个设备的硬件中断是有对应编号的类似1,2,3,4之类的数字。假如给键盘分配的硬件终端号是1,所有未来键盘上有数据就绪就会给cpu发送1号中断号(通过和cpu直接相连的帧角发送)向cpu内某个帧角比如某个寄存器发送高低电频;给cpu某个帧角发送高低电频然后cpu来解释帧角收到的中断号是几,所有对应帧角上就有数据这是cpu知道的。因此cpu知道键盘上有数据,但是仅仅是cpu知道还没给拷贝到内存中。
在硬件层面上,向cpu某个帧角发送中断,cpu要记录下来某一个设备发过来的中断号是几,cpu是有记录的,这是因为在计算机中只认识二进制,所有在cpu中有一个寄存器能够保存数据,然后将接收过来的中断号对应的高低电频转换为二进制010101保存起来,然后转换为对应数据在给相应数据带上类型就是我们看见的数据了。那么cpu内部的寄存器为什么能保存数据?因为在硬件上不知道写的是什么数据,而硬件发送中断的过程起始就是在给某个帧角发送高低电频过程,就是对应01.

0:存储单元没有电信号;1:存储单元有电信号

cpu上寄存器能保存数据起始就是因为他能够有充放电过程,键盘通过发送高低电频给帧角之后cpu知道帧角是几,所有cpu会把对应帧角解释成高电位,然后就代表有数据。

硬件上数据交互就是在其充放电的过程,在硬件上是充电,而软件上就是解释成数据010101,然后再配上类型就是计算机上对应的数据了噢!

cpu的帧角是给外设准备的,键盘充放电就是在给cpu对应帧角发送中断。
中断向量表
在软件上呢在操作系统内部,计算机开机的时候会给操作系统新城一张中断向量表这是一个数组,然后中断向量表中都是存的是方法的地址,什么方法?直接访问外设的方法—主要是磁盘,显示器,键盘等外设,也可以说是函数指针,提供了一大堆的方法这些方法在操作系统内部实现,方法有读有写方法。提供中断向量表之后一旦外设上有数据操作系统一看终端向量表就知道哪个外设上有数据了就可以去拷贝设备到内存中。
一旦触发中断之后,操作系统立马识别到cpu上已经收到中断号,操作系统就会根据中段号去中断向量表中找这个中断号对应的方法,操作系统找到这个方法之后操作系统去执行这个方法,这个方法才是将数据拷贝到内存中的方法!

所有操作系统是如何得知键盘上有数据的?

是通过中断向量表和中断向量号还有cpu知晓!键盘一旦有数据就能按回车键盘立马通过cpu的帧角给cpu发送中断号发送中断号之后硬件中断以充放电的方式被cpu记录下来之后就让操作系统来读取这个数据

这个可以认为是操作系统来做的,那么中断号知道了,操作系统去查中断向量表里面的方法执行这个方法操作系统执行中断号对应方法这个方法就是从外设中读取数据到内核这个文件对应缓冲区中!

因为中断的产生操作系统不用花时间去检查外设是否有数据,外设只需要通过硬件中断就可以使操作系统知道自己的数据是否就绪!当操作系统知道数据之后就会将键盘上的数据拷贝到缓冲区中。
键盘输入数据判断
不过如果键盘上不是像1,2,3,4之类的数据而是组合键的形式输入的操作系统做什么?

对于键盘的输入分为普通输入和控制输入(组合键),操作系统要做出分辨分辨输入的是哪一种,所有操作系统在拷贝的时候要先对输入的数据做判断,若是控制数据,操作系统会将组合键尤其是(ctrl+c)转化为对进程发送信号,他并不会把它拷贝到文件缓冲区中。

键盘输入是基于硬件中断工作的,操作系统也是在不断接收中断处理的过程。

而信号也是数字,那么他是不是也是一种以中断的方式来的呢?信号是纯软件的行为不过它的功能和硬件中断很像在学习信号就是用软件的方式对进程模拟的硬件中断。

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

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

相关文章

【Camera Sensor Driver笔记】二、点亮指南之Sensor Module XML

Camera Sensor module XML详解: cameraId 与 slot id 一一对应 (即:dtsi中相对应的sensor的 cell-index ) moduleName 模组厂名称 sensorName sensor 名称 actuatorName 马达名称 oisName …

学习亚马逊云科技AWS云计算技术的三款官方免费3A游戏大作

玩3A大作免费电脑游戏,就能成为AWS云架构师、云开发大🐮?这么好的事尊的假的?小李哥今天就来给大家介绍,如何通过玩AWS官方的定制版虚拟人生、炉石传说和密室逃脱游戏学习AWS。这三个游戏完全免费,没有任何…

如何利用pg_dump和pg_restore迁移从一个PostgreSQL服务器到另一个服务器,同时保持一致性与高效性?

文章目录 解决方案1. 使用pg_dump导出数据2. 将导出的数据复制到目标服务器3. 使用pg_restore导入数据保持一致性与高效性的策略一致性高效性 示例代码导出数据复制数据到目标服务器在目标服务器上解压并导入数据 PostgreSQL数据库的迁移是一个常见的任务,特别是在升…

如何在PostgreSQL中使用CTE(公共表表达式)来简化复杂的查询逻辑?

文章目录 解决方案步骤示例代码 结论 在处理复杂的SQL查询时,我们经常会遇到需要多次引用子查询或中间结果的情况。这可能会使得查询变得冗长且难以理解。为了解决这个问题,PostgreSQL(以及其他一些SQL数据库系统)引入了公共表表达…

springdoc-openapi使用

springdoc-openapi使用 一、引入pom二、新增配置类OpenApiConfig四、Controller层示例五、配置文件新增内容六、验证 一、引入pom <dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-ui</artifactId><version>1…

【WSL】单机大模型前的基础环境配置

前言&#xff1a;在上一篇文章中&#xff0c;我们完成了WSL的部署&#xff0c;但是在大模型搭建&#xff08;尤其是Langchain&#xff09;前&#xff0c;还碰到了不少的坑&#xff0c;查找了不少的文章&#xff0c;所以本篇文章就做一个记录&#xff0c;避免以后再走冤枉路。 …

并发编程 可见性、原子性和有序性,如何解决

可见性&#xff0c;原子性和有序性 CPU&#xff0c;内存&#xff0c;I/0 三者在速度上存在很大差异&#xff0c;大概是CPU耗时一天 内存耗时一年&#xff0c;内存耗时一天 /O耗时十年 CPU 增加了缓存&#xff0c;以均衡与内存的速度差异;操作系统增加了进程、线程&#xff0…

力扣第541题: 反转字符串 II

题目&#xff1a; 给定一个字符串 s 和一个整数 k&#xff0c;从字符串开头算起, 每计数至 2k 个字符&#xff0c;就反转这 2k 个字符中的前 k 个字符。 如果剩余字符少于 k 个&#xff0c;则将剩余字符全部反转。 如果剩余字符小于 2k 但大于或等于 k 个&#xff0c;则反转…

迎接大模型时代:程序员的挑战与应对

随着人工智能技术的迅猛发展&#xff0c;大模型已成为当前人工智能领域的重要趋势之一。大模型具有更强大的表征能力和泛化能力&#xff0c;已在自然语言处理、计算机视觉等领域取得了显著成果。然而&#xff0c;大模型的出现也给程序员带来了新的挑战和机遇。 大模型对程序员…

通过v-if渲染的element-ui表单,校验规则不生效的问题

因为form-item绑定验证事件是在mounted中进行的&#xff0c;规则变化后没有进行重新绑定验证事件&#xff0c;v-if渲染组件节点diff后被复用了&#xff0c;所以验证也就自然失效了 例如&#xff1a;通过动态选择类型来控制驾驶人是否显示&#xff0c;并且是必填项 给每一个el…

创建Vue项目后的初始化操作-解决Vue项目中盒子高度100%不生效问题

解决Vue项目中盒子高度100%不生效问题。 &#xff08;由于最近create的项目有点多&#xff0c;记录一下&#xff09;。 文章目录 方法一&#xff1a;对症下药方法二&#xff1a;偏方补充 方法一&#xff1a;对症下药 在项目根目录/public/index.html文件中的head里加入以下代码…

Java 与垃圾回收有关的方法

1. gc 调用垃圾回收器的方法是 gc&#xff0c;该方法在 System 类和 Runtime 类中都存在。 在 Runtime 类中&#xff0c;方法 gc 是实例方法&#xff0c;方法 System.gc 是调用该方法的一种传统而便捷的方法。在 System 类中&#xff0c;方法 gc 是静态方法&#xff0c;该方法…

oracle一次sql优化笔记

背景&#xff1a;两个百万级数据量表需要连接&#xff0c;加全索引的情况下速度仍不见改善&#xff0c;苦查一下午解决问题未遂。 解决&#xff1a;经大佬指点了解到oracle优化器提示&#xff0c;使用/* USE_HASH(table1 table2) */或者/* USE_MERGE(table1 table2) */来指导优…

P5732 【深基5.习7】杨辉三角

此题可以为杨辉三角&#xff0c;可以看一下这篇文章: 传送门 AC代码&#xff1a; #include<iostream>using namespace std;const int N 30; int arr[N][N];int main() {int n;cin >> n ;arr[1][1] 1;for(int i1;i<n;i){for(int j1;j<i;j){if(j 1 || j …

括号成对匹配

括号成对匹配 题目 括号成对匹配。例如&#xff1a;[a{b©d}e]匹配成功&#xff0c;a(b}匹配不成功 思路 这题的考察点是栈的原理&#xff0c;可以把括号匹配看成入栈和出栈&#xff0c;如果是左边的括号一律入栈&#xff1b;如果是右括号需要先与对应的左括号进行对比…

Callable and FutureTask

Callable 由关系图可知&#xff0c;Callable和Runnable一样&#xff0c;也是一个函数式接口&#xff0c;可以使用Lambda表达式 与之不同的是&#xff0c;其内部的call()方法可以抛出异常且能return一个返回值 Callable<Object> callable new Callable() {Overridepublic…

网上赚钱新姿势:日赚二三十,十大靠谱平台任你选!

互联网时代下&#xff0c;网络兼职已成为许多人追求额外收入的热门选择。互联网的广泛普及与发展&#xff0c;不仅让人们轻松获取海量信息&#xff0c;更为我们提供了多样化的兼职机会。这些兼职工作不仅时间自由&#xff0c;而且种类繁多&#xff0c;适合各种人群参与。接下来…

JavaWeb 监听器

Javaweb监听器是一种特殊的类&#xff0c;用于监听Web应用程序中的事件和对象。它可以监听Web应用程序的启动和关闭事件&#xff0c;会话的创建和销毁事件&#xff0c;以及请求和响应的事件等。监听器可以在特定事件发生时执行一些特定的操作&#xff0c;比如记录日志、初始化资…

【AR开发示例】实现AR管线巡检

写在前面的话 这是一篇旧文档&#xff0c;代码仓库见 https://gitee.com/tanyunxiu/AR-pipe 本文档是基于超图移动端SDK的AR模块开发的示例&#xff0c;仅供参考&#xff0c;SDK在持续迭代中&#xff0c;相关描述可能有变化。 示例介绍 这是一个使用AR查看墙内管线的基础示…

Ant Design中Tree使用defaultExpandAll属性后不会默认展开所有节点怎么办?

最近做前端项目时&#xff0c;使用到了 tree 组件&#xff0c;选择使用 Ant Design 中的 tree 组件&#xff0c;默认所有节点初始时全部展开&#xff0c;使用 defaultExpandAll 属性。但是显示的时候&#xff0c;一个节点都没展开。于是调研了一下这个问题。发现有以下问题&…