Autosar模块介绍:AutosarOS_2(操作系统基本概念)
上一篇 | 返回主目錄 | 下一篇
 
AutosarOS_2:操作系統基本概念
- 1 任務管理(Task Management)
- 1.1 任務基本概念及分類
- 1.1.1 基礎任務(Basic Task, BT)
- 1.1.2 擴展任務(Extended Task, ET)
 
- 1.2 系統定時器(System Ticks)
- 1.2.1 硬件定時器(Hardware Counts)
- 1.2.1 軟件定時器(Software Counts)
 
- 1.3 鬧鐘與事件(Event And Alarm)
- 1.3.1 鬧鐘(Alarm)
- 1.3.2 事件(Event)
 
- 1.4 調度表(Schedule Table)
- 1.6 優先級(Task Priority)
- 1.7 任務調度策略(Scheduling policy)
- 1.7.1 完全搶占式調度
- 1.7.2 非搶占式調度
- 1.7.3 混合搶占式調度
 
 
- 2 中斷(Interrupt)
- 2.1 一類中斷(Category 1)
- 2.2 二類中斷(Category 2)
- 2.3 中斷禁用
 
- 3 優先級(Priority)
1 任務管理(Task Management)
1.1 任務基本概念及分類
任務作為系統調度的基礎(OS調度以任務(Task)為單位)、功能/動作執行的載體(實現過程中作為執行實體(Runnable)),按調度方式可以分為周期任務(Periodic Task)、初始化任務(Init Task)、事件任務(Event Task)等
任務只是作為功能執行過程的載體,并沒有嚴格定義,存在其他理解也并不能認為錯誤
 #1、周期任務(Periodic Task):按照設定好的固定事件間隔進行任務調度
 #2、初始化任務(Init Task):上電后在進行周期任務調度之前,只執行一次的任務
 #3、事件任務(Event Task):通過事件設置觸發而執行任務
根據不同的軟硬件需求,定義了四種符合類(Conformance Class, CC)(如下表),四種符合類之間兼容性如下圖。
| 多次任務激活請求 | No | Yes | No | Yes(BT),No(ET) | 
| 每個任務優先級存在的任務個數 | 1 | ≥1 | 1 | ≥1 | 
| 基本任務 | Yes | Yes | Yes | Yes | 
| 擴展任務 | No | No | Yes | Yes | 
##符合類(Conformance Class, CC)與基礎任務/擴展任務概念之間相互相對獨立(切忌混淆理解)
 ##詳細描述見OSEK標準(此處只對部分特性進行了描述):ISO17356_Part3_OSEK-VDX Operating System (OS).pdf
1.1.1 基礎任務(Basic Task, BT)
基礎任務存在三種狀態:準備(Ready)、運行(Running)、掛起(Suspend)。與擴展任務顯著區別是不能進入阻塞狀態,也就是不能等待OS的事件,并且在執行完成后會釋放所占用的資源。基本過程為:Suspend-> Ready-> Running-> Suspend(循環)
##相對于擴展任務優勢:對于運行時上下文(RAM)的適度需求
1)、生成的代碼格式:
TASK(BasicTask) {.../*User Code*/...TerminateTask(); }2)、調度方式:
1.1.2 擴展任務(Extended Task, ET)
擴展任務存在四種狀態:準備(Ready)、運行(Running)、掛起(Suspend)、等待(Waiting)。與基礎任務顯著區別是可以進入阻塞狀態,也就是可以等待OS的事件,并且一般不會回到掛起狀態。基本過程為:Suspend-> Ready-> Running-> waiting-> Ready (循環)
## 包含多個同步點,沒有同步請求的麻煩,當進一步的工作出現信息缺失時,任務切換至等待狀態。
1)、生成的代碼格式:
TASK(xxxx) {EventMaskType ev;for(;;){(void)WaitEvent(xxxx|xxxx); /* PRQA S 3417 */ /* MD_Rte_Os */(void)GetEvent(xxxx, &ev); /* PRQA S 3417 */ /* MD_Rte_Os */ (void)ClearEvent(ev & (xxxx|xxxx);If((ev&xxxx) != (EventMaskType)0) { Runnable0;} }2)、調度方式:
1.2 系統定時器(System Ticks)
系統定時器(OS Counters)作為軟件任務(Task)的基礎(或者說類似于心臟對于人體的作用),由此觸發可以進行任務的周期調度、事件觸發等等
1.2.1 硬件定時器(Hardware Counts)
由硬件(如定時器)驅動的計數器,該計數值由外圍設備“硬件”處理。一般通過高精度的硬件定時器作為系統的驅動定時器(但是一般該定時器的中斷優先級不會設置的特別高,因為其驅動的Task的優先級低于中斷優先級)。
1.2.1 軟件定時器(Software Counts)
通過調用OS API(IncrementCounter)實現遞增的計數器,計數值由操作系統維護“軟件”。
1.3 鬧鐘與事件(Event And Alarm)
1.3.1 鬧鐘(Alarm)
鬧鐘(Alarm)本質就是一個定時器,在到達設定的時間點時,就可以進行相應的操作(如設置事件、觸發任務、進入回調等)。
#Alarm與事件、Task、回調函數等均只能是一對一關系,此處區別于調度表
1.3.2 事件(Event)
事件是由操作系統管理的對象。事件機制只提供給拓展任務(ET),是任務狀態切換的一種機制(等待狀態(Waiting)與就緒狀態(Ready)、運行狀態(Running)),是一種同步的方法。
##此概念與擴展任務(ET)相關,在進入擴展任務后,擴展任務就不會再次退出,功能的執行通過設置事件進行調用(此處可參考擴展任務章節內容)。
1.4 調度表(Schedule Table)
鬧鐘(Alarm)觸發方式只能存在一對一,因此引入了調度表的概念。調度表通過在一段時間內設置多個觸發點(Expiry Point),然后在每個觸發點可以設置多個事件、任務等避免了鬧鐘(Alarm)的缺點(因此可用于核間任務同步)。
調度表存在三個基本參數:持續時間(Duration)、觸發點(Expiry Point)、偏移量(Offset),觸發點通過設置相對于開始點的偏移量得到,調度表可以通過設計持續時間指定結束時間。
# 調度表的調用存在兩種模式:單次調用、重復調用(循環調用)
1.6 優先級(Task Priority)
任務優先級(優先級)決定下一個準備就緒的任務將被轉移到運行狀態。為了提高效率,不支持動態優先級管理。因此,任務的優先級是靜態定義的,即用戶在執行時不能更改它。
處理步驟:
 1)、調度程序搜索處于就緒/運行狀態的所有任務
 2)、從處于就緒/運行狀態的任務集中,調度程序確定具有最高優先級的任務集
 3)、在處于就緒/運行狀態且優先級最高的任務集中,調度器找到最老的任務
