抢占式和非抢占式的

时间:2023-01-26 20:14:11
关于抢占式的和非抢占式系统有几个问题
非抢占式是不是就是指在一个进程自己终止之前不能去抢占而去调度其他进程(不管它是在内核态还是在用户态)
而抢占式的可以在用户态抢占一个进程(但在内核态仍不可以,bach的unix操作系统设计提到,运行在内核态的进程不能被抢占)

可看网上又有抢占式内核和非抢占式的内核的说法
非抢占式内核就是指运行在内核态的进程不能被抢占。
抢占式内核可以把运行在内核态的进程抢占了。
请问这两种分法对吗?

25 个解决方案

#1


非抢占式就是一个进程从头运行到尾,不能被调度出去。

#2


不是这样的
引用 1 楼 FoxOnWeb 的回复:
非抢占式就是一个进程从头运行到尾,不能被调度出去。 

#3


抢占式的内核是指只要在CPU时钟产生中断的时候,就有权进行任务切换,无论当前任务执行到何种状态;非抢

占式的内核的切换依赖的是任务内部的消息处理和调度函数,在这个任务没有结束之前,不会执行其它的任务。

PS:现在讨论的是内核,全都是处于核心态的,你将内核的任务和OS里面的用户进程搞混了吧...

#4


你的理解是错误的,
抢占式的内核就是当一个进程在运行,另一个更高优先级的进程就绪了,那么要立刻中止当前进程转而去执行那个更高优先级的进程.
而非抢占式的内核就是所有进程的优先级一样,只有这个进程运行完了,或所分到的时间片用完了,又或是一个调度时钟周期到了才会交出系统运行权.

不论是抢占式还是非抢占式在一个CPU定时时钟产生后就有权进行任务切换.

引用 3 楼 fetag 的回复:
抢占式的内核是指只要在CPU时钟产生中断的时候,就有权进行任务切换,无论当前任务执行到何种状态;非抢 

占式的内核的切换依赖的是任务内部的消息处理和调度函数,在这个任务没有结束之前,不会执行其它的任务。 

PS:现在讨论的是内核,全都是处于核心态的,你将内核的任务和OS里面的用户进程搞混了吧...

#5


引用 3 楼 fetag 的回复:
抢占式的内核是指只要在CPU时钟产生中断的时候,就有权进行任务切换,无论当前任务执行到何种状态;非抢 

占式的内核的切换依赖的是任务内部的消息处理和调度函数,在这个任务没有结束之前,不会执行其它的任务。 

PS:现在讨论的是内核,全都是处于核心态的,你将内核的任务和OS里面的用户进程搞混了吧...

也许是我搞混了吧,那关于抢占式和非抢占式之说是针对内核的吧
也就是处于核心态,非抢占式不能抢占cpu,而抢占式可以抢占。

#6


不知你这几句话从哪里看到的,抢占与否都是发生在内核态,用户态怎么可能发生抢占呢? 该哪个进程运行了完全由内核来决定, 如果用户态也可以抢占,那不是会完全乱套了?

引用楼主 zhqyzhqychn 的帖子:
关于抢占式的和非抢占式系统有几个问题 
非抢占式是不是就是指在一个进程自己终止之前不能去抢占而去调度其他进程(不管它是在内核态还是在用户态) 
而抢占式的可以在用户态抢占一个进程(但在内核态仍不可以,bach的unix操作系统设计提到,运行在内核态的进程不能被抢占) 

可看网上又有抢占式内核和非抢占式的内核的说法 
非抢占式内核就是指运行在内核态的进程不能被抢占。 
抢占式内核可以把运行在内核态的进程抢占了…

#7


是我理解错了,刚又把操作系统课本翻出来看了一下,抢占式和非抢占式的区别在于抢占式一个进程能够将处理机资源强行德从正在运行的进程那里抢占过来。献丑了,基础知识不劳啊,呵呵呵,顺便把课本的知识贴过来:

1)非抢占式进程如果被选中,一直运行下去,直到出现如下两个情形
1,该进程因某种事件而等待
2,该进程运行完毕

2)而抢占式:
前两条一样,多了一条:出现了新的就绪程序,该进程的优先级高于正在运行进程的优先级。

ps:好像和楼上说的还有点区别,看了看笔记,时间片轮转法应该属于抢占式的,非抢占式的没有时间片这一说吧,不知道这次理解还有错误吗

#8


