99爱免费观看_日韩在线免费_97成人在线视频_中文字幕三区_美女福利视频网站_色伊人

探析實時嵌入式系統(tǒng)互斥方法

來源:期刊VIP網(wǎng)所屬分類:光電技術(shù)時間:瀏覽:

  摘要:多任務(wù)系統(tǒng)中當一個共享地址空間簡單地用于數(shù)據(jù)交換時,為避免競爭,需要對內(nèi)存的訪問上鎖,以保證訪問互斥進行。實現(xiàn)資源互斥訪問的方法很多,不同之處僅在于互斥的范圍和程度。這些方法包括禁止中斷,禁止搶占和使用信號量等對資源上鎖。

  關(guān)鍵詞:多任務(wù),任務(wù)優(yōu)先級,搶占,調(diào)度時機,調(diào)度器

  1 引言

  互斥機制最強有力的方法是禁止中斷,這種上鎖保證了對CPU的獨占訪問。在互斥期間,即使外部事件產(chǎn)生而引發(fā)相應(yīng)的中斷,系統(tǒng)也不會切換到相應(yīng)的中斷服務(wù)程序(ISR),也能保證任務(wù)之間的互斥。因此在上鎖期間,它可能造成系統(tǒng)對外部事件反應(yīng)遲鈍。這對于大多數(shù)實時系統(tǒng)而言,系統(tǒng)的實時性也就得不到保證,因而不適合作為一種通用的互斥方法。然而當涉及到任務(wù)和中斷服務(wù)程序共享數(shù)據(jù)時,中斷上鎖又是唯一的方法。但是在任何情況下,應(yīng)該使中斷上鎖時間盡量短,這也是所有實時系統(tǒng)的基本要求。

  從本質(zhì)上講,信號量機制比禁止中斷或禁止搶占提供更精確的互斥粒度,但是在使用時需要注意優(yōu)先級繼承,刪除安全性和遞歸使用等問題,并且當一個任務(wù)需要同時獲取多個信號量時更要注意避免系統(tǒng)的死鎖問題。因此,一般實時嵌入式操作系統(tǒng)都會為用戶提供多種互斥手段,以適應(yīng)不同的使用場合。但對于禁止搶占(禁止調(diào)度)這種方法而言,有些系統(tǒng)支持,如UC/OS--II,VxWorks等,而有些系統(tǒng)未必支持,如PSOS等,為了達到禁止搶占這種效果,并且不受具體系統(tǒng)的約束,本文提出了一種新的禁止搶占方法——最高優(yōu)先級法。

  2 禁止搶占的基本原理

  如果任務(wù)不與中斷服務(wù)子程序共享變量或數(shù)據(jù)結(jié)構(gòu),可以使用先禁止然后允許任務(wù)切換的手段。此時雖然任務(wù)切換禁止了,但中斷還是開著的。如果這時中斷來了,中斷服務(wù)子程序會在這一臨界區(qū)內(nèi)立即執(zhí)行。中斷服務(wù)子程序結(jié)束時,即使有更高優(yōu)先級的任務(wù)已經(jīng)進入就緒態(tài),內(nèi)核還是返回到原先被中斷了的任務(wù),直到執(zhí)行完給任務(wù)切換開鎖函數(shù),內(nèi)核再看看有沒有優(yōu)先級更高的任務(wù)被中斷服務(wù)子程序激活而進入就緒態(tài),如果有則做任務(wù)切換。此種機制比中斷上鎖要弱一些。

  3 最高優(yōu)先級法

  3.1最高優(yōu)先級法的基本原理

  在實時嵌入式系統(tǒng)中,各個應(yīng)用任務(wù)依據(jù)實時性.重要性被賦予了不同的優(yōu)先級,內(nèi)核嚴格按照優(yōu)先級的高低來調(diào)度任務(wù),高優(yōu)先級的任務(wù)能搶占低優(yōu)先級的任務(wù)以滿足實時性的要求。另外,實時嵌入式操作系統(tǒng)一般都提供了動態(tài)更改任務(wù)優(yōu)先級的系統(tǒng)調(diào)用。我們可以將系統(tǒng)中的最高優(yōu)先級(HiPriority)預(yù)留下來,當某任務(wù)需要禁止搶占時,將該任務(wù)的優(yōu)先級提升到最高優(yōu)先級(PriorityProtect),在該任務(wù)將其自身的優(yōu)先級設(shè)回原優(yōu)先級(UnPriorityProtect)之前,系統(tǒng)中的其它任務(wù)不會搶占該任務(wù),該任務(wù)可以放心地完成臨界區(qū)的操作。使用這種方法也可以選擇基于優(yōu)先級的時間片輪轉(zhuǎn)調(diào)度。輪轉(zhuǎn)調(diào)度可以使優(yōu)先級相同處于就緒態(tài)的任務(wù)公平地分享使用CPU。按照優(yōu)先級調(diào)度的原理,考察我們的最高優(yōu)先級法:當任務(wù)處于最高優(yōu)先級時即使時間片到期任務(wù)也不會切換出去,因為就緒隊列里優(yōu)先級最高(為HiPriority)的任務(wù)只有一個,不管它是否用完時間片,其它低優(yōu)先級的任務(wù)都無法搶占它。

  3.2最高優(yōu)先級法的普通實現(xiàn)

  我們先來分析下面的一種在實際開發(fā)工作中會遇到的情況,任務(wù)A中有一段臨界區(qū)代碼,并且假設(shè)該臨界區(qū)代碼不包含因等待資源而不得不讓出CPU的可能:

  PriorityProtect();

  ……//代碼1

  Func();//函數(shù)調(diào)用

  ……//代碼2

  UnPriorityProtect();

  而函數(shù)Func()如下定義:

  Func()

  {

  ……//代碼3

  PriorityProtect();

  ……//代碼4

  UnPriorityProtect();

  ……//代碼5

  }

  當Func()執(zhí)行完時,任務(wù)A的優(yōu)先級被設(shè)回了原先的優(yōu)先級,代碼2將受不到保護!因此,我們需要對函數(shù)PriorityProtect()和UnPriorityProtect()進行改造:函數(shù)PriorityProtect()需返回設(shè)置最高優(yōu)先級之前任務(wù)的優(yōu)先級,而函數(shù)UnPriorityProtect()卻不一定總是設(shè)置任務(wù)原先的優(yōu)先級,它設(shè)置的是與之配對的PriorityProtect()返回的優(yōu)先級。這兩個函數(shù)都是成對使用的,不管嵌套使用了多少次都不會出錯,舉例如下:

  OldPriority=PriorityProtect();

  ……//代碼1

  Func();//函數(shù)調(diào)用

  ……//代碼2

  UnPriorityProtect(OldPriority);

  而函數(shù)Func()如下定義:

  Func()

  {

  int OldPriority;

  ……//代碼3

  OldPriority =PriorityProtect();

  ……//代碼4

  UnPriorityProtect(OldPriority);

  ……//代碼5

  }

  這樣在函數(shù)Func()執(zhí)行完后任務(wù)仍處于最高優(yōu)先級狀態(tài),代碼2仍受到保護,符合程序員的意圖,程序員不必擔心會發(fā)生意外。但是這種方法的效率有點低下,執(zhí)行Func()時已經(jīng)是最高優(yōu)先級狀態(tài)了,卻還要再設(shè)置,浪費了CPU時間,在嵌套次數(shù)較多時效率問題將更加嚴重。另一方面我們不能輕易將函數(shù)Func()中的互斥手段去掉,因為這要考慮在其它沒提供互斥手段的情況下調(diào)用Func()。基于上述原因,我們引入一種高效的方法——嵌套計數(shù)法。

  3.3最高優(yōu)先級法的嵌套計數(shù)實現(xiàn)

  先來定義操作規(guī)則:COUNT為系統(tǒng)中的全局變量,初始化為0。

  PriorityProtect()

  {

  if(!COUNT) ……(1)

  利用具體的系統(tǒng)調(diào)用把當前任務(wù)設(shè)成最高優(yōu)先級 ……(2)

  COUNT++; ……(3)

  }

  UnPriorityProtect()

  {

  COUNT--;……(4)

  if(!COUNT) ……(5)

  利用具體的系統(tǒng)調(diào)用把當前任務(wù)設(shè)成原先的優(yōu)先級……(6)

  }

  再來分析一下這種方法的安全性。COUNT是全局變量,對它的訪問要防止競爭條件。但巧妙的是一旦我們把任務(wù)用操作系統(tǒng)原語調(diào)用設(shè)成最高優(yōu)先級后,對COUNT的訪問將是獨占的;一個任務(wù)首次調(diào)用PriorityProtect()時在語句(1)處有競爭條件,但一次只能有一個任務(wù)通過(2)處的原語成為最高優(yōu)先級,只要我們正確地配對使用這兩個函數(shù),當這個任務(wù)最終退出最高優(yōu)先級狀態(tài)時COUNT必為0,并不影響其它任務(wù)在(1)處的判斷。這種方法的高效性也是明顯的,在嵌套使用的里層僅僅進行嵌套計數(shù)的計算,并不用進行優(yōu)先級的設(shè)置。

  4 結(jié)論

  盡管不同的實時嵌入式操作系統(tǒng)給用戶提供的系統(tǒng)調(diào)用接口不盡相同,但是它們所準遵循的基本原理都是相同的。上述關(guān)于禁止任務(wù)搶占的普通實現(xiàn)以及嵌套計數(shù)實現(xiàn)提供的都是實現(xiàn)思想,在實際應(yīng)用中很容易結(jié)合所使用的具體的操作系統(tǒng)寫出PriorityProtect()和UnPriorityProtect()的實現(xiàn)代碼。

  [1] Labrosse Jean J,uc/OS-II-源碼公開的實時嵌入式操作系統(tǒng),邵貝貝譯,北京:中國電力出版社,2001.

  [2] 孔祥營等,嵌入式實時操作系統(tǒng)VxWorks及其開發(fā)環(huán)境Tornado,北京:中國電力出版社,2001.

