35.信号

lesson 27

不涉及io数很大。差了一万倍

看代码,啊

function是包装器,定义func_t是个返回值是void参数是()的方法

操作系统一开机就处于死循环,在别人催促之下,发送信号让操作系统执行注册的方法,

一个tast struct结构体包括一些进程的信息count是时间片,未来可以变成链表,在数组中,就是全局的所有进程,创建一个进程时,就进入这个数组,,假设这个数组有很多进程,调度时候遍历进程,找时间片最少的的那个,用它调度,这种思想就是操作系统运行原理,


如何 理解闹钟

外部以固定时间间隔刺激,我只需固定一个计数器 最开始设置一个timestamp为0,每刺激一下,这个数++,某个时刻,这个数是10000,说明执行了一万次,系统到开机到现在就是一万秒了。

还可以给进程定义整数10,调度一个进程count--,如果《=0就切换其他进程。就是时间片耗尽,本质就是个计数器,

用小堆实现,OS只检测堆顶的超时时间,与当前时间对比,比当前时间当,证明没有闹钟触发,,大于就出堆,执行该节点内函数指针的方法,向目标进程发送sigalrm,操作系统就可以一个时间间隔之后向进程发信号的工功能了,

闹钟超时向OS发送信号方式,属于软件条件,闹钟是用软件设计的,超时是软件条件。管道也是,都是操作系统内维护的


信号的保存:

进程当中不止只有位图,还有三张表,pending表最后一个位置不用,对应的是信号未决表,

按位取反然后与就可以获得可以抵达的信号,

第三个表是函数地址。

信号处理时,即便当前没有收到1号,我也知道他的动作,sig_defl叫做默认,收到了1号但是1号被block,暂时没被抵达,但是未来要被抵达,动作叫ignore叫做忽略,当前并没有收到3号信号,虽然三号信号被block了但是我还没收到,解除屏蔽我们要执行sigal header ,sigal信号本质是修改sigal表。

看testsig忽略的代码忽略一次下次停止

看表1号信号没有被bllock pending 处理动作是默认,2号横着看收到了信号因为pending 是1,block是1 所以没办法抵达,横着看3,没收到,依旧保证阻塞,就算收到也不会抵达,,这张表对应31组描述信号的关系。

block和pending没有关系,

三张表两个位图加个数组。内核还比较复杂我们就这么理解


验证:

谁调sigprocmask我们就获取设置更新 谁的block表,sig setmask用set这个信号集初始化block

sig_block是把传进来的信号集里设置为1的信号新增到block里,新增屏蔽。unclock,就是解除屏蔽,谁1谁解除。oldset是输出型参数,带老的block

sigpending 函数 获取pending信号集的,参数是输出型参数,怎么设置我们已经学了。


看整合demo:

如果信号没有被 block(阻塞),当对应的信号处理函数(handler)执行完成后,内核会将该信号的 pending 位清 0。看全部代码,屏蔽二号信号,可以看到二号,而且不会退

core 出错一次dump一次,一般公司挂一次dump一次,磁盘就满了。

打开core 看代码 关闭,core功能,看那个代码

相关推荐
charlie1145141915 小时前
嵌入式Linux驱动开发——新 API 字符设备驱动完整教程 - 从设备结构体到应用测试
linux·运维·驱动开发
消失的旧时光-19436 小时前
C语言对象模型系列(四)《Linux 内核里的 container_of 到底是什么黑魔法?》—— 一篇讲透 Linux 内核的“对象模型”核心技巧
linux·c语言·算法
SWAGGY..6 小时前
Linux系统编程:(二)基础指令详解
linux·运维·服务器
kdxiaojie7 小时前
U-Boot分析【学习笔记】(3)
linux·笔记·学习
烛衔溟7 小时前
TypeScript 接口继承与混合类型
linux·ubuntu·typescript
蜡笔婧萱7 小时前
Linux--远程登录服务ssh
linux·服务器·ssh
伏加特遇上西柚8 小时前
Loki+Alloy+Grafana日志采集部署
java·linux·服务器·spring boot·grafana·prometheus
资源分享助手8 小时前
三网H5小游戏战车向前冲搭建教程(Win+Linux)
linux·运维·服务器
黑白园8 小时前
Linux i2c驱动初探(一)待补充
linux
无限进步_8 小时前
Linux权限模型:从rwx到粘滞位
linux·运维·服务器