mark

#9


引用 4 楼 guosha 的回复:
你的理解是错误的, 
抢占式的内核就是当一个进程在运行,另一个更高优先级的进程就绪了,那么要立刻中止当前进程转而去执行那个更高优先级的进程. 
而非抢占式的内核就是所有进程的优先级一样,只有这个进程运行完了,或所分到的时间片用完了,又或是一个调度时钟周期到了才会交出系统运行权. 

不论是抢占式还是非抢占式在一个CPU定时时钟产生后就有权进行任务切换. 

引用 3 楼 fetag 的回复:
抢占式的内核是指只要在CPU时钟…

呵呵,兄弟,回去看看书吧,查一个词,叫“优先级反转”,看看是什么意思...

#10


优先级反转? 我也想听听你怎么说呢. 

#11


这里应该是你的说法是对的啦,时间片轮转也应该算是一种可抢占
引用 7 楼 zhqyzhqychn 的回复:
是我理解错了,刚又把操作系统课本翻出来看了一下,抢占式和非抢占式的区别在于抢占式一个进程能够将处理机资源强行德从正在运行的进程那里抢占过来。献丑了,基础知识不劳啊,呵呵呵,顺便把课本的知识贴过来: 

1)非抢占式进程如果被选中,一直运行下去,直到出现如下两个情形 
1,该进程因某种事件而等待 
2,该进程运行完毕 

2)而抢占式: 
前两条一样,多了一条:出现了新的就绪程序,该进程的优先级高于正在运行…

#12


引用 9 楼 fetag 的回复:
呵呵,兄弟,回去看看书吧,查一个词,叫“优先级反转”,看看是什么意思...


非常想听听你对于优先级反转的论述, 因为我觉得我上面的回答根本没有涉及到任何的优先级反转的问题.
对优先级反转,很多内核都不处理,靠的是系统设计人员不要乱给任务分配优先级. 

#13


引用 4 楼 guosha 的回复:
抢占式的内核就是当一个进程在运行,另一个更高优先级的进程就绪了,那么要立刻中止当前进程转而去执行那个
更高优先级的进程.

假如现在有PID为2,3,4三个进程,优先级从高到低。
1、 首先,4进程处于就绪状态,然后2进程也处于就绪状态,这时OS会调度2首先执行
2、 而2进程需要的资源此时正在被4占有,所以2进程会被阻塞
3、 此时3进程处于就绪状态了,OS调度3进程执行
4、 3进程执行完毕以后,2进程需要的资源仍然被4进程占有,2进程依然阻塞
5、 于是4进程被调度执行,然后4进程释放资源
6、 2进程得到资源,被调度执行
7、 2进程退出后,4进程继续执行完毕

三个进程的执行完毕顺序为 3,2,4,这就是优先级反转了。我举这个的意思是想说:并不是像你理解的那样,
高优先级的就绪了,就能立刻终止当前进程转去执行它,这也不是判断内核是否是抢占式内核的依据。

引用
这里应该是你的说法是对的啦,时间片轮转也应该算是一种可抢占 

这里你说的有点片面:采用时间片轮转调度绝大多数是可抢占内核,但是也有非抢占内核,也采用这种调度算法

引用
对优先级反转,很多内核都不处理,靠的是系统设计人员不要乱给任务分配优先级. 

请问你这句话是在哪里看到的?还是你自己想出来的?
能否给我举出来一个不处理优先级反转的内核啊?无论是PC的,还是嵌入式系统的都行...

PS:俺不想和任何人斗气吵架,来这里是为了互相学习的,有问题可以提出来大家互相讨论,就是因为不会才学

的,对吧?如果大家每个人都能一个月之内做出一个成型可用的内核,那恐怕也没人会来这里讨论了吧。言语之

中如果有冲撞的地方,先说声抱歉!请谅解! O(∩_∩)O~

#14


引用 13 楼 fetag 的回复:
引用 4 楼 guosha 的回复:
抢占式的内核就是当一个进程在运行,另一个更高优先级的进程就绪了,那么要立刻中止当前进程转而去执行那个 
更高优先级的进程. 
 
