夜间福利网站,免费动漫av,一级做a爰片久久毛片免费陪,夜夜骑首页,黄色毛片视频,插插插操操操,综合av色

實時嵌入式系統(tǒng)中的一種互斥方法

時間:2024-10-15 17:39:20 計算機畢業(yè)論文

實時嵌入式系統(tǒng)中的一種互斥方法

畢業(yè)論文

摘要:本文了實時嵌入式操作系統(tǒng)中幾種常用的互斥,提出了1種基于任務(wù)優(yōu)先級的禁止搶占法,并分析了該方法的安全性和高效性。
關(guān)鍵詞:多任務(wù) 任務(wù)優(yōu)先級 搶占 調(diào)度時機 調(diào)度器

A EXCLUSIVE METHOD OF THE REAL-TIME EMBED OPERATING SYSTEM
Abstract Some common-used exclusive methods are analyzed in this paper.It advances a no preemptive method based on task priority and analyzes the security and high-efficiency.
Keywords Multitask Task priority Preemptive Scheduling chance Scheduler

1 引言

    多任務(wù)系統(tǒng)中當1個共享地址空間簡單地用于數(shù)據(jù)交換時,為避免競爭,需要對內(nèi)存的訪問上鎖,以保證訪問互斥進行。實現(xiàn)資源互斥訪問的方法很多,不同之處僅在于互斥的范圍和程度。這些方法包括禁止中斷,禁止搶占和使用信號量等對資源上鎖。
    互斥機制最強有力的方法是禁止中斷,這種上鎖保證了對CPU的獨占訪問。在互斥期間,即使外部事件產(chǎn)生而引發(fā)相應(yīng)的中斷,系統(tǒng)也不會切換到相應(yīng)的中斷服務(wù)程序(ISR),也能保證任務(wù)之間的互斥。因此在上鎖期間,它可能造成系統(tǒng)對外部事件反應(yīng)遲鈍。這對于大多數(shù)實時系統(tǒng)而言,系統(tǒng)的實時性也就得不到保證,因而不適合作為1種通用的互斥方法。然而當涉及到任務(wù)和中斷服務(wù)程序共享數(shù)據(jù)時,中斷上鎖又是唯1的方法。但是在任何情況下,應(yīng)該使中斷上鎖時間盡量短,這也是所有實時系統(tǒng)的基本要求。
    從本質(zhì)上講,信號量機制比禁止中斷或禁止搶占提供更精確的互斥粒度,但是在使用時需要注意優(yōu)先級繼承,刪除安全性和遞歸使用等,并且當1個任務(wù)需要同時獲取多個信號量時更要注意避免系統(tǒng)的死鎖問題。因此,1般實時嵌入式操作系統(tǒng)都會為用戶提供多種互斥手段,以適應(yīng)不同的使用場合。但對于禁止搶占(禁止調(diào)度)這種方法而言,有些系統(tǒng)支持,如UC/OS--II,VxWorks等,而有些系統(tǒng)未必支持,如PSOS等,為了達到禁止搶占這種效果,并且不受具體系統(tǒng)的約束,本文提出了1種新的禁止搶占方法——最高優(yōu)先級法。

2  禁止搶占的基本原理

    如果任務(wù)不與中斷服務(wù)子程序共享變量或數(shù)據(jù)結(jié)構(gòu),可以使用先禁止然后允許任務(wù)切換的手段。此時雖然任務(wù)切換禁止了,但中斷還是開著的。如果這時中斷來了,中斷服務(wù)子程序會在這1臨界區(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ù)切換。此種機制比中斷上鎖要弱1些。

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

3.1最高優(yōu)先級法的基本原理
    在實時嵌入式系統(tǒng)中,各個任務(wù)依據(jù)實時性.重要性被賦予了不同的優(yōu)先級,內(nèi)核嚴格按照優(yōu)先級的高低來調(diào)度任務(wù),高優(yōu)先級的任務(wù)能搶占低優(yōu)先級的任務(wù)以滿足實時性的要求。另外,實時嵌入式操作系統(tǒng)1般都提供了動態(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ù)只有1個,不管它是否用完時間片,其它低優(yōu)先級的任務(wù)都無法搶占它。
3.2最高優(yōu)先級法的普通實現(xiàn)
    我們先來分析下面的1種在實際開發(fā)工作中會遇到的情況,任務(wù)A中有1段臨界區(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()卻不1定總是設(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ù)較多時效率問題將更加嚴重。另1方面我們不能輕易將函數(shù)Func()中的互斥手段去掉,因為這要考慮在其它沒提供互斥手段的情況下調(diào)用Func()。基于上述原因,我們引入1種高效的方法——嵌套計數(shù)法。

$False$

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)
}
  再來1下這種的安全性。COUNT是全局變量,對它的訪問要防止競爭條件。但巧妙的是1旦我們把任務(wù)用操作系統(tǒng)原語調(diào)用設(shè)成最高優(yōu)先級后,對COUNT的訪問將是獨占的;1個任務(wù)首次調(diào)用PriorityProtect()時在語句(1)處有競爭條件,但1次只能有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)思想,在實際中很容易結(jié)合所使用的具體的操作系統(tǒng)寫出PriorityProtect()和UnPriorityProtect()的實碼。
[1] Labrosse Jean J,uc/OS-II-源碼公開的實時嵌入式操作系統(tǒng),邵貝貝譯,北京:電力出版社,2001.
[2] 孔祥營等,嵌入式實時操作系統(tǒng)VxWorks及其開發(fā)環(huán)境Tornado,北京:中國電力出版社,2001.

【實時嵌入式系統(tǒng)中的一種互斥方法】相關(guān)文章:

嵌入式實時系統(tǒng)中的優(yōu)先級反轉(zhuǎn)問題10-21

嵌入式系統(tǒng)的實時數(shù)據(jù)接口擴展10-26

通過任務(wù)分割提高嵌入式系統(tǒng)的實時性09-14

嵌入式實時系統(tǒng)中斷管理技術(shù)研究09-30

嵌入式實時操作系統(tǒng)研究與分析09-28

基于PCI總線的嵌入式實時DSP圖像采集系統(tǒng)10-18

嵌入式系統(tǒng)中的CACHE問題08-26

面向?qū)ο蟮那度胧较到y(tǒng)設(shè)計方法08-07

嵌入式Linux系統(tǒng)中的GUI系統(tǒng)的研究與移植08-07

實時操作系統(tǒng)VxWorks在跟蹤雷達系統(tǒng)中的應(yīng)用08-02