Linux原理与结构 作者 郭玉东 全书 第10章.pptVIP

Linux原理与结构 作者 郭玉东 全书 第10章.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
  利用锁、信号量、RCU等可以协调进程的动作,实现进程间的互斥与同步,但所传递的信息量极少,难以用于进程间通信。为了使相互协作的进程能够更好地工作,除了互斥与同步之外,还需要提供一些进程间的通信机制,如通知机制、信息传递机制、信息共享机制等。   早期的Unix仅提供了两种进程间通信机制,分别是用于通知的信号和用于传递数据的管道。1983年,ATT在Unix System V中引入了三种新的进程间通信机制,分别是信息队列、共享内存和信号量集合。在随后的发展中,System V的三种通信机制被吸收进POSIX标准,但两者使用了完全不同的API,因而具有完全不同的实现方式。   Linux继承了Unix的传统,提供了多种进程间的通信机制,如用于通知的信号,用于交换信息的管道和消息队列,用于共享信息的共享内存等。在所有的通信手段中,信号是最基本的,管道与消息队列是最直观的,共享内存是最快速的。当然,通过网络协议既可实现不同计算机间的进程通信,也可实现同一计算机内部的进程通信。事实上,网络协议是一种最复杂的进程间通信机制。      信号(Signal)是用于通知事件的一种机制。当内核有事情需要通知进程时,它可以发送信号。当一个进程有事情需要通知另一个进程时,它也可以发送信号。信号还是一种原始的进程间同步机制,一个进程可以暂停工作等待被其它进程的信号唤醒。与其它通信机制不同,信号是Linux必备的一种通信机制,是Linux内核不可分割的一部分。   最早的信号机制是由Unix System V引入的。BSD 4.2解决了信号中的许多问题,BSD 4.3又对其做了进一步的加强和改善。POSIX.1定义了一个标准的信号接口,POSIX.4又对其进行了扩充。目前几乎所有的Unix变种,包括Linux,都提供了和POSIX标准兼容的信号机制。 10.1.1 信号定义   信号的格式和意义都是预先约定好的,一个信号表示一种类型的事件。能产生信号的实体称为信号源,主要的信号源是内核和进程。内核通过信号将系统内发生的事件通知进程,如进程执行了非法操作、进程使用的资源超限、用户输入了Ctrl-C、进程启动的定时器已到期等。一个进程也可以向另一个或一组进程发送信号,用来通知事件、控制作业等,如通过向一个进程发送SIGKILL信号来将其杀死等。   Unix通常用一个无符号长整数作为位图来表示信号,其中的一位对应一种信号。 Linux用一个整数数组作为位图来表示信号,数量可以更多。缺省情况下,Linux支持的信号有64个,其中1到31为普通信号,32到63为实时信号,第0个信号保留未用。普通信号的意义是固定的,实时信号的意义由用户自定义,且可传递附加信息。表10.1是Linux的普通信号。   表10.1 普通信号及其意义 Linux系统中的每个进程都可能收到信号,而且可以用不同的方式处理信号。进程对信号的处理方式有下列几种:   (1) 阻塞。将到来的信号记录下来但不处理,直到阻塞被解除。   (2) 忽略(SIG_IGN)。不接收或不处理信号,直接将其丢弃。   (3) 缺省(SIG_DFL)。由内核按缺省方式处理信号。   (4) 自定义。由进程自己注册的用户态信号处理程序处理信号。   Linux内核提供了五种缺省的信号处理方式,分别是:   (1) 夭折(abort)。把进程虚拟地址空间中的内容存入文件core后终止进程。   (2) 终止(exit)。直接终止进程,不生成core文件。   (3) 忽略(ignore)。忽略或丢弃收到的信号。   (4) 停止(stop)。让进程停止运行。   (5) 继续(continue)。如果进程已被停止,则让其恢复运行;否则忽略信号。   信号必须由接收者进程自己处理,处理方法由接收者进程自己决定。如果信号的接收者当前未在运行态,那么它对信号的处理就不会很及时。   另外,信号没有优先级,信号处理的先后顺序完全取决于系统的设计。信号可能被接收者忽略或阻塞,因而接收者可能感觉不到某些信号的到来,也就是说信号可能会丢失。   10.1.2 信号管理结构   在早期的版本中,Linux用定义在task_struct结构中的位图signal记录进程已收到且未处理的信号,用位图blocked记录进程当前要阻塞的信号,用sigqueue结构队列记录信号的附加信息。当位图signal(~blocked)不空时,说明进程收到了未被阻塞的信号,应该在适当的时机执行一下这些信号的处理程序。进程预定的信号处理程序记录在它的signal_struct结构中,其主要内容是一个数组,每一种信号对应其中的一项,用于记录进程预定的信号处理程序及处理信号时的特殊要求。   老的信号管理结构十分直观,但未照顾到线程组

您可能关注的文档

文档评论(0)

开心农场 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档