假如现在有PID为2,3,4三个进程,优先级从高到低。 
1、 首先,4进程处于就绪状态,然后2进程也处于就绪状态,这时OS会调度2首先执行 
2、 而2进程需要的资源此时正在被4占有,所以2进程会被阻塞 
3、 此时3进程处于就绪状态了,OS调度3进程执行 
4、 3进程执行完毕以后,2进程需要的资源仍然被4进程占有,2进程依然阻塞 
5、 于是4进程被调度执行,然后4进程释放资源 
6、 2进程得到资源,被调度执行 
7、 2进程退出后,4进程继续执行完毕 

三个进程的执行完毕顺序为 3,2,4,这就是优先级反转了。我举这个的意思是想说:并不是像你理解的那样, 
高优先级的就绪了,就能立刻终止当前进程转去执行它,这也不是判断内核是否是抢占式内核的依据。 


你这叫咬文嚼字,你这里是把互斥跟内核是否是可抢占混为一谈,这是在偷换概念.
下面我也评一下你的论述,
最开始已经运行了2,然后,2发现所需资源A被别人占用,这是它自己主动进入内核态,内核把自己挂起.OK,此后2一直都外于挂起状态,直到资源A被释放.

下面是你文中我的定义" 高优先级的就绪了,就能立刻终止当前进程转去执行它", 你说的这个反转问题,2一直都处于挂起状态,一个处于挂起状态的进程根本就不会被调度的,如何去抢占?

#15


引用 13 楼 fetag 的回复:
引用
这里应该是你的说法是对的啦,时间片轮转也应该算是一种可抢占 
 
这里你说的有点片面:采用时间片轮转调度绝大多数是可抢占内核,但是也有非抢占内核,也采用这种调度算法 

进程2在运行,后来运行时间片到,其时它还没有运行玩的话,也要转去运行其它的进程,这不是被抢占是什么?

#16


引用 13 楼 fetag 的回复:
引用
对优先级反转,很多内核都不处理,靠的是系统设计人员不要乱给任务分配优先级. 
 
请问你这句话是在哪里看到的?还是你自己想出来的? 
能否给我举出来一个不处理优先级反转的内核啊?无论是PC的,还是嵌入式系统的都行... 

PS:俺不想和任何人斗气吵架,来这里是为了互相学习的,有问题可以提出来大家互相讨论,就是因为不会才学 

的,对吧?如果大家每个人都能一个月之内做出一个成型可用的内核,那恐怕也没人会来这里讨论了吧。言语之 

中如果有冲撞的地方,先说声抱歉!请谅解! O(∩_∩)O~


优先级反转的问题是怎么产生的?
内核解决优先级反转的通用方法是优先级继承,也就是你上面的,4占用了2的资源,那么4的优先级同时要提高到2的优先级.
这样就不会出现2,3之前的反转. 这里高级的商业嵌入式系统也许可以,低级的嵌入式系统确实没有这个功能.

就算是内核能处理优先级反转,有经验的开发人员会尽量避免可能出现优先级反转的设计来.也就是避免高低两个优先级的任务去竞争同一个资源的同时,还有另一个中间优先级的任务.

#17


我一直就就事论事,可这话不仅是讨论的意味了.
引用 9 楼 fetag 的回复:
呵呵,兄弟,回去看看书吧,查一个词,叫“优先级反转”,看看是什么意思...

#18


你这里把是否可抢占仅定义为CPU时钟中断处理进的任务调度明显是不对的,任何一个发送信号量,发送邮件,发送消息等的动作都可能导致新的高优先级任务就绪,都会伴随任务调度导致的任务切换动作.
引用 3 楼 fetag 的回复:
抢占式的内核是指只要在CPU时钟产生中断的时候,就有权进行任务切换,无论当前任务执行到何种状态;非抢 

占式的内核的切换依赖的是任务内部的消息处理和调度函数,在这个任务没有结束之前,不会执行其它的任务。 

PS:现在讨论的是内核,全都是处于核心态的,你将内核的任务和OS里面的用户进程搞混了吧...

#19


uC/OS-II算是高级的嵌入式系统吗?核心代码大概五千行,且源码开放(GUI版本商业付费),它就完全支持优先

级反转问题的解决方案...

另外对你17楼的回复,我已经承认错误了,道歉声明贴在13楼结尾处,呵呵

#20


都是高手

#21


mark

#22


