Minix3信号处理分析
进程的信号处理的相关结构
PM中存放着所有进程的进程描述符,在一个进程描述符中,有一个指针,指向一个sigaction结构二维数组中的一项,表示这个进程所有信号的操作.一个sigaction结构包含信号处理函数的起始地址,执行期间需要屏蔽的信号,以及表示如何处理信号的标志
代表一个进程对单个信号操作的Sigaction结构如下
进程描述符结构为mproc如下
信号处理流程
1、寻找接收信号的进程
进程A要发送信号,需要传入一个proc_id,指明接收信号的进程。PM中有一个数组,存放着所有进程的进程描述符,PM会遍历该数组,根据proc_id和进程A的相关信息去找到接收信号的进程。
进程描述符的mp_pid,mp_procgrp:
proc_id>0时,把信号发送到其mp_pid等于proc_id的进程
proc_id=0时,把信号发送到mp_procgrp等于A mp_procgrp的进程
proc_id=-1时,把信号发送到所有进程,除了swapper,unit和当前进程
proc_id<-1时,把信号发生到mp_procgrp等于-proc_id的所有进程
同时在决定进程能否发送信号的时候有一些条件,如检查真实uid和有效uid等
2、查看接收信号的进程对于信号的处理方式
具体位图查看末尾mproc结构
转化为信号
发送信号给系统进程
忽略信号:什么都不做
Ignore位图被置位
悬挂信号:将信号加入pending位图
1、mask位图置位
2、进程处于等待调用状态,并且停止等待失败
3、被跟踪
检查点:在任何改变sigmask位图之后,调用sigreturn之后
捕获信号:做进一步的信号处理,重新设置栈的内容
Catch位图被置位
3、捕获信号
将sigaction中的各种信息和sigreturn函数的地址传递给内核。内核去重新设置栈和寄存器内容,让进程再次运行时执行信号处理函数,并且信号处理函数执行完成之后执行sigreturn,进程返回到信号处理函数执行的状态
信号相关调用
Sigaction调用:改变进程的某一个信号操作,或是获取进程的某一个操作
根据一个进程的进程描述符中的指针,找到代表目的进程该信号操作的sigaction结构。直接返回或是替换
Sigprocmask调用:改变进程的屏蔽信号
对进程描述符上代表屏蔽信号的sigmask位图进行替换,替换完成之后要检查,看是否有非屏蔽的挂起信号
Kill调用:向另一个进程发送信号
完整执行上述信号处理流程
Sigsuspend调用:悬挂进程,等待某些信号唤醒
将进程原屏蔽位图sigmask保存到sigmask2,将sigmask置为我们在挂起时需要屏蔽的信号位图,然后暂停。同意,再改变了屏蔽信号的位图之后需要检查,看是否有非屏蔽的挂起信号
Sigpending调用:得到进程当前屏蔽的信号
返回当前进程的sigmask位图
Sigreturn调用:在信号处理后恢复进程状态到信号处理之前
struct sigaction
{
handler_t sa_handler;//信号处理函数指针
sigset_t sa_mask;//信号处理函数运行时需要屏蔽的信号
int sa_flags;//怎样处理信号的一个标志集
};
mproc{
...
sigset_t mp_ignore; /* 1 means ignore the signal, 0 means don't*/
sigset_t mp_catch; /* 1 means catch the signal, 0 means don't */
sigset_t mp_sigmask; /* signals to be blocked */
sigset_t mp_sigmask2; /* saved copy of mp_sigmask */
sigset_t mp_sigpending; /* pending signals to be handled */
sigset_t mp_ksigpending; /* bitmap for pending signals from the kernel */
sigset_t mp_sigtrace; /* signals to hand to tracer first */
ixfer_sigaction *mp_sigact; /* as in sigaction(2), pointer into mpsigact */
vir_bytes mp_sigreturn; /* address of C library __sigreturn function */
unsigned mp_flags; /* flag bits */
...
}
Minix3信号处理分析的更多相关文章
- MINIX3 进程调度分析
MINIX3 进程调度分析 5.1MINIX3 进程调度概要 MINIX3 的进程调度还是非常简单的,调度算法是非常短小的,其目的就是体现 了一个简单和高效的设计原则,当然简单和高效其实很难并存, ...
- MINIX3 导读分析
一个操作系统的分析是属于一个非常庞大的工程,操作系统就像是一个人造的 人,每一个模块想完全发挥功效,很有可能需要很多模块的支持才能够实现.所 以在分析 MINIX3 时,我认为同时看多个模块对于理解 ...
- KCF:High-Speed Tracking with Kernelized Correlation Filters 的翻译与分析(一)。分享与转发请注明出处-作者:行于此路
High-Speed Tracking with Kernelized Correlation Filters 的翻译与分析 基于核相关滤波器的高速目标跟踪方法,简称KCF 写在前面,之所以对这篇文章 ...
- PM 时钟机制
PM 时钟机制 10.1 Minix3 PM 时钟机制概述在 MINIX3 中,除了前面所讲到的 CLOCK 时钟,在 pm 中也是维持了一个时钟, 我们暂且不分析为啥要这么做,我就分析是怎么实现这个 ...
- Tinyshell: 一个简易的shell命令解释器
这是自己最近学习Linux系统编程之后写的一个练手的小程序,能很好地复习系统编程中的进程管理.信号.管道.文件等内容. 通过回顾写的过程中遇到的问题的形式记录程序的关键点,最后给出完整程序代码. 0. ...
- MINIX3 内核整体架构回顾及内核定 性分析
MINIX3 内核整体架构回顾及内核定 性分析 12.1 注意事项 由于本文档不对 I/O 文件系统做出分析,所以在此不对 MINIX3 整体做出一个分 析,本章主要是针对内核进程分析.并且这里的模 ...
- MINIX3 进程通信分析
MINIX3 进程通信分析 6.1MINIX3 进程通信概要 MINIX3 的进程通信是 MINIX3 内核部分最重要的一个部件,我个人认为其实这 是内核中的“内核”,怎么来理解这个概念呢?其实 MI ...
- MINIX3 内核时钟分析
MINIX3 内核时钟分析 4.1 内核时钟概要 先想想为什么 OS 需要时钟?时钟是异步的一个非常重要的标志,设想一下,如 果我们的应用程序需要在多少秒后将触发某个程序或者进程,我们该怎么做到? ...
- libevent源码分析之信号处理
新看看官方demo的libevent如何使用信号 int called = 0; static void signal_cb(int fd, short event, void *arg) { str ...
随机推荐
- apollo实现c#与android消息推送(三)
3 实现c#消息推送服务 c#实现消息推送必须引入M2Mqtt.dll,源码 a 连接apache apollo代理服务器的代码.需要引入using uPLibrary.Networking.M2Mq ...
- java关于随机数和方法重构
1.生成随机数 源代码 package Zuote; public class SuiJiShu { public static void main( String args[] ) { java.u ...
- Django学习中遇到的问题(1)django migration No migrations to apply
C:\Users\Desktop\homeWork\Django_stu_man>python manage.py makemigrations Migrations for 'app01': ...
- python pyqt
一.控件 1.单行文本框QLineText clear() 清除文本框中的内容contextMenuEvent() 右键菜单事件copy() 复制文本框中的内容cut() 剪切文本框中的内容paste ...
- HTTP错误代码大全
HTTP出错大全 101 - Switching Protocols Top Success Codes 200 - OK201 - Created202 - Accepted203 - Non-Au ...
- chromium源码阅读--Browser进程初始化
最近在研读chromium源码,经过一段懵懂期,查阅了官网和网上的技术文章,是时候自己总结一下了,首先IPC message loop开始吧,这是每个主线程必须有的一个IPC消息轮训主体,类似之前的q ...
- spring cloud+dotnet core搭建微服务架构:配置中心续(五)
前言 上一章最后讲了,更新配置以后需要重启客户端才能生效,这在实际的场景中是不可取的.由于目前Steeltoe配置的重载只能由客户端发起,没有实现处理程序侦听服务器更改事件,所以还没办法实现彻底实现这 ...
- CSS之 z-index 属性
层叠上下文: 三维概念,表示元素在Z轴的位置 层叠可嵌套,组合成一个分层次上下文 每个层叠上下文和兄弟元素独立,进行层叠变化或渲染时,只考虑后代元素 每个层叠上下是自成体系的 层叠顺序 1 bac ...
- 最美时光第三方UWP源码公开
自己大概写了一个星期的成果.. 使用了官方最美时光app的UI和图片资源,并没有调用官方接口 https://files.cnblogs.com/files/loyieking/NiceCountDo ...
- 【网络爬虫入门04】彻底掌握BeautifulSoup的CSS选择器
[网络爬虫入门04]彻底掌握BeautifulSoup的CSS选择器 广东职业技术学院 欧浩源 2017-10-21 1.引言 目前,除了官方文档之外,市面上及网络详细介绍BeautifulSoup ...