0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

詳解AUTOSAR-OS的調(diào)度機(jī)制

832065824 ? 來源:CSDN-梅爾文.古 ? 2023-11-16 16:43 ? 次閱讀

1. 什么是調(diào)度表

1.1 調(diào)度表概念

調(diào)度表由一系列按時(shí)間先后順序排序的終結(jié)點(diǎn)組成,其中每個(gè)終結(jié)點(diǎn)都有自己的任務(wù),有的終結(jié)點(diǎn)可能是激活一系列的任務(wù),有的是設(shè)置一系列的事件,還有的可能是既激活一系列的任務(wù)又設(shè)置一系列的事件。

5d14527e-8458-11ee-939d-92fbcf53809c.png

調(diào)度表(ScheduleTables) 通過提供一組靜態(tài)定義的到期點(diǎn)(expiry points)的封裝來解決同步問題。每個(gè)到期點(diǎn)定義:

處理時(shí)必須發(fā)生的一個(gè)或多個(gè)動(dòng)作,其中動(dòng)作是任務(wù)(Task)的激活或事件(event)的設(shè)置。

從調(diào)度表(ScheduleTable)開始點(diǎn)一個(gè)以滴答(Tick)為單位的偏移量(Offset)。

終結(jié)點(diǎn)在調(diào)度表上是按偏移從小到大有序排列的,因此要保證每個(gè)終結(jié)點(diǎn)的偏移都是獨(dú)一無二的,不能有偏移相同的終結(jié)點(diǎn)。

5d2df3dc-8458-11ee-939d-92fbcf53809c.png

每個(gè)調(diào)度表都有一個(gè)持續(xù)時(shí)間(Duration),即調(diào)度表的一次運(yùn)行時(shí)間,度量單位為計(jì)數(shù)器的計(jì)數(shù)單位 Tick

5d42debe-8458-11ee-939d-92fbcf53809c.png

從調(diào)度表的起點(diǎn)到初始終結(jié)點(diǎn)的距離被稱為初始偏移(InitialOffset),相鄰終結(jié)點(diǎn)間的距離被稱為延遲(Delay),最后一個(gè)終結(jié)點(diǎn)到調(diào)度表終點(diǎn)的距離稱之為最后延遲(FinalDelay)。

InitialOffset,DelayFinalDelay的取值范圍如公式3—1,3—2,3-3所示,其中OsCounterMinCycle是驅(qū)動(dòng)計(jì)數(shù)器的最小循環(huán)值,OsCounterMaxAIIowedValue是驅(qū)動(dòng)計(jì)數(shù)器的最大計(jì)數(shù)值。

5d529dfe-8458-11ee-939d-92fbcf53809c.png

5d692646-8458-11ee-939d-92fbcf53809c.png

除此之外,還要區(qū)分清楚幾個(gè)概念:

驅(qū)動(dòng)計(jì)數(shù)器:驅(qū)動(dòng)計(jì)數(shù)器是用于驅(qū)動(dòng)整個(gè)調(diào)度表運(yùn)行的計(jì)數(shù)器,驅(qū)動(dòng)計(jì)數(shù)器的計(jì)數(shù)周期通常是固定的,并且要大于調(diào)度表中所有任務(wù)的最小執(zhí)行間隔時(shí)間,以確保每個(gè)任務(wù)都能夠被執(zhí)行到。驅(qū)動(dòng)計(jì)數(shù)器用于控制任務(wù)執(zhí)行的時(shí)間。

驅(qū)動(dòng)計(jì)數(shù)器模數(shù):就是驅(qū)動(dòng)計(jì)數(shù)器的最大值,也就是一份調(diào)度表運(yùn)行完,需要多少個(gè)counter。驅(qū)動(dòng)計(jì)數(shù)器的模數(shù)被定義為OsCounterMaxAllowedValue + 1;

驅(qū)動(dòng)計(jì)數(shù)器的模數(shù)通常不等于調(diào)度表的duration,而是大于調(diào)度表的duration。在實(shí)際的調(diào)度系統(tǒng)中,通常會(huì)將驅(qū)動(dòng)計(jì)數(shù)器的模數(shù)設(shè)置為調(diào)度表的duration的整數(shù)倍,以確保調(diào)度表中的所有任務(wù)都能夠被完全執(zhí)行。例如,如果調(diào)度表的duration為10ms,那么可以將驅(qū)動(dòng)計(jì)數(shù)器的模數(shù)設(shè)置為20ms或者30ms等,以確保每個(gè)任務(wù)都能夠被執(zhí)行到。

