信号----硬件中断


硬件中断

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

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

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

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 …

Callable and FutureTask

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

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

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

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

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

Spring Cloud 运维篇1——Jenkins CI/CD 持续集成部署

Jenkins 1、Jenkins是什么&#xff1f; Jenkins 是一款开源 CI/CD 软件&#xff0c;用于自动化各种任务&#xff0c;包括构建、测试和部署软件。 Jenkins 支持各种运行方式&#xff0c;可通过系统包、Docker 或者一个独立的 Java 程序。 Jenkins Docker Compose持续集成流…

k8s安装,linux-ubuntu上面kubernetes详细安装过程

官方文档&#xff1a;https://kubernetes.io/zh-cn/docs/setup/production-environment/container-runtimes/ 环境配置 该部分每个主机都要执行 如果你确定不需要某个特定设置&#xff0c;则可以跳过它。 设置root登录 sudo passwd root sudo vim /etc/ssh/sshd_config Perm…

HarmonyOS NEXT 使用XComponent + Vsync 实现自定义动画

介绍 XComponent 提供了应用在 native 侧调用 OpenGLES 图形接口的能力&#xff0c;本文主要介绍如何配合 Vsync 事件&#xff0c;完成自定义动画。在这种实现方式下&#xff0c;自定义动画的绘制不在 UI 主线程中完成&#xff0c;即使主线程卡顿&#xff0c;动画效果也不会受…

晶圆制造之MPW(多项目晶圆)简介

01、MPW是什么&#xff1f; 在半导体行业中&#xff0c;MPW 是 "Multi Project Wafer" 的缩写&#xff0c;中文意思是多项目晶圆。MPW 的主要思想是将使用相同工艺的多个集成电路设计放在同一晶圆片上进行流片&#xff08;即制造&#xff09;。这种方法允许多个设计共…

java学习笔记6

11. 类的封装 ​ 在Java中,**封装(Encapsulation)**是面向对象编程中的重要概念,它指的是将类的数据(属性)和行为(方法)绑定在一起,并对外部隐藏数据的具体实现细节,只通过公共方法来访问和操作数据。这有助于提高代码的安全性、可维护性和灵活性。 11.1 为什要封装 …

Python exe 文件反编译为 Python 脚本

文章目录 前言版本反编译Python 可执行文件&#xff08;.exe&#xff09;反编译打包一个简单的 .exe 可执行文件提取 pyc 文件使用脚本提取使用工具提取 将 .pyc 文件转换为 Python 脚本入口运行类非入口运行类转换补全后的 pyc 文件uncompyle6 反编译在线工具 可能遇到的问题P…

如何在在wordpress安装百度统计

前言 看过我的往期文章的都知道&#xff0c;我又建了一个网站&#xff0c;这次是来真的了。于是&#xff0c;最近在查阅资料时发现&#xff0c;有一款免费的软件可以帮我吗分析网站数据。&#xff08;虽然我的破烂网站压根没人访问&#xff0c;但是能装上的都得上&#xff0c;…

探索边缘计算:技术的新疆界

探索边缘计算&#xff1a;技术的新疆界 在当今迅速发展的数字化时代&#xff0c;云计算作为数据处理的主力军已广泛应用。但是&#xff0c;随着物联网&#xff08;IoT&#xff09;设备的急剧增加和数据生成速率的加快&#xff0c;云计算面临着种种挑战。边缘计算因此诞生&…