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

TWL6030氣體監(jiān)測基礎(chǔ)知識

Verilog HDL的基礎(chǔ)知識

負(fù)載開關(guān)基礎(chǔ)知識

全新的半導(dǎo)體基礎(chǔ)知識

評論