首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

于抢占有关问题,大家来解答下,多谢了

2012-03-26 
于抢占问题,大家来解答下,谢谢了!我是这样理解的:抢占都是通过中断实现的,中断中可能会唤醒其它高优先级任

于抢占问题,大家来解答下,谢谢了!
我是这样理解的:
抢占都是通过中断实现的,中断中可能会唤醒其它高优先级任务,而且也只在中断返回时,才会去找有没有其它更高优先级任务,从而执行高优先任务,实现抢占。

不知道理解的对不?我理解的抢占只发生在从中断handler返回时。

[解决办法]
不一定是中断,也可能是互斥等资源释放时发生
[解决办法]
这个与系统的进程调度有关
每个任务的执行都好象是在线程里执行一样,不可分割的.
当前的队列中有:a b
低 中
当前正在执行a
如果突然来了个高优先级的c
那系统就会将c放在a和b之间.因为a正在执行,系统不会打断其执行
只能向队列中添加

我的理解,不够深刻,仅供参考
[解决办法]
对,时间片没考虑
如果这样考虑的话,应该是这样
相当于循环
while (1)
{
如果在队列中有比自己优先级高的,自动调度
}

[解决办法]
这个取决于不同的调度策略,系统在每一个时间片到达时刻进行一次调度。当时间片到达时会发生中断,这样就可以在中断到来时进行调度。

调度中一个比较常见的情况是优先级反转,指的是如果一个低优先级的线程拥有了一个高优先级所需要的资源,则为了使得高优先级能够执行,需要临时让低优先级的线程的优先级暂时提高到需要该资源的线程同样的优先级。

实时操作系统和非实时操作系统的调度策略差别比较大,时间片的大小差别也比较大。


[解决办法]
如果某一任务占CPU时间超过一个时间片,任务调度在中断中完成。但当某一任务的执行不需要继续占用CPU时(等待资源或挂起或自杀或它想让别的任务执行等,总之从它想从运行态转到其他态),均会调用任务调度函数。建议楼主下个uc os源码分析一下,3K的代码。

热点排行