调度器是操做系统的核心,其主要功能就是实现线程的切换,即从就绪列表里面找到优先级最高的线程,而后去执行该线程。操作系统
要实现线程调度器,首先面临的问题是什么时候须要将CPU从无限循环的线程中释放出来。这个得分不一样的场景,好比:线程执行完毕;线程须要等待外设响应;线程正在执行,但这时更高优先级的线程就绪了;线程正在执行,但这时相同优先级的线程就绪了。不一样的os对这些场景的处理是不尽相同的。RTT做为一种RTOS,容许抢占调度。因此当线程正在执行,但这时更高优先级的线程就绪了,线程调度器应该马上主动抢占CPU。线程
这就出现了第二个问题,如何将CPU从无限循环的线程中释放出来。咱们知道,中断控制器能打断程序的执行顺序,得到对CPU的控制。但有些线程并不涉及中断。对此,操做系统用一个计数器来处理这个问题。这个计数器就像RTOS的“心跳”同样,定时唤醒线程调度器。STM32F103提供了一个专门的外设SysTick给操做系统使用。循环
第三个问题是,线程切换后,如何恢复线程以前的状态。这个就须要给每一个线程分配一段专有的线程栈,用于在线程切换时存储线程的参数。程序