- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第六章 LIUNX信号量、中断和时间
第6 章 信号量,中断和时间.doc
第6 章 信号量,中断和时间
信号量(Signal )是进程间通讯(IPC )的一种形式——是一个进程给另一个进程发送
信息的方法。但是信息不可能很多——一个信号量不可能携带详细的信息,即使是传送者的
身份也不能被传递;唯一能够确定的事实是信号量的确被发送了。(然而和经典信号量不同,
POSIX 实时信号量允许传送稍微多一点的信息。)实际上,信号量对于双向通讯是没有用处
的。还有,根据某些限定,信号量的接受者不必以任何方式作出响应,甚至可以直接忽略大
部分信号量。
虽然有这么多的限制,然而信号量仍然是一种功能强大的十分有用的机制——勿庸置
疑,这是Unix IPC 中使用最频繁的机制。每当进程退出或者废弃一个空指针时,每当使用
Ctrl+C 键终止程序运行时,都要传递信号量。
第9 章会更详细的讨论IPC 机制。对于本章的讨论来说,信号量的内容就足够讨论了。
正如在Linux 内核本身的代码注释中所说明的一样,中断 (Interrupt )对于内核来说和
信号量是类似的。中断一般都是从磁盘之类的硬件设备送往内核,用以提示内核该设备需要
加以注意。一个重要的硬件中断源就是定时器设备,它周期性地通知内核已经通过的时间。
如同第5 章中阐述的一样,中断也可以由用户进程通过软件产生。
在本章中,我们首先讨论一下Linux 中信号量和中断的实现,最后再浏览一下Linux 的
时间处理方式。
虽然内核对代码的要求标准非常严格,本章所涉及的代码仍然特别清晰明白。本章使用
的一般方法是首先介绍相关的数据结构和它们之间的关系,接下来讨论操纵和查询它们的函
数。
锁的概述
锁的基本思想是限制对共享资源的访问——共享资源包括共享的文件,共享的内存片,
以及在一次只能由一个CPU 执行的代码段。概括的说,在单处理器上运行的Linux 内核并
不需要锁,这是因为在编写 Linux 内核时就已经注意到要尽量避免各种可能需要锁的情况
了。但是,在多处理器机器上,一个处理器有时需要防止其它处理器对它的有害的介入。
include/asm-i386/spinlock.h 文件(从 12582 行开始)并不使用难看的#ifdef 把所有对锁
函数的调用封装起来,它包含一系列对单处理器平台(UP )基本为空的宏,然而在多处理
器平台 (SMP )上这些宏将展开成为实际代码。因而内核的其它代码对UP 和SMP (当涉及
到这种特性时)都是相同的,但是它们两个的效果却是迥然不同的。
第10 章中涉及SMP 的部分会对锁做深入的介绍。但是,由于你在代码中将到处都能够
看到对锁宏的调用,特别是在本章所讨论到的代码中这一点尤为明显,所以你应该首先对宏
的用途有初步了解——以及为什么现在在大多数情况下我们都可以安全地将其忽略(我们将
在讨论的过程中对其中的异常情况进行说明)。
信号量
Linux 内核将信号量分为两类:
非实时的(Nonrealtime )——大部分是些传统的信号量,例如SIGSEGV ,SIGHUP
- 52 -
第6 章 信号量,中断和时间.doc
和SIGKILL 。
实时的 (realtime )——由POSIX 1003.1b 标准规定,它们同非实时信号量有细微
的区别。特别是实时信号量具有进程可以配置的意义——就像是非实时信号量
SIGUSR1 和 SIGUSR2 一样——额外的信息能够和这些信号量一起传送。它们也
会排队,因此如果在第一个信号量处理完成之前有多个信号量实例到达,所有的信
号量都能够被正确传送;这对于非实时信号量则是不可能的。
在第7 章中我们将会对实时性对于Linux 内核的意义进行更详细的介绍——特别是实时
性所不能够说明的内容。
信号量数目的宏定义从12048 行开始。实时信号量的数目在SIGRTMIN 和SIGRTMAX
(分别在12087 行和12088 行)所定义的范围之内。
数据结构
本节讨论信号量代码使用的最重要的数据结构。
sigset_t
12035:sigset_t 表示信号量的集合。根据使用地点的不同,它的意思也不同——
您可能关注的文档
- 土壤水分-英文资料-2005-2013年Effects of in Temperate Soils before and after Water Stress.pdf
- Tm_Ho_BaY_2F_8纳米晶制备和性能表征_于浩.pdf
- 土霉素在黑鲷体内的药物代谢动力学研究.pdf
- ThinkPad 自定义开机画面(BIOS Logo) 方法和注意事项.pdf
- TRUNK和VTP原理和配置.ppt
- 基于J2EE的MVC设计模式的分析与思考.pdf
- 基于EMD与谱峭度的滚动轴承故障检测改进包络谱分析_蔡艳平.pdf
- TPP和日本农业.ppt
- 基于MapX的公路路面管理信息系统设计与关键技术.pdf
- Unit 5 Do you want to watch a game show 阅读提升和周周清.ppt
文档评论(0)