当前位置: 首页 > news >正文

在哪做网站便宜又好卖友情链接的哪来那么多网站

在哪做网站便宜又好,卖友情链接的哪来那么多网站,球类网站如何做宣传,学校网页设计模板html代码免费三、信号的发送与保存 3.1信号的发送 ​ 必须有操作系统来保存信号,因为他是管理者; ​ 信号给进程的task_struct发送信号,在task_struct中维护了一个整数signal有0-31位,共32个bit位;对于信号的管理使用的是位图结…

三、信号的发送与保存

3.1信号的发送

必须有操作系统来保存信号,因为他是管理者

​ 信号给进程的task_struct发送信号,在task_struct中维护了一个整数signal有0-31位,共32个bit位;对于信号的管理使用的是位图结构,即0/1表示未收到/收到,对于31种信号就是对应位置为1,其余位置为0,0位置一般是0,全0表示没有收到信号;

​ 即1.信号的编号表示对应的位置置为一;2.所谓的发信号就是修改位图结构对应位置的bit位;

​ 操作系统是进程的管理者,只有他可以修改进程的属性,即将进程内部的信号进行修改;

​ 对于信号处理的结果终止、核心转储、忽略、暂停、继续,操作系统提供温和的方式,并不会直接粗暴地只是终止进程一个选择(具备直接杀死进程的能力),是因为要满足外界的需求,防止直接终止程序,而不进行更重要的收尾工作,最终由操作系统来担责任;

3.2信号的保存

3.2.1对于普通信号和实时信号的处理

​ 对于普通信号是不会立即处理的(可能进行着比处理信号更重要的事情),所以在产生信号到处理信号的时间窗口期间要保存信号;使用位图保存信号就是为了解决判断在不在和是几的问题,而位图结构这种值与位置映射的哈希关系简单并且正好符合需求;同时发送多个相同信号但是操作系统会将其当作一个信号处理(即发送了10个,会有9次丢失),因为每种信号只有一个位置来进行表示;

​ 而对于实时信号,1.必须立即处理;2.信号不能丢失,来10次必须处理10次;所以不可以用位图这种结构来保存,需要使用双链表和队列来实现;

3.2.2信号在进程中的内核设计

​ 1.信号处理的动作叫做信号递达(Delivery),即信号处理(包括默认、忽略、自定义处理)使用的是(Handler表,是一个函数指针数组表);2.信号从产生到递达的状态叫做信号未决,即信号保存使用的是(Pending表,是一个位图),信号未决状态是和位图相关的;3.进程可以选择阻塞某个信号,一旦信号被阻塞,那么这个信号就不会被递达(可以接收保存),为了实现阻塞,操作系统设计了block表,是一个位图结构,0/1表示非阻塞/阻塞;

​ 普通信号从1-31都有自己对应的信号处理方式,即每一个信号对应Handler表的下标存放着信号处理方法的指针,一般存放的是系统的默认实现,当使用signal(signo,handler)函数时,就会将函数指针替换成自定义或者是忽略行为;

​ 信号产生,通过信号编号来找Handler表的下标位置调用信号处理方法和产生硬件中断,根据中断号调用中断向量表的硬件处理方法是类似的;

​ 总结:操作系统为进程识别和处理信号,在内核结构里设置了两张位图结构(用数组维护的位图结构,默认为0,可以支持扩展性,这种结构会被封装,提供给上层使用,类似共享内存的属性,套接字属性)和一张函数指针数组,在task_struct结构中存放着这三张表;信号是通过使用三张表来实现对信号的管理。对于一个信号编号,三张表都使用同一对应下标。即对信号的操作都离不开这三张表;三张表的逻辑是独立的;

在这里插入图片描述

3.2.1系统接口来管理三张表

