為什么要用操作系統(tǒng)?
裸奔程序是由先后順序的,比如執(zhí)行程序a時,程序B在等待,等a執(zhí)行完后才允許B執(zhí)行。而在操作系統(tǒng)上我們可以理解為多個任務(wù)都在執(zhí)行,兩個人物之間可以通過操作系統(tǒng)來協(xié)調(diào),當(dāng)優(yōu)先級高的緊急任務(wù)可以搶占內(nèi)核優(yōu)先執(zhí)行任務(wù)。Ucos2適用于小系統(tǒng)小規(guī)模的項目,可以提高執(zhí)行效率。嚴(yán)格地說,uc/OS-II只是一個實時操作系統(tǒng)內(nèi)核
它僅僅包含了任 務(wù) 調(diào)度、任務(wù)管理、時間管理、內(nèi)存管理和任務(wù)間的通信和同步等基本功能,沒有提供輸入輸出管理、文件系統(tǒng)、網(wǎng)絡(luò)等額外的服務(wù),我想后者可能是區(qū)別于linux的區(qū)別吧。但由于uc/OS-II良好的可擴(kuò)展性和源碼開放,這些非必需的功能完全可以由用戶自己根據(jù)需要分別實現(xiàn)。
幾個概念
什么是搶占式任務(wù)?
簡單地說就是誰的優(yōu)先級高誰就可以搶占內(nèi)核或者空間來執(zhí)行優(yōu)先級高的任務(wù)。
或者這么說,高優(yōu)先級任務(wù)可以在某些時刻搶占了正在CPU上運行的低優(yōu)先級任務(wù)的CPU執(zhí)行權(quán)限。根據(jù)搶占時機(jī)又可以分為用戶空間搶占和內(nèi)核搶占。
什么是任務(wù)調(diào)度機(jī)制?
首先要創(chuàng)建任務(wù),創(chuàng)建任務(wù)的數(shù)目有限制,56個以內(nèi),創(chuàng)建任務(wù)也有優(yōu)先級,優(yōu)先級別為0時,優(yōu)先級最高。系統(tǒng)初始化完畢后,外設(shè)驅(qū)動初始化完畢后,建立任務(wù),任務(wù)中含有一些參數(shù),包括返回值,優(yōu)先級別,堆棧大小等,然后開始任務(wù)調(diào)度,也就是程序運行。
Ucos2的運行步驟?(工作原理)
首先進(jìn)行操作系統(tǒng)初始化,主要完成任務(wù)控制塊(tcb)初始化,然后開始創(chuàng)建新任務(wù)、初始化任務(wù)堆棧區(qū),最后調(diào)用OSSTART()函數(shù),開始任務(wù)調(diào)度。主函數(shù)如下:
int
{
RestoreConfigData();
OSInit();
OSStart();
return
}
在多任務(wù)調(diào)度開始后,啟動時鐘源開始計數(shù),時鐘的中斷信號,延時,超時都是由此產(chǎn)生。
當(dāng)時鐘中斷來臨時,系統(tǒng)把當(dāng)前正在執(zhí)行的任務(wù)掛起,保護(hù)現(xiàn)場,進(jìn)行中斷處理,判斷有無任務(wù)延時到期。若有,則使該任務(wù)進(jìn)入就緒態(tài),并對所有進(jìn)入就緒態(tài)的任務(wù)的優(yōu)先級進(jìn)行比較,通過任務(wù)切換去執(zhí)行最高優(yōu)先級的任務(wù)。若沒有別的任務(wù)進(jìn)入就緒態(tài),則恢復(fù)現(xiàn)場繼續(xù)執(zhí)行原任務(wù)。另一種調(diào)度方式是任務(wù)級的調(diào)度,即通過發(fā)軟中斷命令或依靠處理器在任務(wù)執(zhí)行中調(diào)度。如任務(wù)要等待信號量或一個正在執(zhí)行的任務(wù)被掛起時,就需要在此任務(wù)中調(diào)度,找出目前處于就緒態(tài)的優(yōu)先級最高的任務(wù)去執(zhí)行。當(dāng)沒有任何任務(wù)進(jìn)入就緒態(tài)時,就去執(zhí)行空任務(wù)。
如圖
參考資料
http://wenku.baidu.com/view/948dad0303d8ce2f00662300