ucos-ii操作系统可以允许后台运行多个任务,而每个任务都是无限循环的,内核是如何调度的,

难道是强制一个没完成的任务,执行另外一个?... 难道是强制一个没完成的任务,执行另外一个? 展开
 我来答
两机媚柚1q2c8
推荐于2017-11-24 · TA获得超过307个赞
知道小有建树答主
回答量:69
采纳率:0%
帮助的人:59万
展开全部
每个嵌入式操作系统都会牵扯到这个问题。
任务调度通俗的讲就是操作系统分配每个任务的运行时间,协调他们的工作。

对于每个任务来说,编程者可以认为只有它占用CPU,故而可以写成无限循环的形式,在这个循环中加入系统延时(或请求消息、事件等),当任务运行到系统延时这条语句不会傻傻的等待,而是转而处理其他的任务。操作系统记住了延时时间,当时间到时如果这个任务就绪再引发一次调度,执行本任务,也就是延时之后的程序。

操作系统是怎么知道哪个任务应该运行,哪个任务需要等待,哪个任务需要消息的呢?不管哪个操作系统,都要有一个任务控制块,这个控制块要标明任务的优先级、任务的入口地址,并且给任务分别堆栈等。堆栈其实就是保存任务运行信息的,比如在哪个地方调用了系统延时,当系统调度给这个任务运行时就能找到在什么地方运行了。

找本ucOS的书看,然后读代码,能很快理解。学习任何一门知识都要扎实,这种问题书上讲解的很清楚,不要上来就问,这不是学习的好态度。祝你好运~
百度网友64c9ca5
2011-11-10 · TA获得超过231个赞
知道答主
回答量:51
采纳率:0%
帮助的人:40.6万
展开全部
通常情况下。ucos的所有任务都会做的事情就是在大循环查询它的消息邮箱,等收到一个消息MSG。等到之后,任务就开始执行不同的消息的处理函数,执行完毕后重来继续等下一个消息。

所谓的调度就是,当任务A执行完一次消息处理、或者查询自己邮箱发现没有消息、或者某个更高优先级的任务需要执行、或者发生某个中断的时候(这取决于内核的调度策略),内核会将任务A挂起。将这个任务A的执行上下文(寄存器状态、堆栈指针、PC指针等)保存起来,然后将它们恢复成任务B(或者中断服务程序)的执行上下文,这样寄存器、堆栈、PC等的值就切换成任务B(或者中断服务程序)的上下文,于是接下来任务B(或者中断服务程序)开始跑。

如果所有的任务都没有消息,则内核最终切换到IDLETASK(空闲任务)。这是内核提供的最低优先级任务(就是一段空跑的for循环)。每隔一定时间,空闲任务都会“自动挂起”,引发一次内核调度,使得用户任务得以运行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
大雄说创业
2011-11-10 · TA获得超过476个赞
知道小有建树答主
回答量:384
采纳率:100%
帮助的人:282万
展开全部
如果你有对比过,你会发现每一个循环里都会有一个系统延时函数(DelayHHMMSS类的名字),里面就有任务优先级查询,调度的处理。另外也有可能存在信号量,邮箱等的Pend函数,该函数里也有任务优先级查询,调度处理。

所以多任务的处理其实就是,在一个任务在等待时间到或信号到的期间,可以执行另一个任务。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ch314156
2011-11-10 · TA获得超过4378个赞
知道小有建树答主
回答量:2036
采纳率:100%
帮助的人:1069万
展开全部
先保存此任务,再恢复彼任务,何谓保存,CPU的寄存器入栈,何谓恢复,CPU的寄存器出栈,详细来我空间看看
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式