中国高校课件下载中心 》 教学资源 》 大学文库

《Linux操作系统原理与应用》课程教学课件(PPT讲稿)第七章 内核中的同步

文档信息
资源类别:文库
文档格式:PPT
文档页数:28
文件大小:570.5KB
团购合买:点击进入团购
内容简介
《Linux操作系统原理与应用》课程教学课件(PPT讲稿)第七章 内核中的同步
刷新页面文档预览

第七章内核中的同步临界区和竞争状态内核同步措施并发控制

第七章 内核中的同步 临界区和竞争状态 内核同步措施 并发控制

临界区和竞争状态·什么是临界区(critical regions)?一就是访问和操作共享数据的代码段,这段代码必须被原子地执行r·什么是竞争状态?一多个内核任务同时访问同一临界区·什么是同步?一避免并发和防止竞争状态称为同步(synchronization)

• 什么是临界区(critical regions)? –就是访问和操作共享数据的代码段,这段代 码必须被原子地执行 • 什么是竞争状态? – 多个内核任务同时访问同一临界区 • 什么是同步? –避免并发和防止竞争状态称为同步 (synchronization) 临界区和竞争状态

临界区举例,考虑一个非常简单的共享资源的例子:-个全局整型变量和一个简单的临界区,其中的操作仅仅是将整型变量的值增加1:1i++·该操作可以转化成下面三条机器指令序列:-(1)得到当前变量的值并拷贝到一个寄存器中一(2)将寄存器中的值加1一(3)把i的新值写回到内存中<>

• 考虑一个非常简单的共享资源的例子:一 个全局整型变量和一个简单的临界区,其 中的操作仅仅是将整型变量的值增加1: i++ • 该操作可以转化成下面三条机器指令序列: – (1) 得到当前变量i的值并拷贝到一个寄存器中 – (2)将寄存器中的值加1 – (3) 把i的新值写回到内存中 临界区举例

临界区举例可能的实际执行结果:内核任务1内核任务2r获得i(1)期望的结果获得 (1)增加 (1->2)内核任务1内核任务2获得i(1)增加 (1->2)增加(1->2)写回(2)写回(2)获得i(2)写回 (2)增加(2->3)写回(3)

内核任务1 内核任务2 获得i(1) - 增加 i(1->2) - 写回 i(2) - 获得 i(2) 增加 i(2->3) 写回 i(3) 临界区举例 内核任务1 内核任务2 获得 i(1) - - 获得 i(1) 增加 i(1->2) - - 增加 i(1->2) 写回 i(2) - - 写回 i(2) 可能的实际执行结果: 期望的结果

共享队列和加锁X当共享资源是一个复杂的数据结构时,竞争状态往往会使该数据结构遭到破坏。对于这种情况,锁机制可以避免竞争状态正如门锁和门一样,门后的房间可想象成一个临界区。r,在一个指定时间内,房间里只能有个一个内核任?务存在,当一个任务进入房间后,它会锁住身后的房门;当它结束对共享数据的操作后,就会走出房间,打开门锁。如果另一个任务在房门上锁时来了,那么它就必须等待房间内的任务出来并打开门锁后,才能进入房间。KM

❖ 当共享资源是一个复杂的数据结构时,竞争状 态往往会使该数据结构遭到破坏。 ❖ 对于这种情况,锁机制可以避免竞争状态正如门 锁和门一样,门后的房间可想象成一个临界区。 ❖ 在一个指定时间内,房间里只能有个一个内核任 务存在,当一个任务进入房间后,它会锁住身后 的房门;当它结束对共享数据的操作后,就会走 出房间,打开门锁。如果另一个任务在房门上锁 时来了,那么它就必须等待房间内的任务出来并打 开门锁后,才能进入房间。 共享队列和加锁

共享队列和加锁·任何要访问队列的代码首先都需要占住相应的锁,这样该锁就能阻止来自其它内核任务的并发访问:任务2r试图锁定队列任务1失败:等待...试图锁定队列等待...成功:获得锁等待...访问队列...成功:获得锁为队列解除锁访问队列..为队列解除锁

• 任何要访问队列的代码首先都需要占住相 应的锁,这样该锁就能阻止来自其它内核 任务的并发访问: 任务 1 试图锁定队列 成功:获得锁 访问队列. 为队列解除锁 . 任务2 试图锁定队列 失败:等待. 等待. 等待. 成功:获得锁 访问队列. 为队列解除锁 共享队列和加锁

确定保护对象找出哪些数据需要保护是关键所在X内核任务的局部数据仅仅被它本身访问,X显然不需要保护r如果数据只会被特定的进程访问,也不需加锁心大多数内核数据结构都需要加锁:若有其它内核任务可以访问这些数据,那么就给这些数据加上某种形式的锁;若任何其它东西能看到它,那么就要锁住它

❖ 找出哪些数据需要保护是关键所在 ❖ 内核任务的局部数据仅仅被它本身访问, 显然不需要保护 ❖ 如果数据只会被特定的进程访问,也不 需加锁 ❖ 大多数内核数据结构都需要加锁:若有 其它内核任务可以访问这些数据,那么 就给这些数据加上某种形式的锁;若任 何其它东西能看到它,那么就要锁住它 确定保护对象

死锁心死锁产生的条件:有一个或多个并发执行的内核任务和一个或多个资源,每个任务都在等待其中的一个资源,但所有的资源都已经被占用。所有任务都在相互等待,但它们永r远不会释放已经占有的资源,于是任何任务都无法继续典型的死锁:心四路交通堵塞*自死锁:一个执行任务试图去获得一个自已已经持有的锁<>

❖ 死锁产生的条件:有一个或多个并发执行的 内核任务和一个或多个资源,每个任务都在 等待其中的一个资源,但所有的资源都已经 被占用。所有任务都在相互等待,但它们永 远不会释放已经占有的资源,于是任何任务 都无法继续 ❖ 典型的死锁: ❖ 四路交通堵塞 ❖ 自死锁:一个执行任务试图去获得一个自 己已经持有的锁 死 锁

死锁的避免心加锁的顺序是关键。使用嵌套的锁时必须保证以相同的顺序获取锁,这样可以阻止致命拥抱类型的死锁rX防止发生饥饿不要重复请求同一个锁。X越复杂的加锁方案越有可能造成死锁X因此设计应力求简单KM

❖ 加锁的顺序是关键。使用嵌套的锁 时必须保证以相同的顺序获取锁,这 样可以阻止致命拥抱类型的死锁 ❖ 防止发生饥饿 ❖ 不要重复请求同一个锁。 ❖ 越复杂的加锁方案越有可能造成死锁, 因此设计应力求简单 死锁的避免

并发执行的原因中断二中断几乎可以在任何时刻异步发生,也可能随时打断正在执行的代码。心内核抢占一一若内核具有抢占性,内核r中的任务就可能会被另一任务抢占心睡眠及与用户空间的同步一一在内核执行的进程可能会睡眠,这将唤醒调度程序,导致调度一个新的用户进程执行心对称多处理一一两个或多个处理器可以同时执行代码

❖ 中断——中断几乎可以在任何时刻异步 发生,也可能随时打断正在执行的代码。 ❖ 内核抢占——若内核具有抢占性,内核 中的任务就可能会被另一任务抢占 ❖ 睡眠及与用户空间的同步——在内核执 行的进程可能会睡眠,这将唤醒调度程 序,导致调度一个新的用户进程执行 ❖ 对称多处理——两个或多个处理器可以 同时执行代码 并发执行的原因

共28页,试读已结束,阅读完整版请下载
刷新页面下载完整文档
VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
相关文档