- 14
- 0
- 约 8页
- 2016-12-16 发布于贵州
- 举报
优先级反转问题以及解决方式
优先级反转的问题是每一个实时操作系统所必须考虑到的问题,也是嵌入式软件面试所常提问的问题。下面会详细阐述优先级反转产生的根源,以及解决方式。
首先来谈谈优先级反转问题的出现的方式。下图演示优先级出现的问题。
假设有3个任务task1 优先级最高,task2优先级其次,task3优先级最低。假设task1 ,task2 分别阻塞在内核对象上比如queue等,然后轮到task3去运行,首先task3 获得了一个semaphore锁,然后运行了一段时间后,中断唤醒了task1,出中断的时候马上跑task1, 因为task1 的优先级高,然后task1也尝试去获得semaphore锁,但是task3 已经得到了这个锁,所以task1 只能睡眠,轮到task3 继续跑,这个时候中断唤醒了task2,出中断的时候轮到task2去跑,因为task2的优先级比task1要高。task2 运行完了然后给task3 跑,task3 跑完了才轮到task1去跑。
以上的现象就是一个完整的优先级反转的问题出现的现象,整个逻辑貌似都是完全没有任何问题的,唯一的问题就是task2跑完了再去跑task1,也就是说task2插了一脚。 task2 的优先级比起task1 要低的,这样的话task1 要同时承受task2 和task3 跑完才能继续跑。承受task3 跑
原创力文档

文档评论(0)