調(diào)度表的時(shí)間:調(diào)度表的持續(xù)時(shí)間通常是預(yù)先定義的,用于確定調(diào)度表中所有任務(wù)的執(zhí)行時(shí)間范圍。

驅(qū)動(dòng)計(jì)數(shù)器與調(diào)度表持續(xù)時(shí)間關(guān)系:驅(qū)動(dòng)計(jì)數(shù)器與調(diào)度表時(shí)間相等嗎通常情況下,驅(qū)動(dòng)計(jì)數(shù)器的計(jì)數(shù)周期不等于調(diào)度表的時(shí)間。驅(qū)動(dòng)計(jì)數(shù)器是用于驅(qū)動(dòng)整個(gè)調(diào)度表運(yùn)行的計(jì)數(shù)器,它的計(jì)數(shù)周期通常是固定的,并且要大于調(diào)度表的時(shí)間,以確保調(diào)度表中的所有任務(wù)都能夠被執(zhí)行到。

例如:驅(qū)動(dòng)計(jì)數(shù)器的計(jì)數(shù)周期為1,即每個(gè)計(jì)數(shù)周期的時(shí)間為1個(gè)單位。調(diào)度表中有3個(gè)任務(wù),分別為Task A、Task B和Task C,它們的執(zhí)行時(shí)間分別為3、5和2個(gè)計(jì)數(shù)周期。

注意:Task A在第一個(gè)周期中執(zhí)行時(shí)間為3個(gè)計(jì)數(shù)周期,在第二個(gè)周期中執(zhí)行時(shí)間為4個(gè)計(jì)數(shù)周期,在第三個(gè)周期中執(zhí)行時(shí)間為2個(gè)計(jì)數(shù)周期,在第四個(gè)周期中執(zhí)行時(shí)間為3個(gè)計(jì)數(shù)周期,在第五個(gè)周期中執(zhí)行時(shí)間為5個(gè)計(jì)數(shù)周期。在調(diào)度表中,每個(gè)任務(wù)的執(zhí)行時(shí)間和間隔時(shí)間是預(yù)先定義的。Task A的間隔時(shí)間是指Task A完成一次執(zhí)行后需要等待的時(shí)間,在實(shí)際的調(diào)度系統(tǒng)中,任務(wù)的間隔時(shí)間可能會(huì)受到多種因素的影響,例如任務(wù)的優(yōu)先級(jí)、資源的競爭等。在設(shè)計(jì)和實(shí)現(xiàn)調(diào)度系統(tǒng)時(shí),需要根據(jù)具體的應(yīng)用場景和需求進(jìn)行合理的設(shè)計(jì)和實(shí)現(xiàn)。

5d7f54d4-8458-11ee-939d-92fbcf53809c.png

同步計(jì)數(shù)器:同步計(jì)數(shù)器是一個(gè)軟件計(jì)數(shù)器,用于同步任務(wù)的執(zhí)行。顯示同步中同步計(jì)數(shù)器等于驅(qū)動(dòng)計(jì)數(shù)器,當(dāng)驅(qū)動(dòng)計(jì)數(shù)器的計(jì)數(shù)值等于同步計(jì)數(shù)器的計(jì)數(shù)值時(shí),任務(wù)調(diào)度器會(huì)檢查任務(wù)隊(duì)列中是否有需要執(zhí)行的任務(wù)。如果有,則執(zhí)行該任務(wù),否則繼續(xù)等待下一個(gè)同步計(jì)數(shù)器的計(jì)數(shù)周期。這樣,就可以實(shí)現(xiàn)任務(wù)的精確調(diào)度和同步,從而保證系統(tǒng)的穩(wěn)定性和可靠性。

操作系統(tǒng)計(jì)數(shù)器:操作系統(tǒng)計(jì)數(shù)器通常由操作系統(tǒng)內(nèi)核實(shí)現(xiàn),用于記錄系統(tǒng)運(yùn)行時(shí)間和控制系統(tǒng)中各個(gè)模塊和任務(wù)的執(zhí)行時(shí)間和間隔時(shí)間。每個(gè)OS Counter都有一個(gè)最大計(jì)數(shù)值(OsCounterMaxAllowedValue),它表示OS Counter的最大計(jì)數(shù)范圍。同時(shí),每個(gè)OS Counter還有一個(gè)最小計(jì)數(shù)值(OsCounterMinCycle),它表示OS Counter的最小計(jì)數(shù)周期。OS Counter的最大計(jì)數(shù)值和最小計(jì)數(shù)周期可以用來確定驅(qū)動(dòng)計(jì)數(shù)器的模數(shù)和調(diào)度表的持續(xù)時(shí)間。具體來說,驅(qū)動(dòng)計(jì)數(shù)器的模數(shù)應(yīng)該等于OS Counter的最大計(jì)數(shù)值+1,而調(diào)度表的持續(xù)時(shí)間應(yīng)該等于OS Counter的最大計(jì)數(shù)值+1乘以O(shè)S Counter的最小計(jì)數(shù)周期。