嵌入式操作系统的种类
  
  一般情况下,嵌入式操作系统可以分为两类,一类是面向控制、通信等领域的实时操作系统,如 windriver公司的vxworks、isi的psos、qnx系统软件公司的qnx、ati的nucleus等;另一类是面向消费电子产品的非实时操作系统,这类产品包括个人数字助理(pda)、移动电话、机顶盒、电子书、webphone等。
  
  a. 非实时操作系统
  
  早期的嵌入式系统中没有操作系统的概念,程序员编写嵌入式程序通常直接面对裸机及裸设备。在这种情况下,通常把嵌入式程序分成两部分,即前台程序和后台程序。前台程序通过中段来处理事件,其结构一般为无限循环;后台程序则掌管整个嵌入式系统软、硬件资源的分配、管理以及任务的调度,是一个系统管理调度程序。这就是通常所说的前后台系统。一般情况下,后台程序也叫任务级程序,前台程序也叫事件处理级程序。在程序运行时,后台程序检查每个任务是否具备运行条件,通过一定的调度算法来完成相应的操作。对于实时性要求特别严格的操作通常由中断来完成,仅在中断服务程序中标记事件的发生,不再做任何工作就退出中断,经过后台程序的调度,转由前台程序完成事件的处理,这样就不会造成在中断服务程序中处理费时的事件而影响后续和其他中断。
  
  实际上,前后台系统的实时性比预计的要差。这是因为前后台系统认为所有的任务具有相同的优先级别,即是平等的,而且任务的执行又是通过fifo队列排队,因而对那些实时性要求高的任务不可能立刻得到处理。另外,由于前台程序是一个无限循环的结构,一旦在这个循环体中正在处理的任务崩溃,使得整个任务队列中的其他任务得不到机会被处理,从而造成整个系统的崩溃。由于这类系统结构简单,几乎不需要ram/rom的额外开销,因而在简单的嵌入式应用被广泛使用。
  
  b. 实时操作系统
  
  实时系统是指能在确定的时间内执行其功能并对外部的异步事件做出响应的计算机系统。其操作的正确性不仅依赖于逻辑设计的正确程度,而且与这些操作进行的时间有关。“在确定的时间内”是该定义的核心。也就是说,实时系统是对响应时间有严格要求的。
  
  实时系统对逻辑和时序的要求非常严格,如果逻辑和时序出现偏差将会引起严重后果。实时系统有两种类型:软实时系统和硬实时系统。软实时系统仅要求事件响应是实时的,并不要求限定某一任务必须在多长时间内完成;而在硬实时系统中,不仅要求任务响应要实时,而且要求在规定的时间内完成事件的处理。通常,大多数实时系统是两者的结合。实时应用软件的设计一般比非实时应用软件的设计困难。实时系统的技术关键是如何保证系统的实时性。
  
  实时多任务操作系统是指具有实时性、能支持实时控制系统工作的操作系统。其首要任务是调度一切可利用的资源完成实时控制任务,其次才着眼于提高计算机系统的使用效率,重要特点是要满足对时间的限制和要求。实时操作系统具有如下功能:任务管理(多任务和基于优先级的任务调度)、任务间同步和通信(信号量和邮箱等)、存储器优化管理(含rom的管理)、实时时钟服务、中断管理服务。实时操作系统具有如下特点:规模小,中断被屏蔽的时间很短,中断处理时间短,任务切换很快。
  
  实时操作系统可分为可抢占型和不可抢占型两类。对于基于优先级的系统而言,可抢占型实时操作系统是指内核可以抢占正在运行任务的cpu使用权并将使用权交给进入就绪态的优先级更高的任务,是内核抢了cpu让别的任务运行。不可抢占型实时操作系统使用某种算法并决定让某个任务运行后,就把cpu的控制权完全交给了该任务,直到它主动将cpu控制权还回来。中断由中断服务程序来处理,可以激活一个休眠态的任务,使之进入就绪态;而这个进入就绪态的任务还不能运行,一直要等到当前运行的任务主动交出cpu的控制权。使用这种实时操作系统的实时性比不使用实时操作系统的系统性能好,其实时性取决于最长任务的执行时间。不可抢占型实时操作系统的缺点也恰恰是这一点,如果最长任务的执行时间不能确定,系统的实时性就不能确定。
  
  可抢占型实时操作系统的实时性好,优先级高的任务只要具备了运行的条件,或者说进入了就绪态,就可以立即运行。也就是说,除了优先级最高的任务,其他任务在运行过程中都可能随时被比它优先级高的任务中断,让后者运行。通过这种方式的任务调度保证了系统的实时性,但是,如果任务之间抢占cpu控制权处理不好,会产生系统崩溃、死机等严重后果。 