主站蜘蛛池模板: 亚洲高清视频网站 | 亚洲一区二区三区免费在线观看 | 销魂美女一区二区三区视频在线 | 新99热| 中文在线 | 中文 | 色综合天天射 | 国产精品一区二区三区四区 | 欧美日韩综合精品 | 久久久久久免费 | 一本色道久久88综合亚洲精品ⅰ | 黄色日批视频 | 成人精品一区二区三区中文字幕 | 青青草综合在线 | 亚洲国产成人av | 日韩免费av网站 | 欧美成人一区二区三区片免费 | 久久久久国产 | 亚洲一区二区三区四区五区午夜 | 日本久久久久 | 成人在线不卡 | 在线视频福利 | 在线观看日韩av | 久色视频在线观看 | 五月婷婷综合久久 | 国产精品亚洲精品久久 | 亚洲国产精品一区二区第一页 | 国产区免费观看 | 老司机精品福利视频 | 国产精品一区二区免费 | 中文字幕久久综合 | 国产精品一区二区四区 | 欧美天堂在线观看 | 日本一区二区高清不卡 | 黄色小电影网址 | 亚洲日日操 | 国产成人久久精品麻豆二区 | 中文字幕天堂在线 | 国产成人涩涩涩视频在线观看 | 久久综合一区二区三区 | 亚洲国产成人精品女人久久久 | 亚洲视频a |