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

佛山市住房和城乡建设局网站吉安网站制作公司

佛山市住房和城乡建设局网站,吉安网站制作公司,龙之向导外贸官方网站,权威的合肥网站推广三、信号的发送与保存 3.1信号的发送 ​ 必须有操作系统来保存信号#xff0c;因为他是管理者#xff1b; ​ 信号给进程的task_struct发送信号#xff0c;在task_struct中维护了一个整数signal有0-31位#xff0c;共32个bit位#xff1b;对于信号的管理使用的是位图结…三、信号的发送与保存 3.1信号的发送 ​ 必须有操作系统来保存信号因为他是管理者 ​ 信号给进程的task_struct发送信号在task_struct中维护了一个整数signal有0-31位共32个bit位对于信号的管理使用的是位图结构即0/1表示未收到/收到对于31种信号就是对应位置为1其余位置为00位置一般是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(signohandler)函数时就会将函数指针替换成自定义或者是忽略行为 ​ 信号产生通过信号编号来找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 sigismemberconst 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.dnsts.com.cn/news/232574.html

相关文章:

  • 申报教学成果奖的网站建设淘宝官网首页入口电脑版网址
  • 哪家公司设计网站h5网页设计报告
  • 电子商务网站的建设流程是怎样的淮南制作网站
  • wordpress做的著名网站企业搜索平台
  • 昆山网站建设是什么国防科技大学简介
  • 自己做淘宝优惠券网站衡水网站开发
  • 创建集团上海公司网站相城区公司网站建设
  • 包装材料网站建设建筑公司注册要求
  • 网站不能风格高新企业建设网站价格
  • 网站建设的利润率多少wordpress主题开发教材
  • 在线电影网站建设论文windows优化大师收费吗
  • 云南旅游网站开发公司oa管理系统是什么
  • 南开网站建设优化seo平面设计师服务平台
  • 贵阳手机网站开发福安城乡建设与规划局网站
  • 企业建设网站需要什么资料v2017网站开发
  • 现在网站都是拿什么软件做的怎么做各大视频网站的会员代理
  • seo整站优化外包服务wordpress写文章出现排版乱
  • 有什么网站做图片宣传海报网络规划设计师视频百度云
  • 苏州网站建设网站优化外包加工网官网下载
  • 住房和城乡建设部中国建造师网站建一个网页网站
  • 团支书登录智慧团建网站可以做go分析的网站
  • 牡丹江住房和城乡建设厅网站先做它个天猫网站
  • 惠州市建设局建工办网站申请商标官网
  • 网站建设 规范app软件开发费用多少
  • 罗湖商城网站设计公司wordpress内容分享微信
  • 个人网站建立策划书前言wordpress教程 pdf下载
  • 中企动力做网站一次性付款万网创始人张向东
  • 设计类招聘网站WordPress配置阿里云cdn
  • 做网站却不给客户源代码网站建设及维护费用
  • 建设银行招聘官方网站简单网页设计作业