#23


该回复于2011-01-28 09:59:49被版主删除

#24


该回复于2011-03-18 10:24:20被版主删除

#25


为了和大家一样成为高手, 我决定了, 从现在开始狂啃操作系统和linux内核, 等有成果了, 我也来跟大家谈谈~~

#1


非抢占式就是一个进程从头运行到尾,不能被调度出去。

#2


不是这样的
引用 1 楼 FoxOnWeb 的回复:
非抢占式就是一个进程从头运行到尾,不能被调度出去。 

#3


抢占式的内核是指只要在CPU时钟产生中断的时候,就有权进行任务切换,无论当前任务执行到何种状态;非抢

占式的内核的切换依赖的是任务内部的消息处理和调度函数,在这个任务没有结束之前,不会执行其它的任务。

PS:现在讨论的是内核,全都是处于核心态的,你将内核的任务和OS里面的用户进程搞混了吧...

#4


你的理解是错误的,
抢占式的内核就是当一个进程在运行,另一个更高优先级的进程就绪了,那么要立刻中止当前进程转而去执行那个更高优先级的进程.
而非抢占式的内核就是所有进程的优先级一样,只有这个进程运行完了,或所分到的时间片用完了,又或是一个调度时钟周期到了才会交出系统运行权.

不论是抢占式还是非抢占式在一个CPU定时时钟产生后就有权进行任务切换.

引用 3 楼 fetag 的回复:
抢占式的内核是指只要在CPU时钟产生中断的时候,就有权进行任务切换,无论当前任务执行到何种状态;非抢 

占式的内核的切换依赖的是任务内部的消息处理和调度函数,在这个任务没有结束之前,不会执行其它的任务。 

PS:现在讨论的是内核,全都是处于核心态的,你将内核的任务和OS里面的用户进程搞混了吧...

#5


引用 3 楼 fetag 的回复:
抢占式的内核是指只要在CPU时钟产生中断的时候,就有权进行任务切换,无论当前任务执行到何种状态;非抢 

占式的内核的切换依赖的是任务内部的消息处理和调度函数,在这个任务没有结束之前,不会执行其它的任务。 

PS:现在讨论的是内核,全都是处于核心态的,你将内核的任务和OS里面的用户进程搞混了吧...

也许是我搞混了吧,那关于抢占式和非抢占式之说是针对内核的吧
也就是处于核心态,非抢占式不能抢占cpu,而抢占式可以抢占。

#6


不知你这几句话从哪里看到的,抢占与否都是发生在内核态,用户态怎么可能发生抢占呢? 该哪个进程运行了完全由内核来决定, 如果用户态也可以抢占,那不是会完全乱套了?

引用楼主 zhqyzhqychn 的帖子:
关于抢占式的和非抢占式系统有几个问题 
非抢占式是不是就是指在一个进程自己终止之前不能去抢占而去调度其他进程(不管它是在内核态还是在用户态) 
而抢占式的可以在用户态抢占一个进程(但在内核态仍不可以,bach的unix操作系统设计提到,运行在内核态的进程不能被抢占) 

可看网上又有抢占式内核和非抢占式的内核的说法 
非抢占式内核就是指运行在内核态的进程不能被抢占。 
抢占式内核可以把运行在内核态的进程抢占了…

#7


是我理解错了,刚又把操作系统课本翻出来看了一下,抢占式和非抢占式的区别在于抢占式一个进程能够将处理机资源强行德从正在运行的进程那里抢占过来。献丑了,基础知识不劳啊,呵呵呵,顺便把课本的知识贴过来:

1)非抢占式进程如果被选中,一直运行下去,直到出现如下两个情形
1,该进程因某种事件而等待
2,该进程运行完毕

2)而抢占式:
前两条一样,多了一条:出现了新的就绪程序,该进程的优先级高于正在运行进程的优先级。

ps:好像和楼上说的还有点区别,看了看笔记,时间片轮转法应该属于抢占式的,非抢占式的没有时间片这一说吧,不知道这次理解还有错误吗

#8


mark

#9


引用 4 楼 guosha 的回复:
你的理解是错误的, 
抢占式的内核就是当一个进程在运行,另一个更高优先级的进程就绪了,那么要立刻中止当前进程转而去执行那个更高优先级的进程. 
而非抢占式的内核就是所有进程的优先级一样,只有这个进程运行完了,或所分到的时间片用完了,又或是一个调度时钟周期到了才会交出系统运行权. 

