概念上说,只有两种模式可以调用调度器切换任务,一种如6楼所说:系统模式。也即通过时钟(T1/T2)节拍产生的硬中断ISR启动调度器来完成就绪任务的切换。
另一种是用户模式。 由用户通过系统服务函数(例如OS_wait( )等等)通过软中断指令去启动内核调度器以执行切换任务操作,因为用户主动放弃了CPU资源,所以它要通过调度器才能把CPU资源让给其他任务。 这种设计是把调度器设计在ISR中断服务程序中,好像只有进入中断服务才能启动调度器。所以用户如果要启动调度器,只能通过软中断指令。
实际上没有软中断指令的CPU不是这样设计,如4楼所说,任务通过系统函数直接启动调度器即可,这种OS的调度器设计为独立函数,用户模式也可以单独调用的(不是用户直接调用)。
无论系统模式还是用户模式,都是OS内部控制,用户不可能直接控制OS内核! 所以,不能企图跨越OS去调用内核函数! |