//handler表
typedef void (*__sighandler_t) (int);
#define SIG_DFL	((__sighandler_t) 0)		/* Default action.  */
#define SIG_IGN	((__sighandler_t) 1)		/* Ignore signal.  */
//将0、1强转成函数指针类型
sigset_t//信号集类型,输出型参数类型,用来获取内核两张位图表;
//sigset_t类型对于每种信号用一个bit表示“有效”或“无效”状态,至于这个类型内部如何存储这些bit则依赖于系统实现,从使用者的角度是不必关心的,使用者只能调用以下函数来操作sigset_ t变量,而不应该对它的内部数据做任何解释,即面向对象封装;
#include <signal.h>
int sigemptyset(sigset_t *set);//将位图清空
int sigfillset(sigset_t *set);//设置位图全部为1
int sigaddset (sigset_t *set, int signo);//设置位图的特定位置为1
int sigdelset(sigset_t *set, int signo);//设置位图的特定位置为0
int sigismember(const sigset_t *set, int signo);//判断是否存在于位图结构
//调用函数sigprocmask可以读取或更改进程的信号屏蔽字(阻塞信号集)。
#include <signal.h>
int sigprocmask(int how, const sigset_t *set, sigset_t *oset); 
返回值:若成功则为0,若出错则为-1
//第一个参数如下三选一:
SIG_BLOCK(相当于原位图|set)、SIG_UNBLOCK(相当于原位图&~set)、SIG_SETMASK(相当于原位图=set)
//第二个参数是输入型参数,用来修改位图;
//第三个参数用来获取修改前的结果,保存老的位图结构,用来恢复;
//操作系统不允许某些信号的屏蔽;比如 9、19
#include <signal.h>
int sigpending(sigset_t *set);
//外界获取pending位图表

总结:1.对于block表的修改使用sigset_t类型+sigprocmask()函数来进行修改;2.对于pending表的修改使用sigset_t类型+sigpending()函数来进行修改;3.对于handler表使用signal()函数进行修改;

四、信号的捕捉处理

​ 信号保存后会在合适的时间进行处理;

4.1信号处理时间

​ 进程会在操作系统的调度下处理信号,操作系统只管发信号,即信号处理是由进程完成的;

​ 1.信号处理首先进程得检查是否有信号;2.进程要处于内核状态才能处理信号;

​ 即进程会在内核态返回用户态的时候检查并处理信号;

在这里插入图片描述

http://www.ritt.cn/news/8839.html

相关文章:

  • 常州网站建设方案维护优化设计答案大全英语
  • wordpress无法更新创建搜索引擎seo
  • 16岁的做兼职在什么网站好营销案例100例简短
  • flash cms网站源码网站优化的方法有哪些
  • 网站建设界面建议快速网站排名提升
  • 西安微官网自助建站公司百度提问
  • 如何做网站视频百度竞价怎么做效果好
  • 网站做盗版视频赚钱吗网络黄页推广软件哪个好用
  • 合肥模板建站多少钱全国疫情高峰感染进度查询
  • 嵌入字体的网站微信管理工具
  • 腾讯网站安全检测搜狗站长
  • 有什么可以做试卷题目的网站百度seo推广软件
  • 网站设计应该怎么做重庆森林影评
  • 服务器怎么发布网站如何优化网站
  • 河北邯郸做网站的公司哪家好企业整站优化
  • 北京高端网站建设系统百度快照是怎么做上去的
  • 网站做ssl证书有风险图片优化网站
  • 电子商务网站建设心得苏州首页排名关键词优化
  • 简述网站建设基本流程答案互联网营销推广公司
  • 58做二手车网站应该怎么推广全网营销策划公司
  • 深圳网站制作公司建设淄博网络推广公司哪家好
  • 东阿企业做网站推广朝阳区seo
  • 广州比较好的网站设计群排名优化软件官网
  • 设计网站的功能有哪些百度识图查图片
  • 电商网站方案推广图片制作
  • 桂林社会面最新消息北京网站seo
  • 项目管理中软件分类为适合seo软件
  • 山东泰安疫情seo权威入门教程
  • 网站设计外包怎么注册网站平台
  • 河南省建设银行网站北京seo顾问服务公司