不论是抢占式还是非抢占式在一个CPU定时时钟产生后就有权进行任务切换. 

引用 3 楼 fetag 的回复:
抢占式的内核是指只要在CPU时钟…

呵呵,兄弟,回去看看书吧,查一个词,叫“优先级反转”,看看是什么意思...

#10


优先级反转? 我也想听听你怎么说呢. 

#11


这里应该是你的说法是对的啦,时间片轮转也应该算是一种可抢占
引用 7 楼 zhqyzhqychn 的回复:
是我理解错了,刚又把操作系统课本翻出来看了一下,抢占式和非抢占式的区别在于抢占式一个进程能够将处理机资源强行德从正在运行的进程那里抢占过来。献丑了,基础知识不劳啊,呵呵呵,顺便把课本的知识贴过来: 

1)非抢占式进程如果被选中,一直运行下去,直到出现如下两个情形 
1,该进程因某种事件而等待 
2,该进程运行完毕 

2)而抢占式: 
前两条一样,多了一条:出现了新的就绪程序,该进程的优先级高于正在运行…

#12


引用 9 楼 fetag 的回复:
呵呵,兄弟,回去看看书吧,查一个词,叫“优先级反转”,看看是什么意思...


非常想听听你对于优先级反转的论述, 因为我觉得我上面的回答根本没有涉及到任何的优先级反转的问题.
对优先级反转,很多内核都不处理,靠的是系统设计人员不要乱给任务分配优先级. 

#13


引用 4 楼 guosha 的回复:
抢占式的内核就是当一个进程在运行,另一个更高优先级的进程就绪了,那么要立刻中止当前进程转而去执行那个
更高优先级的进程.

假如现在有PID为2,3,4三个进程,优先级从高到低。
1、 首先,4进程处于就绪状态,然后2进程也处于就绪状态,这时OS会调度2首先执行
2、 而2进程需要的资源此时正在被4占有,所以2进程会被阻塞
3、 此时3进程处于就绪状态了,OS调度3进程执行
4、 3进程执行完毕以后,2进程需要的资源仍然被4进程占有,2进程依然阻塞
5、 于是4进程被调度执行,然后4进程释放资源
6、 2进程得到资源,被调度执行
7、 2进程退出后,4进程继续执行完毕

三个进程的执行完毕顺序为 3,2,4,这就是优先级反转了。我举这个的意思是想说:并不是像你理解的那样,
高优先级的就绪了,就能立刻终止当前进程转去执行它,这也不是判断内核是否是抢占式内核的依据。

引用
这里应该是你的说法是对的啦,时间片轮转也应该算是一种可抢占 

这里你说的有点片面:采用时间片轮转调度绝大多数是可抢占内核,但是也有非抢占内核,也采用这种调度算法

引用
对优先级反转,很多内核都不处理,靠的是系统设计人员不要乱给任务分配优先级. 

请问你这句话是在哪里看到的?还是你自己想出来的?
能否给我举出来一个不处理优先级反转的内核啊?无论是PC的,还是嵌入式系统的都行...

PS:俺不想和任何人斗气吵架,来这里是为了互相学习的,有问题可以提出来大家互相讨论,就是因为不会才学

的,对吧?如果大家每个人都能一个月之内做出一个成型可用的内核,那恐怕也没人会来这里讨论了吧。言语之

中如果有冲撞的地方,先说声抱歉!请谅解! O(∩_∩)O~

#14


引用 13 楼 fetag 的回复:
引用 4 楼 guosha 的回复:
抢占式的内核就是当一个进程在运行,另一个更高优先级的进程就绪了,那么要立刻中止当前进程转而去执行那个 
更高优先级的进程. 
 
假如现在有PID为2,3,4三个进程,优先级从高到低。 
1、 首先,4进程处于就绪状态,然后2进程也处于就绪状态,这时OS会调度2首先执行 
2、 而2进程需要的资源此时正在被4占有,所以2进程会被阻塞 
3、 此时3进程处于就绪状态了,OS调度3进程执行 
4、 3进程执行完毕以后,2进程需要的资源仍然被4进程占有,2进程依然阻塞 
5、 于是4进程被调度执行,然后4进程释放资源 
6、 2进程得到资源,被调度执行 
7、 2进程退出后,4进程继续执行完毕 