5d9ff310-8458-11ee-939d-92fbcf53809c.png

1.2調(diào)度表圖示

其實(shí)調(diào)度表就是一份計(jì)劃表,類似于工作計(jì)劃,例如下圖:

5d14527e-8458-11ee-939d-92fbcf53809c.png

假如tick是1ms,那么上面的調(diào)度表就是50ms要做的事情,做什么事情呢?

4ms要激活TaskA和TaskB,并設(shè)置一些Event

12ms不激活task,但是要設(shè)置Enent

20ms需要激活TaskA和TaskE

32ms需要激活TaskA和TaskE,并設(shè)置Event

40ms需要激活TaskB和TaskF,并設(shè)置Event

offset就是每個(gè)時(shí)間節(jié)點(diǎn)都有一個(gè)相對(duì)于調(diào)度表起始點(diǎn)的偏移值

2. 為什么要用調(diào)度表

調(diào)度表,可以用OS Alarm、OS Counter來實(shí)現(xiàn),相當(dāng)于到時(shí)間了就去激活task、設(shè)置Event,那么為什么要搞一個(gè)調(diào)度表的概念呢?

因?yàn)橐?/strong>:使在OSEK OS中,可以利用一個(gè)OSEK計(jì)數(shù)器和一組附屬于該計(jì)數(shù)器的自啟動(dòng)報(bào)警器來實(shí)現(xiàn)靜態(tài)定義的任務(wù)激活機(jī)制。在簡單情況下,可以通過設(shè)置報(bào)警器一旦啟動(dòng)就不能更改來實(shí)現(xiàn)。然而,如果在運(yùn)行時(shí)對(duì)某個(gè)報(bào)警器進(jìn)行修改,就很難保證報(bào)警器之間的相對(duì)同步。為此,AUTOSAR OS規(guī)范引入了調(diào)度表(ScheduleTable,ST)。

5dc22c32-8458-11ee-939d-92fbcf53809c.png

在AUTOSAR中,調(diào)度表是用于描述任務(wù)的執(zhí)行順序和時(shí)間間隔的一種數(shù)據(jù)結(jié)構(gòu)。Alarm是一種定時(shí)器,用于在指定的時(shí)間點(diǎn)或時(shí)間間隔觸發(fā)事件。當(dāng)Alarm與調(diào)度表結(jié)合使用時(shí),調(diào)度表可以保障Alarm的同步。

3. 調(diào)度表是如何用的

3.1.操作系統(tǒng)允許并發(fā)處理多個(gè)調(diào)度表

一個(gè)調(diào)度表只能被一個(gè)計(jì)數(shù)器驅(qū)動(dòng),而一個(gè)計(jì)數(shù)器能驅(qū)動(dòng)多個(gè)調(diào)度表

驅(qū)動(dòng)計(jì)數(shù)器的一個(gè)Tick與調(diào)度表的一個(gè)Tick的分辨率一致;操作系統(tǒng)使用一個(gè)迭代器遍歷調(diào)度表上的所有終結(jié)點(diǎn),按照offset的大小從初始終結(jié)點(diǎn)(InitialExpiryPoint)開始遍歷,直到最后一個(gè)終結(jié)點(diǎn)IFinaIExpiryPoint)為止。在處理終結(jié)點(diǎn)上的操作時(shí),操作系統(tǒng)必須先激活完所有的任務(wù)后,才能設(shè)置事件。由于在一個(gè)終結(jié)點(diǎn)上很有可能對(duì)一個(gè)任務(wù)同時(shí)進(jìn)行激活和設(shè)置事件的操作,如果先激活一個(gè)處于掛起態(tài)的任務(wù),再對(duì)它設(shè)置事件,操作會(huì)成功執(zhí)行,而如果順序相反則會(huì)導(dǎo)致操作失敗。因此,操作系統(tǒng)對(duì)終結(jié)點(diǎn)上操作的處理順序進(jìn)行了嚴(yán)格的限制。

3.2. 調(diào)度表根據(jù)具體需求可配置為單次執(zhí)行或重復(fù)執(zhí)行

