高级操作系统——第九周【同步机制】

互斥问题

软件解法

Dekker算法

硬件解决方法:

中断屏蔽方法

利用开关中断
1:关中断方法不适用于多CPU系统,因为关中断只能保证CPU不由一个进程切换到另外一个进程,从而防止多个进程并发地进入公共临界区域。但即使关中断后,不同进程仍可以在不同CPU上并行执行关于同一组共享变量的临界区代码.
2:只适用于内核级:因为开关中断命令只能由内核调用,给用户会出问题
3:临界区尽可能小

TestAndSet

自旋锁

忙等待:
自旋锁:
Spin lock (多处理器适用):即会一直询问资源有没有被释放。
适用于保持锁时间比较短
自旋锁的效率远高于互斥锁。
信 量和读写信 量适合于保持时间较长的情况,它们会导致调用者睡眠,因此只能在进程上下文使用,而自旋锁适合于保持时间非常短的情况,它可以在任何上下文使用。

互斥锁

可能导致优先级反转(倒置 提升低优先级的进程)
任务3正在执行,并申请到了资源S;
任务1抢占了任务3的执行,任务3挂起,任务1执行;
任务1申请资源S,发现被占用,所以挂起,任务3恢复执行;
任务2抢占了任务3的执行,任务3挂起,任务2执行;
任务2执行完毕,任务3恢复;
任务3释放资源S,任务1抢占资源S,任务1执行,任务3挂起;
任务1执行完毕,任务3执行。
以上可以看出,任务2虽然比任务1优先级低,但是比任务1优先执行。也就是说任务1的优先级被降低到了任务3的级别。
后果:导致高优先级的任务1总是得不到执行,因为任务3老是被抢占
解决方法:
优先级天花板。当任务3使用资源S时,就把任务3的优先级提升到能访问资源S的最高优先级,执行完成释放资源之后,把优先级再改回来
优先级继承。当任务3使用资源S时,任务1抢占执行权,申请资源S,比较资源1和资源3的优先级,假如任务1优先级高,才提升任务3,提升到和任务1相同的优先级,当任务3释放资源后,将优先级再调整回来。

信 量和PV操作

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年10月10日
下一篇 2019年10月10日

相关推荐