三个进程的执行完毕顺序为 3,2,4,这就是优先级反转了。我举这个的意思是想说:并不是像你理解的那样, 
高优先级的就绪了,就能立刻终止当前进程转去执行它,这也不是判断内核是否是抢占式内核的依据。 


你这叫咬文嚼字,你这里是把互斥跟内核是否是可抢占混为一谈,这是在偷换概念.
下面我也评一下你的论述,
最开始已经运行了2,然后,2发现所需资源A被别人占用,这是它自己主动进入内核态,内核把自己挂起.OK,此后2一直都外于挂起状态,直到资源A被释放.

下面是你文中我的定义" 高优先级的就绪了,就能立刻终止当前进程转去执行它", 你说的这个反转问题,2一直都处于挂起状态,一个处于挂起状态的进程根本就不会被调度的,如何去抢占?

#15


引用 13 楼 fetag 的回复:
引用
这里应该是你的说法是对的啦,时间片轮转也应该算是一种可抢占 
 
这里你说的有点片面:采用时间片轮转调度绝大多数是可抢占内核,但是也有非抢占内核,也采用这种调度算法 

进程2在运行,后来运行时间片到,其时它还没有运行玩的话,也要转去运行其它的进程,这不是被抢占是什么?

#16


引用 13 楼 fetag 的回复:
引用
对优先级反转,很多内核都不处理,靠的是系统设计人员不要乱给任务分配优先级. 
 
请问你这句话是在哪里看到的?还是你自己想出来的? 
能否给我举出来一个不处理优先级反转的内核啊?无论是PC的,还是嵌入式系统的都行... 

PS:俺不想和任何人斗气吵架,来这里是为了互相学习的,有问题可以提出来大家互相讨论,就是因为不会才学 

的,对吧?如果大家每个人都能一个月之内做出一个成型可用的内核,那恐怕也没人会来这里讨论了吧。言语之 

中如果有冲撞的地方,先说声抱歉!请谅解! O(∩_∩)O~


优先级反转的问题是怎么产生的?
内核解决优先级反转的通用方法是优先级继承,也就是你上面的,4占用了2的资源,那么4的优先级同时要提高到2的优先级.
这样就不会出现2,3之前的反转. 这里高级的商业嵌入式系统也许可以,低级的嵌入式系统确实没有这个功能.

就算是内核能处理优先级反转,有经验的开发人员会尽量避免可能出现优先级反转的设计来.也就是避免高低两个优先级的任务去竞争同一个资源的同时,还有另一个中间优先级的任务.

#17


我一直就就事论事,可这话不仅是讨论的意味了.
引用 9 楼 fetag 的回复:
呵呵,兄弟,回去看看书吧,查一个词,叫“优先级反转”,看看是什么意思...

#18


你这里把是否可抢占仅定义为CPU时钟中断处理进的任务调度明显是不对的,任何一个发送信号量,发送邮件,发送消息等的动作都可能导致新的高优先级任务就绪,都会伴随任务调度导致的任务切换动作.
引用 3 楼 fetag 的回复:
抢占式的内核是指只要在CPU时钟产生中断的时候,就有权进行任务切换,无论当前任务执行到何种状态;非抢 

占式的内核的切换依赖的是任务内部的消息处理和调度函数,在这个任务没有结束之前,不会执行其它的任务。 

PS:现在讨论的是内核,全都是处于核心态的,你将内核的任务和OS里面的用户进程搞混了吧...

#19


uC/OS-II算是高级的嵌入式系统吗?核心代码大概五千行,且源码开放(GUI版本商业付费),它就完全支持优先

级反转问题的解决方案...

另外对你17楼的回复,我已经承认错误了,道歉声明贴在13楼结尾处,呵呵

#20


都是高手

#21


mark

#22


