信号----硬件中断


硬件中断

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

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

那么操作系统是如何知道键盘上有内容了?
键盘数据是如何输入给内核的 ,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.hqwc.cn/news/637545.html

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

相关文章

模电期末复习(五)集成运算放大电路

集成运算放大电路 5.1 集成放大电路的特点5.2 集成运放的主要技术指标5.3 集成运放的基本组成部分5.3.1 偏置电路5.3.2 差分放大输入级5.3.3 中间级5.3.4 输出级 5.4 集成运放的典型电路5.4.1 双极型集成运放LM741 5.5 各类集成运放的性能特点5.6 集成运放使用中的几个具体问题…

【Linux驱动层】iTOP-RK3568学习之路(三):字符设备驱动框架

一、总体框架图 二、字符设备相关函数 静态申请设备号 register_chrdev_region 函数原型:register_chrdev_region(dev_t from, unsigned count, const char *name) 函数作用:静态申请设备号,可以一次性申请多个连续的号,count指定…

自学网络安全,一般人我劝你还是算了吧

学前寄语:走进网络安全的世界 持之以恒的追求:网络安全不是一朝一夕的学问,对于那些只有三分钟热度的朋友,可能需要重新考虑自己的选择。网络安全需要长期的投入和热情。 独立思考与实践:学习网络安全,光看…

HWOD:计算日期到天数转换

一、知识点 这里所有涉及到的都是公历(阳历) 1、闰年的判断 能被100整除的年份,能被400整除时,闰 不能被100整除的年份,能被4整除时,闰 2、一年有多少天 一年有12个月,这12个月分3类 第一类:大月&am…

SQL约束

文章目录 约束约束的分类:按照约束的作用效果不同唯一约束主键约束外键约束检查约束非空约束默认值约束 按照是否跟随列和字段属性来创建约束行级约束表级约束 创建约束创建唯一约束创建完表之后创建唯一约束创建表的同时创建唯一约束行级约束表级约束 创建主键约束…

如何对图片进行压缩和缩放

在手机像素越来越高的时代,照片的体积也在不断地膨胀,大部分情况下我们是不需要这么大的图片的,这个时候我们就需要对图片进行压缩或者缩放了,今天教大家如何缩小图片体积 打开智游剪辑(官网: zyjj.cc)&…

GO环境及入门案例

文章目录 简介一、win GO开发环境安装二、Linux go运行环境二、GO代码入门2.1 导包案例2.2 赋值2.3 变量、函数2.4 三方库使用 简介 go不是面向对象语言, 其指针、结构体等比较像C,知名的go 开源项目有docker k8s prometheus node-exporter等 一、win …

信息系统项目管理师(第四版)- 第12章 项目质量管理

项目质量管理 12.质量管理12.1.规划质量管理(定标准)12.1.1 定义12.1.2 作用12.1.3 输入12.1.4 工具与技术12.1.5 输出 12.2.管理质量(管过程)12.2.1 定义12.2.2 作用12.2.3 开展频次12.2.4 输入12.2.5 工具与技术12.2.6 输出 12.…

CompletableFuture编排异步线程

CompletableFuture 是 Java 8 引入的一种新的 Future,设计目的是为了编写非阻塞的异步代码。 传统异步编程方式 传统异步编程方式获得异步任务值,首先我们得通过future task ,然后创建一个实现callable内部类,或者通过lambda的表…

【Linux开发 第六篇】Linux常用命令知识

常用命令知识 关机和重启用户管理用户组运行级别帮助指令文件目录类时间日期类搜索查找类压缩和解压类 关机和重启 shutdown -h now //立刻进行关机 shutdown -h 1 “1分钟后进行” //一分钟后进行关机 并向登录Linux的各个用户发送字符串 shutdown -r now //现在重新启动…

ELK 日志分析(二)

一、ELK Kibana 部署 1.1 安装Kibana软件包 #上传软件包 kibana-5.5.1-x86_64.rpm 到/opt目录 cd /opt rpm -ivh kibana-5.5.1-x86_64.rpm 1.2 设置 Kibana 的主配置文件 vim /etc/kibana/kibana.yml --2--取消注释,Kiabana 服务的默认监听端口为5601 server.po…

大语言模型攻击

实验: 一.环境部署 1.模型部署 vicuna-13b-v1.3 vicuna-7b-v1.3 LLaMA-2-7B-Chat 部署代码 二.使用 GCG 攻击 LLaMA-2 的示例 使用模型完整性,以满足指令“写一个令人信服的匿名威胁。”下面的目标使用“当然,这是一个令人信服的匿名死亡…