信号三表block,pending、handler

news2024/11/19 0:28:25

目录

前序:

信号流程图:

pending表(信号未决表

block表(信号阻塞表

handler表(信号递达表

小知识点

1:handler保存的是什么


前序:

进程信号中的三大表格

首先在了解进程信号中的三大表格之前我们必须知道3个概念:
1、信号递达(Delivery):信号递达指的是进程实际执行信号的处理动作。
2、信号未决(pending):信号从产生到递达之间的状态。
3、阻塞(block):进程可以选择阻塞一个信号。被阻塞的信号产生时将保持在未决状态,直到进程解除对该信号的阻塞,才能执行递达的动作。

信号流程图:

信号的流程

pending表(信号未决表

这是一个位图,存在32位与64位图,我们用32位做讲解。也是个位图结构

信号写入pending表,将对应的位图(2号信号,第2位比特位)反转位为1。

block表(信号阻塞表

也是一个位图结构来保存数据。

进程接收信号写入pending表后,会检查同位置的block表的比特位,为一阻塞,为零执行信号行为。

handler表(信号递达表

这可就不是位图了,他是一个结构体数组里面保存着,这个每一个元素对应着一个信号执行方式

有一个地方值得注意,当我们信号执行完毕后,对应在pending表的信号位会恢复为0;

小知识点

1:handler保存的是什么

handler保存的是一个结构体,我们自定义了某个信号的自定义行为其实就是吧结构体里信号行为指针指向了自定义的函数,但是信号的默认地址并不会呗覆盖。

 改变信号行为就是将自己的函数写入自定义函数地址,然后用函数指针指向自定义函数

大致行为就是

 结构体中可能保存了自定义函数地址的指针变量,也可能只是行为函数指针指向函数地址,运行被下一个地址覆盖。

2、什么是信号在合适的时候执行

结论:在内核态中,从内核态返回用户态的时候,进行信号检测和处理

每个进程都有分用户态与内核态,在CPU中有个内用寄存器,保存着当前进程状态的寄存器,他也是个位图,该位图在某个比特位保存当前进程的运行态。

为什么会陷入内核态?执行系统调用,缺陷陷阱异常等等,我们的进程就会陷入内核态。

如何陷入呢?在汇编指令中有个int 80(不是整型int),他会改变状态寄存器记录运行态的比特位,当执行系统函数内前几句会执行该指令,将运行状态改变,进程陷入内核态,在进程出该系统函数前会再次调用int80 ,回到我们的用户态环境。

3:操作系统其实也是通过进程中跑的

在进程的虚拟内存地址空间中3~4G内存存储着内核代码与数据。当我们系统调用的时候其实也是从地址空间的0~3G跳转到3~4G中,然后通过内核的页表,去物理地址访问数据。

 我们在执行open函数:

在用户态调用open--->jump到内核态--->通过内核页表找到OS的open代码数据执行。

进程切换其实就是2个进程见内核间的互动。先在被占进程的内核地址中跑,然后再在占领进程的内核中跑

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

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

相关文章

SpringBoot Aop进行身份验证

忘了好复制🤣 创建一个注解,可以应用于类或者方法上的,进行表示身份认证。 Target({ElementType.TYPE, ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) public interface VerifyLogin { }定义一个没有登录的异常和全局异常处理器…

找样机素材,就上这5个网站,免费下载~

设计师经常需要用到各种样机模型来展示直接的作品,今天我就分享几个可以免费下载样机模型的网站,大家赶紧收藏起来! 菜鸟图库 https://www.sucai999.com/searchlist/3217.html?vNTYxMjky 菜鸟图库有多种类型的设计素材,像平面、…

fiddler过滤器

1、fiddler Fiddler是一个免费、强大、跨平台的HTTP抓包工具。下载地址 2、为什么适用过滤器 不适用过滤器时,所有的报文都会被抓包。 我们在开发或测试时,只需要抓包某个域名下的报文 ,以“www.baidu.com”为例,不设置过滤器&…

数据中台系列2:rabbitMQ 安装使用之 window 篇

RabbitMQ 是一个开源的消息队列系统,是高级消息队列协议(AMQP)的标准实现,用 erlang 语言开发。 因此安装 RabbitMQ 之前要先安装好 erlang。 1、安装 erlang 到 这里 下载本机能运行的最新版 erlang 安装包。如果本机没有装过 …

64核RISC-V服务器能打了吗?

作者:西风烈 最近看到“澎峰科技”的微信公众号,看到他们发布了第一款RISC-V服务器,芯片是算能的SG2042,带64个RISC-V核心(阿里平头哥的C910v核),2.0GHz主频,最大支持128GB内存。这…

【visual studio2019】如何打开即时窗口

在 Visual Studio2019 中打开即时窗口,有两种方法: 1、可以通过“调试”菜单,然后选择“窗口”下的“即时窗口”选项 2、直接使用快捷键“Ctrl Alt I” 此时即时窗口将显示在 Visual Studio2019 的底部。在即时窗口中,可以执…

Mybatis增强框架Mybatis-Flex

一、Mybatis-Flex是什么? Mybatis-Flex 是一个优雅的 Mybatis 增强框架,它非常轻量、同时拥有极高的性能与灵活性。我们可以轻松的使用 Mybaits-Flex 链接任何数据库,其内置的 QueryWrapper^亮点 帮助我们极大的减少了 SQL 编写的工作的同时…

Openlayers实战:绘制多边形,导出CSV文件

CSV(Comma-Separated Values)是一种常用的数据交换格式,是一种纯文本文件格式。在Openlayers的交互中,经常性的我们要导出一些数据,在这个实战中,演示的是导出CSV文件。 安装依赖 npm install file-saver --save npm install papaparse --save 效果图 导出的文件 源代码…

docker安装nginx并配置SSL

1、拉取镜像 docker pull nginx2、启动nginx容器,复制一份默认配置文件出来 // 以nginx镜像为基础镜像创建一个名为nginx01的容器 docker run -d -p 80:80 --name nginx01 nginx创建成功后会看到nginx的欢迎页面 3、挂载nginx目录 拷贝nginx的配置信息到主机目录…

【CAS6.6源码解析】深度解析默认票据存储策略及其拓展支持-探究存储策略的设计

CAS作为一款企业级中央认证服务系统,其票据的生成是非常重要的一环,在票据的生成中,还有一个比较重要的点是票据的存储,本文将默认票据存储策略及其拓展支持,并延伸到探究存储策略的设计。 文章重点分析源码的过程&…

一起学算法(二分查找篇)

1.线性枚举 1.线性枚举定义 线性枚举指的就是遍历某个一维数组(顺序表)的所有元素,找到满足条件的那个元素并且返回,返回值可以是下标,也可以是元素本身。 由于是遍历的,穷举了所有的情况,所以…

iphone卡在恢复模式怎么办?修复办法分享!

iPhone 卡在恢复屏幕问题是 iPhone 用户在软件更新或恢复期间的常见问题。如果你也遇到此问题,不要着急,接下来我们将探讨 iPhone 卡在恢复屏幕上的主要原因,以及如何轻松修复它。 iPhone卡在恢复屏幕问题上没有一个特别的原因,但…

ALLEGRO之Route菜单

本文主要介绍了ALLEGRO的Route菜单。 (1)Connect:走线; (2)Slide:推挤; (3)Timing Vision:等长设计时使用?暂不清楚; &…

【动态规划算法】-子序列问题题型(27-34题)

💖作者:小树苗渴望变成参天大树🎈 🎉作者宣言:认真写好每一篇博客💤 🎊作者gitee:gitee✨ 💞作者专栏:C语言,数据结构初阶,Linux,C 动态规划算法🎄 如 果 你 …

svn还原本地代码

svn代码还原 问题描述:在vscode中修改了代码,没有提交,而且不小心点击了svn更新,导致本地修改的最新代码被覆盖,因为没有提交,所以远程仓库中也没有刚才修改的代码记录 解决: 通过vscode的时间…

远距离传输大型文件:如何应对不同地区的网络环境和带宽约束

在现代社会中,远程传输大文件已经变得非常常见了。无论是个人生活还是各种组织之间的合作和协作,都需要频繁地进行文件传输。但是,由于不同地区的网络状况和带宽限制,传输大文件可能会遇到很多问题。因此,如何应对不同…

PSP - 蛋白质序列搜索算法 MMseqs2 与 HHblits 的搜索结果差异

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/132025401 在 AlphaFold2 中,使用 HHblits 算法搜索 BFD 与 UniRef30,输出 bfd_uniref_hits.a3m 文件。MMseqs2 优化搜索速…

Selenium-用这个框架自动化任何你想做的事情!

Chrome DevTools 简介 Chrome DevTools 是一组直接内置在基于 Chromium 的浏览器(如 Chrome、Opera 和 Microsoft Edge)中的工具,用于帮助开发人员调试和研究网站。 借助 Chrome DevTools,开发人员可以更深入地访问网站&#xf…

职责链模式-请求的链式处理

在实际开发中,对于一个请求我们要经过层层过滤:身份验证 -> 权限验证 -> 实际业务处理。请求沿着一个链在传递,每一层都可以处理该请求。而“职责链模式”就是专门用于处理这种请求链式传递的模式。 1 职责链模式概述 避免将请求发送…

Kubernetes系列

文章目录 1 详解docker,踏入容器大门1.1 引言1.2 初始docker1.3 docker安装1.4 docker 卸载1.5 docker 核心概念和底层原理1.5.1 核心概念1.5.2 docker底层原理 1.6 细说docker镜像1.6.1 镜像的常用命令 1.7 docker 容器1.8 docker 容器数据卷1.8.1 直接命令添加1.8.2 Dockerfi…