單次執(zhí)行是調(diào)度表處理完最后一個(gè)終結(jié)點(diǎn)后進(jìn)入停止?fàn)顟B(tài),不再繼續(xù)執(zhí)行,主要用于對(duì)某個(gè)觸發(fā)進(jìn)行響應(yīng):循環(huán)執(zhí)行是調(diào)度表處理完最后一個(gè)終結(jié)點(diǎn)后再返回到第一個(gè)終結(jié)點(diǎn),繼續(xù)執(zhí)行,主要用于執(zhí)行重復(fù)操作的特定應(yīng)用。

重復(fù)執(zhí)行,由于調(diào)度表的持續(xù)時(shí)間不一定等于驅(qū)動(dòng)計(jì)數(shù)器的模數(shù),因此不能保證同一個(gè)終結(jié)點(diǎn)在不同次執(zhí)行時(shí)都在同一個(gè)絕對(duì)計(jì)數(shù)值上執(zhí)行,而在某些情況下這是必需的,例如校正發(fā)動(dòng)機(jī)的角旋轉(zhuǎn)度數(shù),故需要同步機(jī)制來解決。

一個(gè)未使用同步策略的調(diào)度表在任意時(shí)刻總是處于下述三個(gè)狀態(tài)中的一個(gè),詳細(xì)的狀態(tài)轉(zhuǎn)換模型如下圖所示。在任何時(shí)刻,都可以使用系統(tǒng)服務(wù)GetScheduleTableStatus0來獲取調(diào)度表的狀態(tài)。對(duì)于未使用同步策略的調(diào)度表來說,調(diào)度表的持續(xù)時(shí)間和驅(qū)動(dòng)計(jì)數(shù)器的模數(shù)沒有潛在的關(guān)聯(lián),但各終結(jié)點(diǎn)的偏移和延遲需要按照公式3-1、3-2、3-3設(shè)置。

5dd829b0-8458-11ee-939d-92fbcf53809c.png

5de996c8-8458-11ee-939d-92fbcf53809c.png

3.3. 調(diào)度表有兩種類型的啟動(dòng)方式

絕對(duì)啟動(dòng) StartScheduleTableAbs()和相對(duì)啟動(dòng)StartScheduleTableRel0。調(diào)度表在被啟動(dòng)后,將進(jìn)入運(yùn)行態(tài)。

絕對(duì)啟動(dòng)是提供一個(gè)啟動(dòng)值(Start),當(dāng)驅(qū)動(dòng)計(jì)數(shù)器的計(jì)數(shù)值與Start匹配時(shí),操作系統(tǒng)將啟動(dòng)調(diào)度表,該調(diào)度表的第一個(gè)終結(jié)點(diǎn)將在驅(qū)動(dòng)計(jì)數(shù)器的計(jì)數(shù)值等于(Start+Initial Offset)時(shí)被處理。

5e09ef18-8458-11ee-939d-92fbcf53809c.png

5e1d6ac0-8458-11ee-939d-92fbcf53809c.png

5e302a7a-8458-11ee-939d-92fbcf53809c.png

相對(duì)啟動(dòng)是提供一個(gè)偏移(Offset),當(dāng)驅(qū)動(dòng)計(jì)數(shù)器的計(jì)數(shù)值相對(duì)于現(xiàn)在(Now)增加了Offset個(gè)Tick后,操作系統(tǒng)將啟動(dòng)調(diào)度表,該調(diào)度表上的第一個(gè)終結(jié)點(diǎn)將在驅(qū)動(dòng)計(jì)數(shù)器的計(jì)數(shù)值與(Now +Offset+lnitial Offset)匹配時(shí)會(huì)被處理。

5e461cb8-8458-11ee-939d-92fbcf53809c.png

5e571c20-8458-11ee-939d-92fbcf53809c.png

用戶能在任意時(shí)刻調(diào)用系統(tǒng)服務(wù)StopScheduleTable()立即終止一個(gè)正在處于運(yùn)行態(tài)的調(diào)度表,被終止后,調(diào)度表將進(jìn)入停止態(tài)。無論調(diào)度表被終止時(shí)處理到了哪個(gè)終結(jié)點(diǎn),下次啟動(dòng)時(shí)都將會(huì)從第一個(gè)終結(jié)點(diǎn)開始處理。此外,調(diào)度表在正常運(yùn)行結(jié)束后,也會(huì)進(jìn)入停止態(tài)。

當(dāng)用戶調(diào)用NextScheduleTable0發(fā)出切換調(diào)度表的請(qǐng)求時(shí),操作系統(tǒng)將繼續(xù)處理當(dāng)前調(diào)度表,把被切換入的調(diào)度表的狀態(tài)修改為下一個(gè),直至處理完當(dāng)前調(diào)度表的最后一個(gè)終結(jié)點(diǎn)后,才會(huì)去啟動(dòng)被切換入的調(diào)度表。

