- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第8章 内核同步介绍 Topics 竞争条件 临界区 内核并发性 需要保护什么? 原子操作 自旋锁 信号量 死锁 竞争条件示例 进程A 读in, stores in local var slot. 定时中断发生. 调度器切换到进程B. 进程B reads in, stores in local var slot. 进程B stores filename in slot 7 (slot). 进程B updates in to be 8. 调度器 eventually switches to 进程A. 进程A writes filename in slot 7 (slot). 进程A computes in = slot + 1. 进程A updates in to be 8. 竞争条件示例 临界区 如何防止竞争条件? 禁止多个进程同时访问共享资源。 临界区: 访问共享资源的代码。 临界区 没有两个进程同时处于临界区. 不应对CPU的速度和数量作任何假设. 临界区之外的进程不能阻塞其他进程进入临界区. 不应该有进程永远等待进入临界区. 临界区 为什么需要原子性? 进程A 读i(7) i+1 (7 - 8) - 写i(8) 进程B 读i(7) - i+1 (7 - 8) - 写i(8) 原子操作 进程A atomic_inc i (7-8) 进程B - atomic_inc i (8-9) Atomicity doesn’t provide Ordering 进程A atomic_inc i (7-8) 进程B - atomic_inc i (8-9) 锁 What if operation too complex to be atomic? CPU can’t have a dedicated instruction for every operation that might need to be atomic. Ex: adding a node to a doubly-linked list. Locking 需要线程在访问对象前先加锁. 其他线程必须等待对象解锁. Locking is simple enough to be atomic. Ex: Acquire lock before modifying linked list. Locking Example with 5 Processes 死锁 进程A down(A) down(B) 进程B down(B) down(A) 死锁防止 锁的顺序 If you acquire multiple locks, you must always acquire them in the same order. Don’t double acquire a lock. Always use interrupt-disabling variants of spin_lock() in interrupt context. Always release locks. Be sure that your code will always make appropriate calls to release locks. 并发的源 中断 Softirqs和tasklets 内核抢占 睡眠 SMP 内核抢占 进程在执行内核函数时,可被抢占 进程A正在运行异常处理程序时,如果更高优先级的进程B就绪,则会被抢占。 进程A正在运行异常处理程序时,其时间片到期 ,调度器会调度另一个 进程运行。 抢占 disabled when preempt_count 0: 中断处理程序 SoftIRQs和tasklets. Code that explicitly sets preempt_count. 什么需要保护? 什么需要保护? 全局的内核数据结构. 进程和中断上下文共享的数据. 中断处理程序之间共享的数据. 什么不需要保护? 正在执行线程的局部数据(即:栈) 局部变量. Dynamically allocated data w/ only local ptrs. Per-CPU data doesn’t need SMP protection. 什么地方需要同步? An 中断处理程序 cannot be interrupted by the same interrupt that it handles. Kernel control path performing interrupt handling cannot be interrupted by a bottom half or system call service routine. S
您可能关注的文档
最近下载
- 蒸压加气混凝土砌块施工技术课件.ppt VIP
- 沥青路面再生利用项目可行性研究报告项目建议书.docx
- 医学课件-老年卧床患者压力性损伤的预防和护理进展.pptx
- 电力系统经济学原理习题解答 全.doc VIP
- 数据中心机房工程施工组织设计方案.pptx VIP
- 传统文化与修身(鲁东大学)知到智慧树章节答案.docx VIP
- 湖南文艺出版社(2024)新教材小学二年级音乐上册第五课《草原就是我的家》精品课件.pptx VIP
- 益智课堂数字华容道教学课件.pptx VIP
- (2025秋新版)部编版二年级道德与法治上册《第8课 我为班级作贡献》教案.docx VIP
- 尼科尔森《微观经济理论-基本原理与扩展》(第9版)课后习题详解(第18章--不确定性和风险厌恶).doc VIP
文档评论(0)