RT-Thread源碼學習第六篇,線程調度器(1)

調度器是操做系統的核心,其主要功能就是實現線程的切換,即從就緒列表裏面找到優先級最高的線程,而後去執行該線程。操作系統

要實現線程調度器,首先面臨的問題是什麼時候須要將CPU從無限循環的線程中釋放出來。這個得分不一樣的場景,好比:線程執行完畢;線程須要等待外設響應;線程正在執行,但這時更高優先級的線程就緒了;線程正在執行,但這時相同優先級的線程就緒了。不一樣的os對這些場景的處理是不盡相同的。RTT做爲一種RTOS,容許搶佔調度。因此當線程正在執行,但這時更高優先級的線程就緒了,線程調度器應該馬上主動搶佔CPU。線程

這就出現了第二個問題,如何將CPU從無限循環的線程中釋放出來。咱們知道,中斷控制器能打斷程序的執行順序,得到對CPU的控制。但有些線程並不涉及中斷。對此,操做系統用一個計數器來處理這個問題。這個計數器就像RTOS的「心跳」同樣,定時喚醒線程調度器。STM32F103提供了一個專門的外設SysTick給操做系統使用。循環

第三個問題是,線程切換後,如何恢復線程以前的狀態。這個就須要給每一個線程分配一段專有的線程棧,用於在線程切換時存儲線程的參數。程序

相關文章
相關標籤/搜索