4. 調(diào)度表的同步

處理調(diào)度表上的初始終結(jié)點(diǎn)的絕對(duì)時(shí)間是用戶可控的。然后,如果調(diào)度表的運(yùn)行模式是重復(fù)執(zhí)行,將不能保證每次執(zhí)行初始終結(jié)點(diǎn)的時(shí)間是一樣的。

5e7247c0-8458-11ee-939d-92fbcf53809c.png

該問題的產(chǎn)生,可能是由于調(diào)度表的持續(xù)時(shí)間不一定等于驅(qū)動(dòng)計(jì)數(shù)器的模數(shù)導(dǎo)致的。

5e8584de-8458-11ee-939d-92fbcf53809c.png

舉例:注:驅(qū)動(dòng)計(jì)數(shù)器通常是用于驅(qū)動(dòng)整個(gè)調(diào)度表的計(jì)數(shù)器。它的作用是根據(jù)預(yù)定的時(shí)間間隔來觸發(fā)調(diào)度表中各個(gè)任務(wù)的執(zhí)行,從而實(shí)現(xiàn)任務(wù)的協(xié)調(diào)和調(diào)度。

假設(shè)調(diào)度表中有三個(gè)任務(wù),任務(wù)A、任務(wù)B和任務(wù)C,它們的執(zhí)行時(shí)間分別為2秒、3秒和4秒,也就是如果想要完整的執(zhí)行三個(gè)任務(wù)需要9秒的時(shí)間。然而驅(qū)動(dòng)計(jì)數(shù)器的模數(shù)為5秒,即當(dāng)計(jì)數(shù)器達(dá)到5秒時(shí)會(huì)重新從0開始計(jì)數(shù)。也就是說任務(wù)C一直處于不執(zhí)行的狀態(tài)。

5ea1ce1e-8458-11ee-939d-92fbcf53809c.png

5. AUTOSAR 操作系統(tǒng)規(guī)范提供了 2 種同步方式

隱式同步

5eb31214-8458-11ee-939d-92fbcf53809c.png

在隱式同步的情況下,調(diào)度表的更新和OS模塊的調(diào)度是隱式地同步的。即當(dāng)調(diào)度表中的任務(wù)時(shí)間到達(dá)時(shí),OS模塊不會(huì)立即調(diào)度該任務(wù),而是等待下一個(gè)系統(tǒng)節(jié)拍時(shí)再調(diào)度該任務(wù)。因此,在隱式同步的情況下,任務(wù)的執(zhí)行時(shí)間可能存在一定的誤差,并且無法保證任務(wù)的正確執(zhí)行順序和時(shí)間間隔。

對(duì)于隱式同步而言,調(diào)度表的驅(qū)動(dòng)計(jì)數(shù)器就是同步計(jì)數(shù)器,即調(diào)度表上的時(shí)間和驅(qū)動(dòng)計(jì)數(shù)器上的時(shí)間保持一致

5ec7f06c-8458-11ee-939d-92fbcf53809c.png

隱式同步的調(diào)度表不需要操作系統(tǒng)的額外支持,但為了使調(diào)度表上的時(shí)間和驅(qū)動(dòng)計(jì)數(shù)器的計(jì)數(shù)值一致,做了一些限制:調(diào)度表的持續(xù)時(shí)間必須等于驅(qū)動(dòng)計(jì)數(shù)器的模數(shù)。如公式3-4所示:

也就是隱式同步的操作系統(tǒng)模塊的調(diào)度表(ScheduleTable)(每個(gè)調(diào)度表都有一個(gè)持續(xù)時(shí)間(Duration))應(yīng)具有等于其關(guān)聯(lián) OSEK OS 計(jì)數(shù)器的 OsCounterMaxAllowedValue + 1 的持續(xù)時(shí)間。

注意:驅(qū)動(dòng)計(jì)數(shù)器的模數(shù)被定義為OsCounterMaxAllowedValue + 1。其中,OsCounterMaxAllowedValue是一個(gè)常數(shù),表示驅(qū)動(dòng)計(jì)數(shù)器的最大計(jì)數(shù)值。而+1是因?yàn)橛?jì)數(shù)器從0開始計(jì)數(shù),因此最大計(jì)數(shù)值需要加上1才能得到模數(shù)。

5efa31bc-8458-11ee-939d-92fbcf53809c.png

5f094030-8458-11ee-939d-92fbcf53809c.png