嵌入式操作系统的种类
  
  一般情况下,嵌入式操作系统可以分为两类,一类是面向控制、通信等领域的实时操作系统,如 windriver公司的vxworks、isi的psos、qnx系统软件公司的qnx、ati的nucleus等;另一类是面向消费电子产品的非实时操作系统,这类产品包括个人数字助理(pda)、移动电话、机顶盒、电子书、webphone等。
  
  a. 非实时操作系统
  
  早期的嵌入式系统中没有操作系统的概念,程序员编写嵌入式程序通常直接面对裸机及裸设备。在这种情况下,通常把嵌入式程序分成两部分,即前台程序和后台程序。前台程序通过中段来处理事件,其结构一般为无限循环;后台程序则掌管整个嵌入式系统软、硬件资源的分配、管理以及任务的调度,是一个系统管理调度程序。这就是通常所说的前后台系统。一般情况下,后台程序也叫任务级程序,前台程序也叫事件处理级程序。在程序运行时,后台程序检查每个任务是否具备运行条件,通过一定的调度算法来完成相应的操作。对于实时性要求特别严格的操作通常由中断来完成,仅在中断服务程序中标记事件的发生,不再做任何工作就退出中断,经过后台程序的调度,转由前台程序完成事件的处理,这样就不会造成在中断服务程序中处理费时的事件而影响后续和其他中断。
  
  实际上,前后台系统的实时性比预计的要差。这是因为前后台系统认为所有的任务具有相同的优先级别,即是平等的,而且任务的执行又是通过fifo队列排队,因而对那些实时性要求高的任务不可能立刻得到处理。另外,由于前台程序是一个无限循环的结构,一旦在这个循环体中正在处理的任务崩溃,使得整个任务队列中的其他任务得不到机会被处理,从而造成整个系统的崩溃。由于这类系统结构简单,几乎不需要ram/rom的额外开销,因而在简单的嵌入式应用被广泛使用。
  
  b. 实时操作系统
  
  实时系统是指能在确定的时间内执行其功能并对外部的异步事件做出响应的计算机系统。其操作的正确性不仅依赖于逻辑设计的正确程度,而且与这些操作进行的时间有关。“在确定的时间内”是该定义的核心。也就是说,实时系统是对响应时间有严格要求的。
  
  实时系统对逻辑和时序的要求非常严格,如果逻辑和时序出现偏差将会引起严重后果。实时系统有两种类型:软实时系统和硬实时系统。软实时系统仅要求事件响应是实时的,并不要求限定某一任务必须在多长时间内完成;而在硬实时系统中,不仅要求任务响应要实时,而且要求在规定的时间内完成事件的处理。通常,大多数实时系统是两者的结合。实时应用软件的设计一般比非实时应用软件的设计困难。实时系统的技术关键是如何保证系统的实时性。
  
  实时多任务操作系统是指具有实时性、能支持实时控制系统工作的操作系统。其首要任务是调度一切可利用的资源完成实时控制任务,其次才着眼于提高计算机系统的使用效率,重要特点是要满足对时间的限制和要求。实时操作系统具有如下功能:任务管理(多任务和基于优先级的任务调度)、任务间同步和通信(信号量和邮箱等)、存储器优化管理(含rom的管理)、实时时钟服务、中断管理服务。实时操作系统具有如下特点:规模小,中断被屏蔽的时间很短,中断处理时间短,任务切换很快。
  
  实时操作系统可分为可抢占型和不可抢占型两类。对于基于优先级的系统而言,可抢占型实时操作系统是指内核可以抢占正在运行任务的cpu使用权并将使用权交给进入就绪态的优先级更高的任务,是内核抢了cpu让别的任务运行。不可抢占型实时操作系统使用某种算法并决定让某个任务运行后,就把cpu的控制权完全交给了该任务,直到它主动将cpu控制权还回来。中断由中断服务程序来处理,可以激活一个休眠态的任务,使之进入就绪态;而这个进入就绪态的任务还不能运行,一直要等到当前运行的任务主动交出cpu的控制权。使用这种实时操作系统的实时性比不使用实时操作系统的系统性能好,其实时性取决于最长任务的执行时间。不可抢占型实时操作系统的缺点也恰恰是这一点,如果最长任务的执行时间不能确定,系统的实时性就不能确定。
  
  可抢占型实时操作系统的实时性好,优先级高的任务只要具备了运行的条件,或者说进入了就绪态,就可以立即运行。也就是说,除了优先级最高的任务,其他任务在运行过程中都可能随时被比它优先级高的任务中断,让后者运行。通过这种方式的任务调度保证了系统的实时性,但是,如果任务之间抢占cpu控制权处理不好,会产生系统崩溃、死机等严重后果。 

#23


该回复于2011-01-28 09:59:49被版主删除

#24


该回复于2011-03-18 10:24:20被版主删除

#25


为了和大家一样成为高手, 我决定了, 从现在开始狂啃操作系统和linux内核, 等有成果了, 我也来跟大家谈谈~~