- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
LINUX内核信号量设计与实现
Generated by Foxit PDF Creator © Foxit Software
For evaluation only.
LINUX 内核信号量设计与实现
taoistf just for fun
taoistf@ 2008/08/18
一 LINUX 内核信号量简介
为了同步对内核共享资源的访问,内核提供了down 函数和up 函数用于获取和释放
资源。down 和up 所保护的访问资源的内核代码区域,就构成一个临界区。在等待
获取资源进入临界区的过程中,代表进程运行的内核控制路径可以睡眠。
我们从 LINUX 内核信号量最直观的设计/实现出发,通过一步步改进,揭示在x86
平台上完整的信号量设计/实现,然后探讨在不同平台上通用的信号量设计/实现。
二 LINUX 内核信号量的初步设计与实现
1 数据结构
我们首先分析信号量semphore 应具备的数据结构。它需要一个计数count,表示能
进入临界区的进程个数。conut 一般初始化为1,表示信号量是互斥信号量,一次只
允许一个进程进入临界区。它也能被初始化为其他正值,表示可有多个进程同时进
入临界区。
当进程不能进入临界区时,它必须在信号量上睡眠,因此需要一个表示“等待队列头”
的字段wait 。在SMP 中,等待队列需要自旋锁来保护,因此wait 结构中应含有自
旋锁lock ,和指向等待队列链表的指针task_list 。而插入等待队列的“等待元素” ,其
字段中应含有指向进程结构的指针task ,及能够链入等待队列的指针task_list 。
Generated by Foxit PDF Creator © Foxit Software
For evaluation only.
具体表示如下:
struct wait_queue_t{
struct task_struct * task;
struct list_head task_list;
}; /* 等待元素结构 */
struct wait_queue_head_t{
spinlock_t lock;
struct list_head task_list;
}; /* 等待队列头结构 */
struct semphore{
int count;
wait_queue_head_t wait;
} /* 信号量结构 */
2 算法
当进程需要获取信号量时,它调用down 函数进入临界区。down将semphore的count
字段减1,若count非负,则可进入临界区;否则,加入睡眠队列。当进程离开临界
区时,它调用up 函数。up将semphore 的count字段加1,若count非正,表示有进程睡
眠,则将进程从wait等待队列中移走并唤醒它。
这里有一个问题:当up 唤醒等待队列中睡眠进程时,是唤醒所有等待进程,还是只
唤醒一个?如果唤醒所有进程,它们醒来后,就会去竞争一个获得信号量的机会,
竞争失败的进程只能再度睡眠,这就使得系统有许多无谓的schedule切换,降低了系
统性能。所以,up 只唤醒一个进程。为了保持FIFO 的唤醒顺序,down会将新进程以
独占方式(表示唤醒时只唤醒一个)加在等待队列尾部,up则去唤醒等待队列头部
的第一个独占进程。
3 实现
由于信号量的实现效率与系统性能息息相关,为了达到高效的信号量实现,不同的
cpu系统根据各自特点,提供了不同版本。我们以x86平台为例,介绍信号量的实现
与优化。
我们要注意一点:由于x86 平台对原子指令有很好的支持,而并发的多个进程可能
Generated by Foxit PDF Creator © Foxit Software
For evaluation only.
会同时修改或读取count 值,所以对cou
您可能关注的文档
- InternetExplorer已停止工作的解决方法.doc
- InternetExplorer选项被禁用解决方法.doc
- InternetAS层网络的演化分析.pdf
- Internet与Intranet应用练习题(形成性考核册).doc
- Internet及其应用技术模拟试题二.doc
- Internet同步练习题.doc
- Internet的发展历史中英文.doc
- Intrinsic Decoherence Dynamics in Smooth Hamiltonian Systems Quantumclassical Corresponden.pdf
- Introduce to finance(复习资料).docx
- Intranet内部基于数据库的动态信息技术.pdf
最近下载
- 2020译林版高中英语新教材选择性必修四第二单元Reading课件.pptx VIP
- 劳务费追加协议.docx VIP
- 河南省郑州2025届高三下学期3月调研考试(八)英语试卷含答案.pdf VIP
- 空调维修保养服务投标方案.docx VIP
- SL∕T 820-2023 水利水电工程生态流量计算与泄放设计规范.pdf
- 中心城区规划建设用地 地质灾害危险性评估报告书 (一级评估).pdf VIP
- 医疗机构管理条例试题及答案.docx VIP
- 健康体检重要异常结果管理专家共识(试行版).docx VIP
- 三碁(SAVCH)S1100系列变频器Vf通用型用户手册V2.5.pdf
- RBA内部审核和管理评审.docx VIP
文档评论(0)