為了使調(diào)度表達(dá)到同步,操作系統(tǒng)需要在一個(gè)己知的計(jì)數(shù)值啟動(dòng)調(diào)度表,這意味著調(diào)度表使用隱式同步策略時(shí),只能使用絕對(duì)啟動(dòng),不能使用相對(duì)啟動(dòng)。在調(diào)度表被絕對(duì)啟動(dòng)后,若終結(jié)點(diǎn)的偏移與驅(qū)動(dòng)計(jì)數(shù)器的計(jì)數(shù)值匹配時(shí),該終結(jié)點(diǎn)將會(huì)被處理。為了保證調(diào)度表和驅(qū)動(dòng)計(jì)數(shù)器同步,通常的做法是在驅(qū)動(dòng)計(jì)數(shù)器的計(jì)數(shù)值為0時(shí)啟動(dòng)調(diào)度表,即使用StartScheduleTableAbs(Tbl,0),如圖所示:StartScheduleTableAbs(Tbl,0)是一個(gè)API函數(shù),用絕對(duì)啟動(dòng)啟動(dòng)一個(gè)調(diào)度表,并將其絕對(duì)時(shí)間點(diǎn)設(shè)置為0。它的作用是將調(diào)度表的執(zhí)行時(shí)間點(diǎn)設(shè)置為系統(tǒng)啟動(dòng)的時(shí)間點(diǎn),從而讓調(diào)度表從頭開始執(zhí)行。

其實(shí)說白了隱式同步就是在running和SYNC開始的節(jié)點(diǎn),用絕對(duì)啟動(dòng)StartScheduleTableAbs(Tbl,0)使調(diào)度表 OS Counter的計(jì)數(shù)周期應(yīng)該等于任務(wù)調(diào)度表的持續(xù)時(shí)間。讓兩者運(yùn)行一致。從而實(shí)現(xiàn)調(diào)度表的周期性執(zhí)行。

5f1f4650-8458-11ee-939d-92fbcf53809c.png

顯示同步

在顯示同步的情況下,調(diào)度表的更新和OS模塊的調(diào)度是顯式地同步的。即當(dāng)調(diào)度表中的任務(wù)時(shí)間到達(dá)時(shí),OS模塊會(huì)立即調(diào)度該任務(wù),并執(zhí)行該任務(wù)的任務(wù)函數(shù)。因此,在顯示同步的情況下,任務(wù)的執(zhí)行時(shí)間是準(zhǔn)確的,并且可以保證任務(wù)的正確執(zhí)行順序和時(shí)間間隔。

顯式同步是指調(diào)度表的驅(qū)動(dòng)計(jì)數(shù)器和同步計(jì)數(shù)器不是同一個(gè)計(jì)數(shù)器,但是這 2 個(gè)計(jì)數(shù)器 tick 的周期是一樣的。

5f364882-8458-11ee-939d-92fbcf53809c.png

顯式同步的調(diào)度表(ScheduleTable)需要操作系統(tǒng)模塊的額外支持。調(diào)度表(ScheduleTable)正常情況下,由操作系統(tǒng)模塊的計(jì)數(shù)器驅(qū)動(dòng),被稱為驅(qū)動(dòng)計(jì)數(shù)器(drive Counter)。但處理過程需要與不屬于操作系統(tǒng)模塊的計(jì)數(shù)器對(duì)象的另一種計(jì)數(shù)器進(jìn)行同步,此類進(jìn)行同步的計(jì)數(shù)器被稱為同步計(jì)數(shù)器(synchronization Counter)。

在調(diào)度表(ScheduleTable)、操作系統(tǒng)模塊的計(jì)數(shù)器和同步計(jì)數(shù)器之間必須強(qiáng)制執(zhí)行以下約束:

約束1:顯式同步的調(diào)度表(ScheduleTable)的持續(xù)時(shí)間不應(yīng)大于驅(qū)動(dòng)計(jì)數(shù)器(drive Counter)的模數(shù)。

約束2:顯式同步的調(diào)度表(ScheduleTable)的持續(xù)時(shí)間應(yīng)等于同步計(jì)數(shù)器(synchronization Counter)的模數(shù)。

約束3:同步計(jì)數(shù)器(synchronization Counter)應(yīng)與調(diào)度表(ScheduleTable)相關(guān)聯(lián)的驅(qū)動(dòng)計(jì)數(shù)器drive Counter)具有相同的分辨率。這意味著調(diào)度表(ScheduleTable)上的滴答與同步計(jì)數(shù)器(synchronization Counter)上的滴答具有相同的持續(xù)時(shí)間。

5f518412-8458-11ee-939d-92fbcf53809c.png

5f770c1e-8458-11ee-939d-92fbcf53809c.png

