ucos的任务调度

 在多任务系统中,都会提供一个系统函数来进行进程(任务)间切换,综合来说,他们有两种进程(任务)切换方式:
1) 由进程(任务)本身直接调用任务切换函数进行进程(任务)切换:
    在当前进程(任务)因为不能获得必须的资源而立即被堵塞时,就由进程(任务)本生直接调用进程(任务)切换函数进行进程(任务)间调度。
在Linux中可以直接调用schedule()函数来实现。
在UCos中,通过调用OSSched()来完成。
2) 延迟调用任务切换函数进行进程(任务)切换:
    此方式是把当前进程(任务)设置一调度标志而以延迟方式调用任务切换函数进行进程(任务)切换。
在Linux系统中,总是在恢复用户态进程执行之前,检查这一调度标志,在这里标志是:TIF_NEED_RESCHED,如果有这一标志,就调用调度函数进行进程切换。此种情况主要包括以下几种:
    A. 当前进程用完了它的CPU时间片,有scheduler_tick()函数完成 schedule()的延迟调用。
    B.当一个被唤醒进程的优先级比当前进程优先级高时,由try_to_wake_up()函数完成schedule()的延迟调用。
    C.当发出系统调用sched_setscheduler()时。
在这些情况中,主要由于系统调用或中断而进入内核态,或者当前进程本来在内核态时,返回用户态时发生的。
在UCOS中,所有的任务有不同的优先级,不会出现同一优先级上有多个任务的情况,而且也没有系统调用的概念,所以任务调度的延迟调用只能出现在中断处理完成返回时,在OSIntExt()函数中,检查是否有高优先级的任务就绪,如果有高优先级的任务就绪,进行任务切换。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值