【IoT美學】《物聯(lián)網(wǎng)操作系統(tǒng)原理(LiteOS)》——任務同步
今天,我們分享的內(nèi)容主要是物聯(lián)網(wǎng)操作系統(tǒng)中的任務同步。
在正式閱讀博文之前,按慣例,我們需要思考幾個問題:
什么是任務同步?
什么是任務互斥?
同步和互斥的聯(lián)系是什么?
如果你認真的思考了上面的問題,那么請你閱讀下面的分享,也希望你能Get到屬于自己的盲點知識!
一、任務同步背景
1.存在的問題
a.全局資源的共享存在潛在風險
b.操作系統(tǒng)很難對任務進行最優(yōu)化分配
c.操作系統(tǒng)為多任務的同步和互斥提供了多種機制
互斥鎖
讀寫鎖
自旋鎖
事件標識
信號量
2.任務同步
系統(tǒng)中某任務需要在時間上相互合作,共同完成一項應用
3.任務互斥
A任務在L臨界區(qū)訪問共享資源時,其他任務不能進入L臨界區(qū)訪問任何共享資源
4.同步與互斥的聯(lián)系
同步是一種更為復雜的互斥
互斥是一種特殊的同步
二、臨界區(qū)問題
1.臨界資源
共享資源中,具有無法同時被多個任務訪問的特性,且一次只允許一個任務調(diào)用的資源
2.臨界區(qū)
訪問臨界資源的代碼段
3.同步機制準則
空閑讓進:臨界區(qū)空閑時,可以允許一個請求進入臨界區(qū)的進程立即進入臨界區(qū)
忙則等待:當已有進程進入臨界區(qū)時,其他試圖進入臨界區(qū)的進程必須等待
有限等待:對請求訪問的進程,因保證其在有限時間內(nèi)進入臨界區(qū)
讓權(quán)等待:當進程不能進入臨界區(qū)時,應立即釋放處理器,防止進程忙等待
三、同步方案
1.軟件同步方案
a.在代碼邏輯中控制對臨界區(qū)的訪問
b.實現(xiàn)方法
1).單標志法
缺陷:違背“空閑讓進”原則,造成資源利用的不充分
2).雙標志先檢查法
優(yōu)點:滿足“空閑讓進”原則
缺陷:違背“忙則等待”原則
3).雙標志后檢查法
優(yōu)點:滿足“忙則等待”原則
缺陷:違背“空閑讓進”、“有限等待”原則
4).Peterson算法
優(yōu)點:遵循“空閑讓進“、”忙則等待“、”有限等待“原則
缺陷:違背”讓權(quán)等待“原則
2.硬件同步方案
a.借用計算機提供的特殊硬件指令
b.實現(xiàn)方法
1).中斷屏蔽法
缺陷:限制中斷,使CPU失去交替執(zhí)行任務的能力,嚴重降低CPU執(zhí)行程序的效率
2).TestAndSet指令
可以將指定標志設(shè)置為真值
3).Swap指令
可以交換兩個標志的內(nèi)容
什么是信號量?
物聯(lián)網(wǎng)操作系統(tǒng)中為什么要用到信號量?
互斥鎖和信號量有關(guān)系嗎?
四、信號量
1.機械信號機制
2.實例:鐵路系統(tǒng),鐵軌被多輛列車共用時,需要特殊裝置提供互斥機制。當軌道被使用時,該裝置通過關(guān)閉特殊裝置來阻止列車進入該軌道。反之,軌道未被使用時,則打開特殊裝置讓等待的列車繼續(xù)????????????????前進。
對比物聯(lián)網(wǎng)操作系統(tǒng)
列車——任務
列車沿軌道行駛的過程——任務執(zhí)行的過程
共用的鐵軌——臨界資源
3.荷蘭? 計算機科學家E.W.Dijkstra??1959年提出信號量在軟件上實現(xiàn)互斥
4.分類
a.二進制信號量
Binary Semaphores
只能取0和1
b.計數(shù)型信號量
Counting Semaphores
取值由其制約機制的位數(shù)決定
5.信號量實現(xiàn)原理
通過計數(shù)機制實現(xiàn)任務之間的同步或臨界資源的互斥訪問
6.Huawei LiteOS中信號量的運作原理
usSemStat????????????????? /**是否使用標志位**/
uwSemCount???????????? /**信號量索引號**/
usMaxSemCount?????? /**信號量最大數(shù)**/
usSemID??????????????????? /**信號量當前計數(shù)**/
stSemList?????????????????? /**任務鏈表**/
注意:中斷申請信號量必須使用無阻塞模式
7.互斥鎖實現(xiàn)原理
a.互斥鎖又稱互斥信號量
b.一種特殊的二進制信號量,用于實現(xiàn)對共享資源的獨占式處理
c.互斥鎖狀態(tài)
開鎖(任務釋放互斥鎖)
閉鎖(任務持有互斥鎖)
d.當一個任務持有互斥鎖時,其他任務將不能再對該互斥鎖進行開鎖或持有
8.Huawei LiteOS中互斥鎖的運作原理
Huawei LiteOS互斥鎖申請模式
a.無阻塞模式
b.永久阻塞模式
c.定時阻塞模式
物聯(lián)網(wǎng)操作系統(tǒng)需要保證任務調(diào)度的實時性,盡量避免任務的長時間阻塞,在獲得互斥鎖后應盡快釋放互斥鎖
注意:互斥鎖不能在中斷服務程序中使用
9.優(yōu)先級翻轉(zhuǎn)問題
當使用信號量控制共享資源的訪問時,可能會出現(xiàn)信號量被低優(yōu)先級占有的情況,造成高優(yōu)先級任務被低優(yōu)先級任務阻塞,難以保證實時性
10.優(yōu)先級繼承
為了解決優(yōu)先級翻轉(zhuǎn)問題,而提出的優(yōu)化機制
低優(yōu)先級任務獲取共享資源時,臨時提升其優(yōu)先級,使其能更快的執(zhí)行并釋放資源,在釋放后恢復任務原先的優(yōu)先級
優(yōu)先級的提升幅度取決于等待該共享資源的最高優(yōu)先級任務的優(yōu)先級
基于你現(xiàn)有的知識定義事件和死鎖?
死鎖是否可以避免?如果可以避免,它的避免策略有哪些?
什么是物聯(lián)網(wǎng)操作系統(tǒng)的原子操作?
五、事件
1.一種實現(xiàn)任務間通信的機制
2.事件通信只能是事件類型的通信,無數(shù)據(jù)傳輸
3.常用于實現(xiàn)任務之間的同步
4.事件內(nèi)部結(jié)構(gòu)
a.以Huawei LiteOS為例的事件,僅用于任務之間的同步,不能提供數(shù)據(jù)傳輸功能
b.多次向任務發(fā)送同一事件類型時,等效于只發(fā)送一次
c.Huawei LiteOS的事件集合與任務不相關(guān)聯(lián),任務可以通過創(chuàng)建事件控制塊來實現(xiàn)對事件的觸發(fā)和等待操作
5.事件讀取模式
所有事件(LOS_WAITMODE_AND)
任一事件(LOS_WAITMODE_OR)
清除事件(LOS_WAITMODE_CLR)
6.事件喚醒任務
a.邏輯或:只要等待中的任意事件發(fā)生,任務即會被喚醒并執(zhí)行
b.邏輯與:只有當所有等待的特定事件都發(fā)生后,任務才會被喚醒并繼續(xù)執(zhí)行
c.等待事件通過讀事件函數(shù)實現(xiàn),事件發(fā)生通過寫事件函數(shù)實現(xiàn)
六、死鎖
1.多任務環(huán)境中,錯誤處理任務同步可能會導致死鎖
2.死鎖原理
a.定義:一組相互競爭系統(tǒng)資源或進行通信間”永久“阻塞
b.產(chǎn)生死鎖的4個必要條件
互斥條件:一次只有一個任務可以使用一個資源,其他任務不能訪問已分配的資源
請求和保持條件:當一個任務繼續(xù)等待其他任務時,繼續(xù)占有已經(jīng)分配的資源
不可搶占條件:不能強行搶占任務已占有的資源
循環(huán)等待條件:存在一個封閉的任務鏈,使得每個任務都在等待任務鏈中的其他任務
3.死鎖預防
a.設(shè)計一種系統(tǒng)來排除發(fā)生死鎖的可能性
b.分類
間接的死鎖預防:防止前面列出的前3個必要條件中任何一個的發(fā)生
直接的死鎖預防:防止循環(huán)等待的發(fā)生
c.破壞互斥條件
d.破壞請求和保持條件
e.破壞不可搶占條件
f.破壞循壞等待條件
4.死鎖避免
在資源動態(tài)分配的過程中,防止系統(tǒng)進入不安全的狀態(tài),以避免發(fā)生死鎖
安全狀態(tài):指系統(tǒng)能按某種任務推進順序為每個任務分配其所需資源
銀行家算法(最著名的死鎖避免算法)
5.死鎖檢測
a.優(yōu)勢
盡早的檢測死鎖情況
算法相對比較簡單
b.死鎖解除的主要方法
資源剝奪法:掛起某些死鎖任務,并搶占它的資源
撤銷任務法:強制撤銷部分甚至全部死鎖任務并剝奪這些任務的資源
任務回退法:讓一個或多個任務回退到足以回避死鎖的地步,任務回退時自愿釋放資源而不是被剝奪
七、原子操作
1.原子操作能確保對同一組數(shù)據(jù)的的”讀取—修改—寫入“操作在執(zhí)行期間不被打斷
2.物聯(lián)網(wǎng)操作系統(tǒng)可以通過對ARMv6架構(gòu)中的LDREX和STREX指令進行封裝實現(xiàn)原子操作接口
輕量級操作系統(tǒng) LiteOS IoT
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。