如上圖所示:初始時(shí)調(diào)度表處于狀態(tài) STOPPED,調(diào)用函數(shù) StartScheduleTableSync()后,進(jìn)入狀態(tài) WAITING。WAITING 狀態(tài)一直持續(xù)到用戶調(diào)用 SyncScheduleTable(),

對(duì)每一個(gè)調(diào)度表初次調(diào)用 SyncScheduleTable()之后,調(diào)度表進(jìn)入 RUNNING_AND_SYNCHRONOUS 狀態(tài)。如果用戶對(duì)一個(gè)周期調(diào)度表沒有再次調(diào)用 SyncScheduleTable(),那么調(diào)度表將一直處在 RUNNING_AND_SYNCHRONOUS 狀態(tài),但是當(dāng)用戶由于某種原因再次調(diào)用 SyncScheduleTable()后,系統(tǒng)會(huì)進(jìn)行調(diào)度表與同步計(jì)數(shù)器之間的偏移值計(jì)算。如果計(jì)算出的偏移值大于調(diào)度表偏移的容忍度,那么調(diào)度表就會(huì)進(jìn)入 RUNNING 狀態(tài),并且系統(tǒng)會(huì)進(jìn)行調(diào)度表同步,直到調(diào)度表的偏移值小于等于調(diào)度表的偏移容忍度之后停止同步,調(diào)度表再次進(jìn)入 RUNNING_ AND_SYNCHRONOUS 狀態(tài)。

5f8ef518-8458-11ee-939d-92fbcf53809c.png

5fa38cee-8458-11ee-939d-92fbcf53809c.png

5fb79d9c-8458-11ee-939d-92fbcf53809c.png

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 封裝
    +關(guān)注

    關(guān)注

    126

    文章

    7905

    瀏覽量

    142971
  • 計(jì)數(shù)器
    +關(guān)注

    關(guān)注

    32

    文章

    2256

    瀏覽量

    94584
  • AUTOSAR
    +關(guān)注

    關(guān)注

    10

    文章

    362

    瀏覽量

    21591
  • 調(diào)度機(jī)制
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    6786

原文標(biāo)題:AUTOSAR-OS的調(diào)度機(jī)制-調(diào)度表

