基於μC/OS-II操作系統的任務調度機制

學識都 人氣:1.55W
基於μC/OS-II操作系統的任務調度機制

  論文關鍵詞:μC/OS-II;多任務;任務調度

  論文摘要:μC/OS-II操作系統之所以在10多年的時間裏作爲一個嵌入式實時的多任務操作系統得到了廣泛的應用,原因之一是它的任務機制存在許多的優點。多任務運行的最大難點就在於多任務的調度。
   WANG Yu-rong,ZHU Jian-bin
  (Computer Science College Wuhan University of Science and Engineering,Wuhan 430073,China)
  Abstract:As a multi-task embedded real time operation system, μC/OS-II Operating Systems has been widely used in more ten of the reason is that the Operating Systems has many hardest point is the schedul of tasks when we run multi-task Operating Systems.
  Key words:μC/OS-II;Multi-task;task-scheduling
  
  1 引言
  
  嵌入式系統是一種應用範圍非常廣泛的系統。可以這樣理解,除了桌面和服務器外所有計算設備都屬於嵌入式系統。在短短十多年的時間裏,伴隨着微技術、軟件技術的發展,嵌入式系統被廣泛的用於如生物儀器、智能汽車、設備、網絡設備、儀器儀表、手持設備等諸多領域。[1] 它是以應用爲中心的,而嵌入式操作系統則是嵌入式系統應用中的核心。
  嵌入式系統是計算機硬件和軟件的結合體,或許還加上等其他部分,被設計來完成專門的功能。在一些情況下,嵌入式系統是一個大的系統或產品的一部分,就象汽車上的防抱死裝置,與通用計算機相對。最初的嵌入式系統是不帶操作系統的,只是用來完成某一個特定的單一功能,隨着軟硬件技術的發展,完成單一功能的嵌入式系統已經不能適應的需要,因此出現了帶操作系統的嵌入式系統。現在嵌入式系統的準確定義是:以嵌入式計算機爲技術核心,面向用戶、面向產品、面向應用,軟硬件可剪裁的,適用於對功能、可靠性、、體積、功耗等綜合性能有嚴格要求的專用計算機系統。[2]
  μC/OS-II操作系統是一個完整的,可移植、固化、裁剪的佔先式實時多任務操作系統。它之所以這麼受歡迎,其中一個很重要的方面是因爲它的實時性和多任務管理機制。由此可見它對任務的管理是成功的。在μC/OS-II操作系統中,一個任務,也稱作一個線程,就是一個簡單的程序,這個程序在執行時可以任務CPU完全屬於該程序自己。而多任務的運行實際上並不是有多個CPU讓多任務使用,而是靠CPU在多個任務間的轉換和調度。
  
  2 任務狀態
  
  μC/OS-II操作系統的任務狀態有五種,分別是睡眠態、就緒態、運行態、等待狀態和中斷服務態。
  睡眠態是指程序還在存儲設備中,還沒有被μC/OS-II操作系統管理,此時的任務只能通過任務創建函數才能脫離此狀態,調用創建任務函數後,任務才能從睡眠態變成就緒態,在這個意義上來說,睡眠態就是μC/OS-II操作系統的入口,而任務創建函數就是入口的鑰匙。[3]
  任務被建立後,任務就進入到了就緒態,準備運行了。如果新建立任務的優先級高於就緒態中的其他任務的優先級,則新建立的任務就會立即得到CPU的使用權,會被優先執行,從而進入到運行態;而在就緒態的任務也可以通過調用任務刪除函數回到睡眠態。
  由於任何時刻只有一個任務處於運行態,所以一旦運行態中的任務被剝奪了CPU的使用權,它就從運行態回到等待狀態。也可以通過人爲的控制郵箱、信號量、延遲時間等使正在運行的任務從運行態轉到等待狀態。如果正在運行的任務是允許中斷的,此時若中斷服務程序正好到來,正在運行的任務也會進入中斷服務狀態,而進入中斷服務狀態的'任務只有中斷任務把CPU的控制權還給中斷前的任務時,才能從中斷服務狀態退出來。運行態的任務也是可以被刪除的,如果此時調用了任務刪除函數,運行態的任務也會直接回到睡眠態。
  一旦正在運行的任務通過將自己延遲一段時間或是由於要等待某一事件的發生而進入到了等待狀態,如果延遲時間滿,或是等待的某一事件發生了,任務就進入到了就緒態;或者等待狀態的任務被刪除了,那麼它也會進入到睡眠態。由此看來,睡眠態又是μC/OS-II操作系統的出口,而出口的鑰匙是任務刪除函數,與任務建立函數相對。
  
  3 任務調度
  
  μC/OS-II操作系統總是運行進入就緒態任務中優先級最高的任務。它可以管理多達64個任務,但目前的版本里已經有兩個任務被系統佔用。一般來說用戶可以使用從優先級4到優先級OS_LOWEST_PRIO-4一共56個優先級。對於多任務的管理,μC/OS-II操作系統是通過調度器完成了。其中任務級的調度是由函數OSSched()完成,而中斷級的調度是通過函數OSIntExiT()完成。這兩個函數是很相似的,所不同的其中一點就是OSSched()調用了任務切換函數OS_TASK_SW(),而退出中斷服務子程序OSIntExiT()卻調用的是OSIntCtxSw()函數。這是因爲中斷服務子程序已經將CPU寄存器存入到中斷了的任務的堆棧中,所以只需要恢復堆棧中的內容即可。