FreeRTOS入門-概念介紹
開(kāi)始前,先拋出一個(gè)問(wèn)題:我們?yōu)槭裁葱枰?a target="_blank">操作系統(tǒng)?比如你使用計(jì)算器進(jìn)行加減乘除等運(yùn)算,人按鍵輸入,最后計(jì)算器液晶屏顯示結(jié)果,這只是一個(gè)單任務(wù)的操作,并且人的速度很慢,計(jì)算器大部分時(shí)間都在空閑等人。如果一個(gè)計(jì)算器連出來(lái)10個(gè)鍵盤,讓10個(gè)人同時(shí)使用,這個(gè)時(shí)候就需要一個(gè)操作系統(tǒng)來(lái)協(xié)調(diào),這么看來(lái)操作系統(tǒng)首先需要一個(gè)調(diào)度器,如上圖,這樣多個(gè)任務(wù)就可以同時(shí)運(yùn)行了,其次還需要對(duì)各個(gè)任務(wù)需要的硬件資源進(jìn)行管理,比如硬盤、內(nèi)存、網(wǎng)卡,另外還需要支持任務(wù)間的通信。如下圖,傳統(tǒng)操作系統(tǒng)的五大模塊:
1. 操作系統(tǒng)分類
操作系統(tǒng)一般可分為三種基本類型,即批處理系統(tǒng)、分時(shí)系統(tǒng)和實(shí)時(shí)系統(tǒng)。另外其他擴(kuò)展的網(wǎng)絡(luò)操作系統(tǒng)、分布式操作系統(tǒng)、嵌入式操作系統(tǒng)等。
1.1批處理操作系統(tǒng)
就是把任務(wù)匯總到一塊,按順序排好,然后讓計(jì)算機(jī)一個(gè)一個(gè)處理,這樣計(jì)算機(jī)一次處理一批任務(wù),空閑的時(shí)間就比較少了。其實(shí)就是把調(diào)度的工作讓人干了,匯總?cè)蝿?wù)是需要人工做的,沒(méi)有調(diào)度這感覺(jué)不是操作系統(tǒng),這現(xiàn)在已經(jīng)不存在了,在計(jì)算機(jī)發(fā)展的早期還有。
1.2分時(shí)操作系統(tǒng)
所謂分時(shí)技術(shù)就是把處理器的運(yùn)行時(shí)間分成很短的時(shí)間片,按時(shí)間片輪流把處理器分配給各聯(lián)機(jī)作業(yè)使用。若某個(gè)作業(yè)在分配給它的時(shí)間片內(nèi)不能完成其計(jì)算,則該作業(yè)暫時(shí)停止運(yùn)行,把處理器讓給其他作業(yè)使用,等待下一輪再繼續(xù)運(yùn)行。由于計(jì)算機(jī)速度很快,作業(yè)運(yùn)行輪轉(zhuǎn)得很快,給每個(gè)用戶的感覺(jué)好像是自己獨(dú)占一臺(tái)計(jì)算機(jī)。例如個(gè)人電腦里面的Windows、Linux,手機(jī)里面的安卓等都是分時(shí)操作系統(tǒng),也是我們說(shuō)的普通操作系統(tǒng)。
1.3實(shí)時(shí)操作系統(tǒng)
實(shí)時(shí)操作系統(tǒng)(RealTimeOperatingSystem,RTOS)是指使計(jì)算機(jī)能及時(shí)響應(yīng)外部事件的請(qǐng)求在規(guī)定的嚴(yán)格時(shí)間內(nèi)完成對(duì)該事件的處理,并控制所有實(shí)時(shí)設(shè)備和實(shí)時(shí)任務(wù)協(xié)調(diào)一致地工作的操作系統(tǒng)。實(shí)時(shí)操作系統(tǒng)從調(diào)度器算法,到中斷響應(yīng)系統(tǒng),到消息傳遞機(jī)制等所有的核心算法時(shí)間復(fù)雜度都是O(1),它表示系統(tǒng)的響應(yīng)速度不依賴于系統(tǒng)任務(wù)的多少,負(fù)載的輕重,而只依賴于優(yōu)先級(jí)的設(shè)計(jì),就算當(dāng)前系統(tǒng)滿負(fù)荷運(yùn)行,優(yōu)先級(jí)高的事件發(fā)生后,系統(tǒng)還將會(huì)在指定的時(shí)間內(nèi)立即響應(yīng)事件。
這里的時(shí)間限制可以分為兩種情況:如果某個(gè)動(dòng)作必須絕對(duì)地在規(guī)定的時(shí)刻(或規(guī)定的時(shí)間范圍)發(fā)生,則稱為硬實(shí)時(shí)系統(tǒng)。例如,飛行器的飛行自動(dòng)控制系統(tǒng),這類系統(tǒng)必須提供絕對(duì)保證,讓某個(gè)特定的動(dòng)作在規(guī)定的時(shí)間內(nèi)完成。如果能夠接受偶爾違反時(shí)間規(guī)定,并且不會(huì)引起任何永久性的損害,則稱為軟實(shí)時(shí)系統(tǒng),如飛機(jī)訂票系統(tǒng)、銀行管理系統(tǒng)。
我們AUTOSAR CP里面的RTOS就需要硬實(shí)時(shí)的操作系統(tǒng)。因?yàn)閷?duì)于汽車的控制是需要及時(shí)的,不然可能造成事故,正所謂:人命關(guān)天。
1.4其他操作系統(tǒng)
隨著計(jì)算機(jī)體系結(jié)構(gòu)的發(fā)展,又出現(xiàn)了許多種操作系統(tǒng),它們是嵌人式操作系統(tǒng)、個(gè)人操作系統(tǒng)、網(wǎng)絡(luò)操作系統(tǒng)和分布式操作系統(tǒng)。
網(wǎng)絡(luò)操作系統(tǒng)把計(jì)算機(jī)網(wǎng)絡(luò)中的各臺(tái)計(jì)算機(jī)有機(jī)地結(jié)合起來(lái),提供一種統(tǒng)一、經(jīng)濟(jì)而有效的使用各臺(tái)計(jì)算機(jī)的方法,實(shí)現(xiàn)各個(gè)計(jì)算機(jī)之間的互相傳送數(shù)據(jù)。
分布式計(jì)算機(jī)系統(tǒng)是由多臺(tái)計(jì)算機(jī)組成并滿足下列條件的系統(tǒng):系統(tǒng)中任意兩臺(tái)計(jì)算機(jī)通過(guò)通信方式交換信息;系統(tǒng)中的每一臺(tái)計(jì)算機(jī)都具有同等的地位,即沒(méi)有主機(jī)也沒(méi)有從機(jī);每臺(tái)計(jì)算機(jī)上的資源為所有用戶共享;系統(tǒng)中的任意若千臺(tái)計(jì)算機(jī)都可以構(gòu)成一個(gè)子系統(tǒng),并且還能重構(gòu);任何工作都可以分布在幾臺(tái)計(jì)算機(jī)上,由它們并行工作、協(xié)同完成。
最后匯總一個(gè)圖:
2.OSEK OS
OSEK OS是一個(gè)為滿足汽車電子可靠性、實(shí)時(shí)性、成本敏感性等需求而打造的實(shí)時(shí)單核操作系統(tǒng)(RTAOS)。具備以下基本特性以及基本系統(tǒng)服務(wù):
AUTOSAR OS是基于OSEK OS繼承發(fā)展而來(lái),所以上述的OSEK OS的基本特點(diǎn)在AUTOSAR OS都能夠得到滿足,所以AUTOSAR OS是向后兼容的,也就意味著在OSEK OS上能夠運(yùn)行的應(yīng)用程序同樣也可以在AUTOSAR OS上運(yùn)行。
AUTOSAR OS繼承OSEK OS,在OSEK OS的基礎(chǔ)上又特別明確了AUTOSAR OS至少需要提供的系統(tǒng)服務(wù)如下:
基于優(yōu)先級(jí)的調(diào)度;
及時(shí)的中斷處理的能力;
中斷優(yōu)先級(jí)必定高于task;
通過(guò)StartOS() 與StartOSHook()來(lái)創(chuàng)建啟動(dòng)接口;
通過(guò)ShutdownOS() 與ShutdownOSHook來(lái)創(chuàng)建關(guān)機(jī)接口;
能夠在OSEK OS中跑的APP自然也能夠在AUTOSAR OS運(yùn)行,但同時(shí)Autosar os也同時(shí)限制了OSEK OS的一些基本使用;
3.AUTOSAROS
3.1 AUTOSAR OS基本對(duì)象
AUTOSAR OS總共包含以下6大基本對(duì)象:Counter,Alarm,Schedule Table,Task,ISRs,Resource。
這6個(gè)基本對(duì)象必須歸屬于一個(gè)OS Application,可以簡(jiǎn)單理解為OS Application是上述6大基本對(duì)象的容器,而歸屬于同一OS Application的基本對(duì)象則可以互相訪問(wèn),來(lái)自其他OSApplication的基本對(duì)象則需要通過(guò)配置來(lái)限制性訪問(wèn)。
3.2 Task
大家在面試的時(shí)候被經(jīng)常問(wèn)到的一個(gè)問(wèn)題就是進(jìn)程和線程的區(qū)別,最典型的回答就是進(jìn)程是系統(tǒng)資源分配的最小單位,比如分配了內(nèi)存地址空間、寄存器、獨(dú)占的虛擬CPU等,線程是CPU調(diào)度的最小單位,線程享用父進(jìn)程的系統(tǒng)資源,但是自己又可以異步的去執(zhí)行。
可惜在RTOS里面由于要求實(shí)時(shí)性,這種異步執(zhí)行需要等待的機(jī)制需要被砍掉,首先沒(méi)有了線程的概念。那么進(jìn)程就是對(duì)應(yīng)RTOS里面的Application,并且這個(gè)Application的資源都是獨(dú)占的,不進(jìn)程一樣跟其他進(jìn)程共享的。例如獨(dú)占一個(gè)真實(shí)的CPU,這里也叫做MCU,因?yàn)樾阅軟](méi)那么強(qiáng)悍,但是很穩(wěn)定。有例如獨(dú)占一塊真實(shí)的內(nèi)存區(qū)域,也就是說(shuō)其資源是啟動(dòng)前就靜態(tài)分配好的,不跟其他Application共享的,這里就是靜態(tài)系統(tǒng)的概念。
而傳統(tǒng)操作系統(tǒng)里面的進(jìn)程就是動(dòng)態(tài)系統(tǒng),動(dòng)態(tài)系統(tǒng)資源共享降低了實(shí)時(shí)性和安全性來(lái)提升資源利用率,在AUTOSAR AP中的微內(nèi)核OS中會(huì)用到,主要支持一些對(duì)安全實(shí)時(shí)性要求不高的應(yīng)用。
接下來(lái)說(shuō)本章節(jié)的TASK,可以理解為一個(gè)for循環(huán),順序一遍一遍的去執(zhí)行的列表中的任務(wù)。這些任務(wù)組成了一個(gè)Application。
AUTOSAR OS中存在兩種任務(wù):
基本任務(wù)(Basic Task)和擴(kuò)展任務(wù)(Extended Task)。
基本任務(wù)則存在以下三種狀態(tài):
運(yùn)行狀態(tài)(Running):處于運(yùn)行狀態(tài)的任務(wù)可能被高優(yōu)先級(jí)任務(wù)或者中斷搶占從而進(jìn)入就緒狀態(tài),且同一Core中任何時(shí)刻只會(huì)存在一個(gè)任務(wù)處于運(yùn)行狀態(tài),任務(wù)運(yùn)行結(jié)束后則將自己掛起進(jìn)入阻塞狀態(tài);
就緒狀態(tài)(Ready):處于就緒狀態(tài)的任務(wù)由調(diào)度器決定是否啟動(dòng)進(jìn)入運(yùn)行狀態(tài),且該狀態(tài)時(shí)任務(wù)切換至運(yùn)行狀態(tài)的前提;
阻塞狀態(tài)(Suspend):處于阻塞狀態(tài)的任務(wù)是被動(dòng)的,可以由API函數(shù)或Alarm激活進(jìn)入就緒狀態(tài);
擴(kuò)展任務(wù)與之相比,則多了一個(gè)等待狀態(tài)(Waiting),解釋如下:
等待狀態(tài)(Waiting):當(dāng)任務(wù)的運(yùn)行需要等待某一或某些事件被置位時(shí),任務(wù)進(jìn)入就緒狀態(tài)。
基本任務(wù)與擴(kuò)展任務(wù)的狀態(tài)機(jī)切換如下圖所示:
基本任務(wù)的代碼示例如下:
擴(kuò)展任務(wù)的代碼示例如下
Task調(diào)度策略
AUTOSAR OS可根據(jù)各個(gè)任務(wù)的可搶占屬性配置,來(lái)提供不同的調(diào)度策略,調(diào)度策略可分為以下三種:
完全搶占式:OS所有任務(wù)均是可搶占類型;
非搶占式:OS中所有任務(wù)均是不可搶占的;
混合搶占式:OS部分任務(wù)是可搶占類型,部分任務(wù)是不可搶占類型;
3.3 Counter
Counter概念的引入是為了實(shí)現(xiàn)對(duì)硬件計(jì)數(shù)器以及軟件計(jì)數(shù)器的管理,為Alarm與Schedule table提供支持。即多個(gè)Alarm可以共用一個(gè)Counter,一個(gè)Schedule Table只能由一個(gè)Counter來(lái)驅(qū)動(dòng)。Counter按照AUTOSAR定義可分為以下兩種:
Hardware Counter:該Counter的增加由硬件外設(shè)驅(qū)動(dòng),如Gpt或者timer等;
Software Counter:該Counter的增加通過(guò)調(diào)用API函數(shù)IncrementCounter來(lái)實(shí)現(xiàn),且每次只能增加1;
基本原則:優(yōu)先使用Hardware Counter,因?yàn)榭梢愿鶕?jù)Task的激活狀況來(lái)減少無(wú)意義的時(shí)鐘中斷;
3.4 Alarm
在計(jì)數(shù)器的基礎(chǔ)上,AUTOSAR OS為應(yīng)用軟件提供了鬧鐘機(jī)制,多個(gè)鬧鐘可以連接一個(gè)Counter,當(dāng)?shù)竭_(dá)Alarm所對(duì)應(yīng)的計(jì)數(shù)器設(shè)定值時(shí),則可以激活一個(gè)任務(wù),設(shè)定一個(gè)event,調(diào)用callback或者增加計(jì)數(shù)器等功能,但只能是一對(duì)一。
不能像Schedule Table那樣,能夠在Expiry point同時(shí)設(shè)定多個(gè)Task或者多個(gè)Event,這也是為什么引入Schedule Table的原因。
一個(gè)軟件Counter +多個(gè)Alarm隊(duì)列就可以實(shí)現(xiàn)靜態(tài)定義的任務(wù)激活機(jī)制。但隨著Schedule Table的引入,因此一般建議能用Schedule Table就不要用Alarm。
3.5 Schedule Table
如上Alarm所述,當(dāng)計(jì)數(shù)器的計(jì)數(shù)值依次達(dá)到各個(gè)Alarm設(shè)定的計(jì)數(shù)值時(shí),各個(gè)Alarm被觸發(fā),但很難保證各個(gè)Alarm有特定的時(shí)間間隔,且每個(gè)Alarm只能激活一個(gè)Task或者Event,所以需要多個(gè)Alarm來(lái)協(xié)作實(shí)現(xiàn)在同一時(shí)刻觸發(fā)多個(gè)Task或者Event,因此ScheduleTable應(yīng)運(yùn)而生!
Schedule Table會(huì)定義一系列終結(jié)點(diǎn)(Expiry Point),且每個(gè)調(diào)度表都有一個(gè)以Tick為單位的持續(xù)時(shí)間(Duration)。每個(gè)終結(jié)點(diǎn)則是以Tick為單位的距離起始點(diǎn)的偏移量(Offset),在每個(gè)終結(jié)點(diǎn)可以實(shí)現(xiàn)多個(gè)Task或者Event的設(shè)置。
與報(bào)警器類似,一個(gè)調(diào)度表只能由一個(gè)Counter驅(qū)動(dòng),同時(shí)調(diào)度表存在以下兩種調(diào)度方式:
單次執(zhí)行(Single-Shot):調(diào)度表啟動(dòng)之后 只運(yùn)行一次,到達(dá)調(diào)度表終點(diǎn)則終止,即每個(gè)終結(jié)點(diǎn)只運(yùn)行一次;
循環(huán)執(zhí)行(Repeating):調(diào)度表啟動(dòng)后可反復(fù)執(zhí)行,到達(dá)調(diào)度表終點(diǎn)后重頭開(kāi)始執(zhí)行,則每個(gè)終結(jié)點(diǎn)會(huì)被周期性的執(zhí)行,一般情況下激活任務(wù)采用此模式。
如下圖10所示,較為清晰了描述了調(diào)度表中Expiry Point與Task,Event激活之間的時(shí)序關(guān)系。
如下圖所示,則較為清晰的表現(xiàn)了Counter,Schedule Table以及Alarm三者之間的關(guān)系。
3.6 ISRs
在AUTOSAR中定義了兩類中斷服務(wù)程序(Interrupt Service Routine)為:
一類中斷(CategoryI)與二類中斷(Category)。
兩者之間的區(qū)別定義如下:
Categoty I:此類中斷服務(wù)程序不能夠使用OS提供的系統(tǒng)服務(wù),當(dāng)中斷執(zhí)行完成之后則會(huì)重新跳轉(zhuǎn)至產(chǎn)生中斷的地方繼續(xù)執(zhí)行,不會(huì)影響到任務(wù)的執(zhí)行,因此占用系統(tǒng)資源較少。
Category II:該類中斷則可以調(diào)用OS系統(tǒng)服務(wù),如激活任務(wù)或者設(shè)置事件等。
在AUTOSAR OS中,中斷的優(yōu)先級(jí)始終高于任務(wù)的優(yōu)先級(jí),即最低優(yōu)先級(jí)的中斷都可以打斷最高優(yōu)先級(jí)的任務(wù),即使該任務(wù)不可搶占也不例外。因此,中斷服務(wù)子程序的執(zhí)行時(shí)間不宜過(guò)長(zhǎng),否則會(huì)影響到整個(gè)系統(tǒng)的實(shí)時(shí)性。
3.7 Resource Management
Resouce作為OS調(diào)度過(guò)程中一個(gè)十分重要的對(duì)象,Resource管理就顯得尤為重要。資源管理就是為了協(xié)調(diào)具有不同優(yōu)先級(jí)的多個(gè)任務(wù)或者中斷對(duì)共享內(nèi)存(如內(nèi)存或者硬件等)的并發(fā)訪問(wèn)。
不過(guò)幸運(yùn)的是AUTOSAR OS采用上述的優(yōu)先級(jí)天花板模式來(lái)避免任務(wù)優(yōu)先級(jí)反轉(zhuǎn)以及死鎖問(wèn)題的發(fā)生,即資源的上限優(yōu)先級(jí)必須高于所有該資源的任務(wù)以及中斷的優(yōu)先級(jí),但是應(yīng)低于不訪問(wèn)該資源的任務(wù)的最低優(yōu)先級(jí)。
其中為了保護(hù)共享資源而提出的鎖機(jī)制-自旋鎖(Spin Lock)。該自旋鎖一般用于多核操作系統(tǒng)解決資源互斥的問(wèn)題。當(dāng)內(nèi)核控制必須訪問(wèn)共享數(shù)據(jù)結(jié)構(gòu)或進(jìn)入臨界區(qū)是,如果自旋鎖已經(jīng)被別的執(zhí)行單元保持,調(diào)用者就一直循環(huán)在那里看是否該自旋所的保持者已經(jīng)釋放了該鎖,從而達(dá)到某共享資源的互斥作用。
4. AS代碼中的RTOS
AS代碼:里面是有RTOS的,是作者自己寫(xiě)的一個(gè)叫做askar,同時(shí)里面還有FreeRTOS等十個(gè)左右的RTOS,下次文章再介紹。
后記:
最比較忙近停更了一段時(shí)間,但是公眾號(hào)的事一直在心里。9月是開(kāi)學(xué)季,也是學(xué)習(xí)的好時(shí)節(jié),接下來(lái)再接再厲,先寫(xiě)一系列OS入門的文章,直接介紹五六種OS的入門資料,絕對(duì)夠猛夠有料,敬請(qǐng)期待。
審核編輯:劉清
-
嵌入式
+關(guān)注
關(guān)注
5087文章
19153瀏覽量
306425 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
6859瀏覽量
123501 -
FreeRTOS
+關(guān)注
關(guān)注
12文章
484瀏覽量
62274
原文標(biāo)題:FreeRTOS入門-概念介紹
文章出處:【微信號(hào):OS與AUTOSAR研究,微信公眾號(hào):OS與AUTOSAR研究】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論