文章出處:【微信號(hào):汽車電子嵌入式,微信公眾號(hào):汽車電子嵌入式】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    uc/os任務(wù)調(diào)度機(jī)制

    uc/os任務(wù)調(diào)度機(jī)制uc/OS 任務(wù)調(diào)度機(jī)制 內(nèi)核的核心任務(wù)是任務(wù)調(diào)度機(jī)制,為了對(duì)uC/OS進(jìn)
    發(fā)表于 07-07 09:46

    UCOS之任務(wù)調(diào)度機(jī)制

    UCOS之任務(wù)調(diào)度機(jī)制
    發(fā)表于 05-30 07:56

    求藍(lán)牙協(xié)議棧初始化和調(diào)度機(jī)制資料?

    青云NRF51822/NRF52832藍(lán)牙4.x詳解第二講:藍(lán)牙協(xié)議棧初始化和調(diào)度機(jī)制對(duì)應(yīng)藍(lán)牙協(xié)議棧的初始化一直是大家關(guān)注的問題,Nordic的協(xié)議棧如何運(yùn)行,如何處理成為關(guān)鍵。本文并且通過
    發(fā)表于 06-19 09:00

    VxWorks系統(tǒng)的任務(wù)調(diào)度機(jī)制

    針對(duì)多任務(wù)系統(tǒng)而言,調(diào)度是指根據(jù)一定的算法.將CPU 分配給符合條件的任務(wù)使用,不同的系統(tǒng)任務(wù)調(diào)度機(jī)制不同。本文介紹VxWorks系統(tǒng)的任務(wù)調(diào)度策略和算法.分析優(yōu)先級(jí)倒置產(chǎn)
    發(fā)表于 12-16 14:11 ?10次下載

    Linux與VxWorks任務(wù)調(diào)度機(jī)制分析

    Linux與VxWorks任務(wù)調(diào)度機(jī)制分析
    發(fā)表于 03-28 09:52 ?19次下載

    嵌入式實(shí)時(shí)操作系統(tǒng)VxWorks內(nèi)核調(diào)度機(jī)制研究

    嵌入式實(shí)時(shí)操作系統(tǒng)VxWorks內(nèi)核調(diào)度機(jī)制研究
    發(fā)表于 03-29 12:26 ?13次下載

    μC/OS-II 任務(wù)調(diào)度機(jī)制的改進(jìn)

    介紹μC/OS-II 任務(wù)調(diào)度機(jī)制,并提出一種改進(jìn)方法,使μC/OS-II變成一個(gè)兼?zhèn)鋵?shí)時(shí)與分時(shí)任務(wù)調(diào)度機(jī)制的操作系統(tǒng); 論述改進(jìn)后系統(tǒng)的特點(diǎn)和要注意的問題,給出部分源代碼。
    發(fā)表于 04-15 11:21 ?14次下載

    基于輪循機(jī)制和RED的語音流調(diào)度機(jī)制

           本文提出了一種新的VoIP業(yè)務(wù)流調(diào)度機(jī)制(RR-RED),通過隨機(jī)早期檢測(cè)(RED)和輪循機(jī)制(Round Robin)控制主動(dòng)丟包。該機(jī)制很好的繼承了R
    發(fā)表于 09-03 08:58 ?7次下載

    Li nux與VxWorks任務(wù)調(diào)度機(jī)制分析

    分析了Linux和VxWorks兩種多任務(wù)操作系統(tǒng)任務(wù)調(diào)度機(jī)制的異同,從任務(wù)控制塊、調(diào)度的時(shí)機(jī)、調(diào)度的優(yōu)先級(jí)和調(diào)度的策略方面進(jìn)行了詳細(xì)的分析和對(duì)比。分析了VxWorks和Linux在P
    發(fā)表于 11-13 17:54 ?10次下載

    VxWorks系統(tǒng)的任務(wù)調(diào)度機(jī)制

    針對(duì)多任務(wù)系統(tǒng)而言,調(diào)度是指根據(jù)一定的算法.將CPU 分配給符合條件的任務(wù)使用,不同的系統(tǒng)任務(wù)調(diào)度機(jī)制不同。本文介紹VxWorks系統(tǒng)的任務(wù)調(diào)度策略和算法.分析優(yōu)先級(jí)倒置產(chǎn)生
    發(fā)表于 11-27 16:26 ?13次下載

    Windows CE陷阱調(diào)度機(jī)制

     一.什么是陷阱調(diào)度機(jī)制?        一般來說,嵌入式操作系統(tǒng)主要由兩部分組成:運(yùn)行在核心態(tài)的內(nèi)核系統(tǒng)和運(yùn)行在用戶態(tài)的環(huán)境子系統(tǒng)組成。因
    發(fā)表于 08-27 14:38 ?640次閱讀

    基于動(dòng)態(tài)概率休眠調(diào)度機(jī)制的WSNs拓?fù)淇刂扑惴╛韓瑞艷

    基于動(dòng)態(tài)概率休眠調(diào)度機(jī)制的WSNs拓?fù)淇刂扑惴╛韓瑞艷
    發(fā)表于 03-19 19:19 ?0次下載

    虛擬計(jì)算資源調(diào)度機(jī)制研究

    針對(duì)基于Xen的vCPU調(diào)度機(jī)制對(duì)虛擬機(jī)網(wǎng)絡(luò)性能的影響進(jìn)行了深入研究和分析。提出一種高效、準(zhǔn)確、輕量級(jí)的網(wǎng)絡(luò)排隊(duì)敏感類型虛擬機(jī)(NSVM)識(shí)別方法,可根據(jù)當(dāng)前虛擬機(jī)I/O傳輸特征將容易受到影響
    發(fā)表于 02-08 17:08 ?0次下載
    虛擬計(jì)算資源<b class='flag-5'>調(diào)度機(jī)制</b>研究

    NB―IoT物理控制信道NB―PDCCH及資源調(diào)度機(jī)制

    NB―IoT物理控制信道NB―PDCCH及資源調(diào)度機(jī)制(現(xiàn)代電源技術(shù)試題及答案)-NB―IoT物理控制信道NB―PDCCH及資源調(diào)度機(jī)制 ? ? ? ? ?
    發(fā)表于 08-31 19:56 ?13次下載
    NB―IoT物理控制信道NB―PDCCH及資源<b class='flag-5'>調(diào)度機(jī)制</b>

    AUTOSAR調(diào)度表可調(diào)度性的形式化分析

    作為車載操作系統(tǒng),實(shí)時(shí)性對(duì)于AUTOSAR OS的重要性不言而喻,如何保證操作系統(tǒng)中的計(jì)算單元在截止時(shí)間內(nèi)完成是極其重要的。而AUTOSAR OS提供的
    的頭像 發(fā)表于 12-16 14:01 ?1497次閱讀
    <b class='flag-5'>AUTOSAR</b><b class='flag-5'>調(diào)度</b>表可<b class='flag-5'>調(diào)度</b>性的形式化分析