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功能,看那个代码

相关推荐
幼儿园蛋小黄1 分钟前
从设备树到 ARM 驱动:嵌入式 Linux 驱动开发学习总结
linux·arm开发·驱动开发
dishugj14 分钟前
HANA集群计划内切换与维护操作
java·linux·数据库
爱吃香菜的初学者2 小时前
十四.Linux——消息队列
linux·运维·开发语言
Apipi*9 小时前
30天速通Linux 第六章信号及信号处理
linux·运维·信号处理
天启HTTP10 小时前
爬虫防封核心原理:IP轮换机制与风控规避逻辑
linux·服务器·网络·爬虫·tcp/ip
广州浮点FLOATLIC12 小时前
许可证服务器迁移后软件打不开:研发 IT 怎样定位连接问题
linux·服务器·数据库
BLUcoding13 小时前
接口服务公网超时排查记录:SecureRandom 阻塞问题分析与解决
java·linux·springboot·aes·securerandom
AIgorithmGEEK13 小时前
[Linux]从手写报头到内核套路:序列化、反序列化与自定义协议全链路
linux·运维·服务器·网络·序列化·反序列化
Nil20813 小时前
leetcode 139单词拆分
linux·运维·服务器
Starry-sky(jing)13 小时前
BUG: unable to handle kernel paging request 完整排查:dmesg 四要素与三路定罪
linux·运维·服务器·内核·排障