μC/OS-II任務(wù)調(diào)度概述及其任務(wù)調(diào)度特點
μC/OS-II是一款實時操作系統(tǒng),專為單片機設(shè)計。它以其高穩(wěn)定性和可移植性在嵌入式領(lǐng)域贏得了廣泛的贊譽。μC/OS-II以其可移植、可固化、可裁剪的特性著稱,適用于需要實時性的項目。該操作系統(tǒng)能在數(shù)控機床控制系統(tǒng)中確保各軸電機控制任務(wù)和刀具換刀任務(wù)的有序執(zhí)行。μC/OS-II提供了豐富的功能,包括任務(wù)管理、時間管理、內(nèi)存管理和任務(wù)間通信等。其多任務(wù)處理能力使得系統(tǒng)能夠同時處理多個任務(wù),顯著提高了系統(tǒng)的效率。支持多任務(wù)處理,同時還提供任務(wù)管理、內(nèi)存管理及高效的通信機制。在工業(yè)自動化和汽車電子等領(lǐng)域,μC/OS-II的應(yīng)用尤為顯著。例如,在工業(yè)自動化設(shè)備的應(yīng)用場景中,高優(yōu)先級任務(wù)能夠迅速搶占并執(zhí)行,確保系統(tǒng)對故障的實時響應(yīng)。此外,其內(nèi)存管理機制也大大減少了內(nèi)存碎片化,提高了內(nèi)存使用效率并簡化任務(wù)間的協(xié)同工作。
μC/OS-II 是一種基于優(yōu)先級的搶占式多任務(wù)實時操作系統(tǒng),包含了實時內(nèi)核、任務(wù)管理、時間管理、任務(wù)間通信同步(信號量,郵箱,消息 隊列)和內(nèi)存管理等功能。它可以使各個任務(wù)獨立工作,互不干涉,很容易實現(xiàn)準時而且無誤執(zhí)行,使實時應(yīng)用程序的設(shè)計和擴展變得容易,使應(yīng)用程序的設(shè)計過程大為減化。μC /OS-II是一個完整的、可移植、可固化、可裁剪的搶占式實時多任務(wù)內(nèi)核。μC/OS-II絕大部分的代碼是用ANSII的C語言編寫的,包含一小部分匯編代碼,使之可供不同架構(gòu)的微處理器使用。從8位到64位,μC/OS-II已在超過40種不同架構(gòu)上的微處理器上運行。μC/OS-II已經(jīng)在世界范圍內(nèi)得到廣泛應(yīng)用,包括很多領(lǐng)域, 如手機、路由器、集線器、不間斷電源、飛行器、醫(yī)療設(shè)備及工業(yè)控制上。實際上,μC/OS-II已經(jīng)通過了非常嚴格的測試,并且得到了美國航空管 理局(Federal Aviation Administration)的認證,可以用在飛行器上。這說明μC/OS-II是穩(wěn)定可靠的,可用于與人性命攸關(guān)的安全緊要(safety critical)系統(tǒng)。除此以外,μC/OS-II 的鮮明特點就是源碼公開,便于移植和維護。
多任務(wù)系統(tǒng)中,內(nèi)核負責管理各個任務(wù),或者說為每個任務(wù)分配CPU 時間,并且負責任務(wù)之間的通訊。內(nèi)核提供的基本服務(wù)是任務(wù)切換。μC/OS-II可以管理多達64個任務(wù)。由于它的作者占用和保留了8個任務(wù),所以留給用戶應(yīng)用程序最多可有56個任務(wù)。賦予各個任務(wù)的優(yōu)先級必須是不相同的。這意味著μC/OS-II不支持時間片輪轉(zhuǎn)調(diào)度法(round-robin scheduli ng)。μC/OS-II為每個任務(wù)設(shè)置獨立的堆??臻g,可以快速實現(xiàn)任務(wù)切換 。μC/OS-II近似地每時每刻總是讓優(yōu)先級最高的就緒任務(wù)處于運行狀態(tài),為了保證這一點,它在調(diào)用系統(tǒng)API 函數(shù)、中斷結(jié)束、定時中斷結(jié)束時總是執(zhí)行調(diào)度算法,μC/OS-II通過事先計算好數(shù)據(jù)簡化了運算量,通過精心設(shè)計就緒表結(jié)構(gòu)使得延時可預(yù)知。
不復(fù)雜的小系統(tǒng)一般設(shè)計成前后臺系統(tǒng)(也稱超循環(huán)系統(tǒng))。應(yīng)用程序是一個無限的循環(huán),循環(huán)中調(diào)用相應(yīng)的函數(shù)完成相應(yīng)的操作,這部分可以看成后臺系統(tǒng)。中斷服務(wù)程序處理異步事件,這部分可以看成前臺系統(tǒng)。后臺也可以叫任務(wù)級,前臺也可以叫中斷級。時間相關(guān)很強的關(guān)鍵操作一定是靠中斷服務(wù)來保證的,因為中斷服務(wù)提供的信息一定要等到后臺程序走到該處理信息這一步時才能得到處理,因此這種系統(tǒng)在處理信息的及時性上,比實際可以做到的要差。這個指標稱作任務(wù)的相應(yīng)時間,最壞情況下的任務(wù)級相應(yīng)時間取決于整個循環(huán)的執(zhí)行時間。因為循環(huán)的執(zhí)行時間不是常數(shù),程序經(jīng)過某一特定的部分的準確時間也是不能確定的。
μC/OS-II(MicroC/OS-II)是一個實時內(nèi)核,廣泛應(yīng)用于嵌入式系統(tǒng)中,以其高度模塊化和可移植性著稱。它支持多任務(wù)操作,并提供了豐富的API接口進行任務(wù)管理和調(diào)度。μC/OS-II 的任務(wù)調(diào)度器是搶占式的,這意味著具有更高優(yōu)先級的任務(wù)可以搶占正在運行的低優(yōu)先級任務(wù)。在μC/OS-II中,任務(wù)調(diào)度的核心是任務(wù)調(diào)度器。它負責管理任務(wù)的執(zhí)行順序,確保系統(tǒng)的實時性和響應(yīng)性。任務(wù)調(diào)度器的工作原理基于優(yōu)先級的管理,保證了最高優(yōu)先級的任務(wù)得到CPU資源的即時響應(yīng)。任務(wù)調(diào)度對于嵌入式系統(tǒng)至關(guān)重要,它需要在有限的資源下,有效地分配CPU時間給各個任務(wù),同時要處理任務(wù)之間的同步和通信。一個高效的調(diào)度策略能夠減少任務(wù)的響應(yīng)時間,提高系統(tǒng)的整體性能。因此,在設(shè)計一個嵌入式系統(tǒng)時,如何實現(xiàn)任務(wù)調(diào)度是一個需要重點考慮的問題。
任務(wù)是實時操作系統(tǒng)中獨立執(zhí)行的最小單位,它擁有自己的程序代碼、數(shù)據(jù)集和執(zhí)行棧。任務(wù)的運行狀態(tài)可以分為就緒態(tài)、運行態(tài)和等待態(tài)等。根據(jù)不同的需求,任務(wù)可以分為靜態(tài)任務(wù)和動態(tài)任務(wù)。靜態(tài)任務(wù)在系統(tǒng)初始化時就已定義,而動態(tài)任務(wù)則可以在系統(tǒng)運行過程中創(chuàng)建和銷毀。靜態(tài)任務(wù)和動態(tài)任務(wù)的主要區(qū)別在于任務(wù)的生命周期和創(chuàng)建方式。靜態(tài)任務(wù)是在編譯時就已確定,它們的TCB和堆棧空間在系統(tǒng)啟動前被分配和初始化。這類任務(wù)對于系統(tǒng)資源占用情況較為固定。
動態(tài)任務(wù)則是在系統(tǒng)運行時通過函數(shù)調(diào)用創(chuàng)建的。它們的創(chuàng)建、銷毀和堆??臻g管理都由系統(tǒng)負責,更加靈活,但同時也會消耗更多的運行時資源。任務(wù)優(yōu)先級是任務(wù)調(diào)度中的一個核心概念。在μC/OS-II中,任務(wù)優(yōu)先級用于決定任務(wù)之間的執(zhí)行順序。優(yōu)先級越高的任務(wù)獲得的CPU時間越多,優(yōu)先級低的任務(wù)在執(zhí)行時可能需要等待。合理地設(shè)置任務(wù)優(yōu)先級對于實現(xiàn)系統(tǒng)功能和滿足實時性要求至關(guān)重要。動態(tài)優(yōu)先級與靜態(tài)優(yōu)先級的比較,在系統(tǒng)中,優(yōu)先級可以是靜態(tài)的也可以是動態(tài)的。靜態(tài)優(yōu)先級在任務(wù)創(chuàng)建時就被分配,并在整個生命周期內(nèi)不會改變。它簡化了系統(tǒng)設(shè)計,但降低了靈活性動態(tài)優(yōu)先級允許在任務(wù)執(zhí)行過程中根據(jù)某些條件動態(tài)地改變其優(yōu)先級。這為任務(wù)調(diào)度提供了更高的靈活性,但同時會增加系統(tǒng)的復(fù)雜性和開銷。
多任務(wù)操作系統(tǒng)在設(shè)計較為復(fù)雜的應(yīng)用程序時,通常把大型任務(wù)分解成多個小任務(wù),然后再計算機中通過運行這些小任務(wù),最終達到完成大任務(wù)的目的。這種方法可以使任務(wù)并發(fā)的運行多個任務(wù),從而提高處理器的利用率,加快程序的執(zhí)行速度。UCOS-II就是一個能對這些小任務(wù)的運行進行管理和調(diào)度的多任務(wù)系統(tǒng)。UCOS-II的任務(wù)由三個部分所組成:任務(wù)程序代碼(函數(shù))、任務(wù)堆棧和任務(wù)控制塊。其中,任務(wù)控制塊就是關(guān)聯(lián)了任務(wù)代碼的程序控制塊,它記錄了任務(wù)的各個屬性;任務(wù)堆棧則用來保存任務(wù)的工作環(huán)境;任務(wù)程序代碼就是任務(wù)的執(zhí)行部分。根據(jù)任務(wù)是否具有自己的私有運行空間,可以把任務(wù)分成”線程“或”進程“。具體來說,具有私有空間的任務(wù)叫做進程,沒有私有空間的任務(wù)叫做線程。
從任務(wù)的組成上來看,UCOS-II沒有給任務(wù)定義私有空間,因此UCOS-II中所有的任務(wù)都屬于線程。UCOS-II的任務(wù)由兩種:用戶任務(wù)和系統(tǒng)任務(wù),由應(yīng)用程序設(shè)計者編寫的任務(wù),叫做用戶任務(wù);由系統(tǒng)提供的任務(wù)叫做系統(tǒng)任務(wù);系統(tǒng)任務(wù)是胃應(yīng)用程序提供某種服務(wù)或為系統(tǒng)本身服務(wù)的服務(wù)的,在UCOS-II中,最多可包含64個任務(wù)(包括用戶任務(wù)和系統(tǒng)任務(wù))。
64個任務(wù)中,保留了4個最高優(yōu)先級和4個最低優(yōu)先級任務(wù)供UCOS-II自己使用,所以用戶可以使用的只有56個任務(wù)。任務(wù)的優(yōu)先級越高,反映的優(yōu)先級的值則越低。一個任務(wù),也稱作一個線程,是一個簡單的程序,該程序可以認為CPU完全只屬于該程序自己。試試應(yīng)用程序的設(shè)計過程,包括如何吧問題分割成多個任務(wù),每個任務(wù)都是整個應(yīng)用的某一部分,每個任務(wù)都被賦予一定的優(yōu)先級,有自己的一套CPU寄存器和直接的??臻g。