#優先級處理原則:
 1)、相同優先級的任務根據激活順序啟動,處于等待狀態的擴展任務不會阻塞相同優先級的后續任務的啟動
 2)、被搶占的任務被認為是其當前優先級的就緒列表中的第一個(最老的)任務
 3)、從等待狀態釋放的任務被視為其優先級的就緒隊列中的最后(最新)任務
##特定情況下會修改任務執行的優先級
1.7 任務調度策略(Scheduling policy)
可搶占性(Preempt)用于描述任務執行過程中是否可以被優先級更高的任務打斷,將任務劃分為可搶占任務(Preemptive Task)、不可搶占任務(Non-preemptive Task),由此引申出幾種調度方式:搶占方式調度(Preemptive Schedule)、非搶占方式調度(Non-preemptive Schedule,也被稱作協作調度)、混合搶占式調度(Mixed preemptive scheduling)。
1.7.1 完全搶占式調度
當一個高優先級的任務準備就緒時,全搶占調度將使正在運行的任務進入就緒狀態。保存任務上下文,以便被搶占的任務可以在被搶占的位置繼續執行。
#具有以下特點:
 1)、在完全搶占式調度中,延遲時間與低優先級任務的運行時間無關
 2)、某些限制與保存上下文所需的(RAM-)內存空間的增加以及任務之間同步所需特性的復雜性的增強
 3)、理論上每個任務都可以在任何位置重新調度,因此對與其他任務聯合使用的數據的訪問必須同步
1.7.2 非搶占式調度
非搶占式調度對任務可能的時間要求施加了特定的約束。特別是正在運行的低優先級任務的不可搶占部分會將高優先級任務的啟動延遲到下一個重新調度點。
#高優先級任務在與低優先級任務調度存在沖突時,高優先級任務也可能因此造成較大延時
1.7.3 混合搶占式調度
可搶占任務和不可搶占任務在同一個系統上混合使用,那么得到的策略稱為“混合搶占”調度。在這種情況下,調度策略取決于正在運行的任務的搶占屬性。如果正在運行的任務是不可搶占的,則執行非搶占調度。如果正在運行的任務是可搶占的,則執行搶占調度。
2 中斷(Interrupt)
在整個系統中Task的優先級最低,對于時間保護類中斷以及Category 0通常以錯誤勾子函數(ErrorHoook)形式處理,用戶可以操作的兩種中斷類型為:一類中斷、二類中斷,除此之外提供了可以禁用兩類中斷的接口函數(可通過禁用中斷防止執行過程被打斷,常被用于資源保護等場景)。
2.1 一類中斷(Category 1)
此類中斷服務程序不能夠使用OS提供的系統服務,當中斷執行完成之后則會重新跳轉至產生中斷的地方繼續執行,不會影響到任務的執行,因此占用系統資源較少。且不支持中斷的嵌套,但是支持內聯匯編的方式實現嵌套
2.2 二類中斷(Category 2)
該類中斷則可以調用部分OS系統服務,如激活任務或者設置事件等(如但是TerminateTask等就不被允許)。除此之外它支持中斷的嵌套。
##如圖二類中斷可調用OS資源,在中斷內激活優先級高于TaskA的任務TaskB,則在執行完TaskB后進行返回TaskA繼續執行;或者執行完直接返回TaskA中斷位置繼續執行
2.3 中斷禁用
EnableAllInterrupts/ DisableAllInterrupts:禁止所有中斷(包括1類和2類中斷)
 1)、典型用法是保護短的臨界段
 2)、不允許從這樣的保護臨界段內的中斷返回,即禁用與啟用配套使用
 SuspendAllInterrupts/ ResumeOSInterrupts:掛起所有中斷(包括1類和2類中斷)
 SuspendOSInterrupts / ResumeOSInterrupts:掛起2類中斷
3 優先級(Priority)
優先級用于處理并發任務、中斷以等的執行先后順序問題,高優先級任務、中斷可打斷低優先級相關執行,通過此方式可保障及時處理更為重要的內容。具體中斷、任務的優先級如下圖所示,在相關分類下可再設置優先級以保障內部的處理順序。
上一篇 | 返回主目錄 | 下一篇
總結
以上是生活随笔為你收集整理的Autosar模块介绍:AutosarOS_2(操作系统基本概念)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 如梦令·海棠花溪
- 下一篇: SpringMVC执行流程【简单理解举例
