女人被狂躁到高潮视频免费无遮挡,内射人妻骚骚骚,免费人成小说在线观看网站,九九影院午夜理论片少妇,免费av永久免费网址

當前位置:首頁 > 嵌入式 > 嵌入式教程
[導讀]嵌入式Linux下的實時性增強方案

摘  要: 分析了嵌入式Linux在實時性方面的不足,針對Linux2.6內核的中斷運行機制、內核不可搶占性、自旋鎖及大內核鎖等問題進行研究,提出相應的實時性改進方法。測試表明,改進后的嵌入式Linux實時性效果較好。

Linux以其功能強大、源代碼開放、支持多種硬件平臺、模塊化設計方案以及豐富的開發(fā)工具支持等特點廣泛應用在嵌入式系統(tǒng)領域。作為嵌入式產品的操作系統(tǒng)平臺,具有較好的實時性、系統(tǒng)可靠性、任務處理隨機性是系統(tǒng)追求的目標,目前商業(yè)嵌入式操作系統(tǒng)實時性能可以滿足嵌入式領域的需求,但由于其價格昂貴,應用受到了限制[1]。而嵌入式Linux以其非常低廉的價格,可以大大地降低成本,逐漸成為嵌入式操作系統(tǒng)的首選。但由于其在實時應用領域的技術障礙,要應用在嵌入式領域,還必須對Linux內核作必要的改進。本文以S3C2410+Linux作為移動機器人操作平臺,為了提高機器人任務處理的實時性,針對影響Linux OS實時性能的若干方面進行研究,并利用相應的解決方法基于標準Linux2.6內核加以實現,最后通過測試,驗證了此改進方法的效果。

1 Linux內核實時性分析

1.1 Linux內核制約實時性的因素

衡量操作系統(tǒng)實時性的指標主要有中斷延遲和搶占延遲。嵌入式系統(tǒng)中很多實時任務是靠中斷驅動的,中斷事件必須在限定的時限內處理,否則將產生災難性的后果。大多數實時系統(tǒng)都是處理一些周期性的或非周期性的重復事件,事件產生的頻度就確定了任務的執(zhí)行時限,因此每次事件發(fā)生時,相應的處理任務必須及時響應處理,否則將無法滿足時限[2]。搶占延遲就反映了系統(tǒng)的響應及時程度。針對Linux內核,中斷關閉及中斷優(yōu)先級執(zhí)行機制、內核不可搶占性、自旋鎖(spinlock)及大內核鎖及一些O(n)的任務調度算法影響了系統(tǒng)的實時性能。

1.2 現存增強Linux內核實時性的技術

多年來,Linux實時性改進技術的發(fā)展主要有兩種技術方案:(1)直接修改Linux內核。針對內核數據結構、調度函數、中斷方式進行改動,重新設計一個由優(yōu)先級驅動的實時調度器,替換原有Linux內核中的進程調度器sched.c。這一方案主要是針對中斷機制、任務調度算法進行改進的,較為成功的案例為Kansas大學開發(fā)的Kurt-Linux。Kurt提高了Linux系統(tǒng)中的實時精度,將時鐘芯片設置為單觸發(fā)狀態(tài)。對于實時任務的調度,Kurt-Linux采用基于時間的靜態(tài)實時CPU調度算法。實時任務在設計階段就需要明確地說明其實時事件要發(fā)生的時間。這種調度算法對于那些循環(huán)執(zhí)行的任務能夠取得較好的調度效果;(2)在Linux內核之外進行實時性擴展,添加一個實時內核。實時內核接管硬件所有中斷,并依據是否為實時任務給予響應。Fsm Labs公司開發(fā)的RTLinux就是依據這種策略開發(fā)設計的[3]。以上論述的兩種技術方案有其可借鑒之處,但如果綜合考慮任務響應、內核可搶占性、實時調度策略等都將影響操作系統(tǒng)的實時性能,因此,這兩種技術還不能很好地滿足實時性要求。為了增強嵌入式Linux實時性能,下面將介紹中斷機制、內核的搶占性以及大內核鎖等相關問題。

2 Linux實時性改進方法

Linux2.4及以前版本內核是不可搶占的,在Linux2.6中,內核已經可以搶占,實時性有所增強。但是內核中仍然有不可搶占的區(qū)域,如自旋鎖spinlock保護的臨界區(qū)等。另外,影響內核實時性能的因素還有中斷運行機制、大內核鎖機制以及調度算法等。

2.1 中斷運行機制改進

在Linux標準內核中,中斷是最高優(yōu)先級的執(zhí)行單元,硬件架構決定了硬件中斷到來的時候在該中斷沒有被屏蔽的條件下必須處理。不管內核當時處理什么,即便是Linux中最高優(yōu)先級的實時進程,只要有中斷發(fā)生,系統(tǒng)將立即響應該事件并執(zhí)行相應的中斷處理程序,這就大大削弱了Linux的實時性能。特別是系統(tǒng)有嚴重的網絡或I/O負載時,中斷將非常頻繁,實時任務將很難有機會運行,這對于Linux的實時應用來說是不可接受的。Linux采用的關中斷技術在關中斷區(qū)域使相應實時任務得不到響應,增加了實時任務的中斷延遲。Linux實時化后自旋鎖變?yōu)榛コ怄i的技術,但由于自旋鎖的中斷處理不能及時響應,降低了系統(tǒng)的實時性能。因此,借鑒Ingo Molnar實時補丁的實時化方法,采用中斷線程化技術改進中斷運行機制,中斷將作為內核線程運行而且賦予不同的實時優(yōu)先級,實時任務可以有比中斷線程更高的優(yōu)先級,這樣,實時任務就可以作為最高優(yōu)先級的執(zhí)行單元來運行了,即使在嚴重負載下仍有實時性保證。另一方面,中斷處理線程也可以因為在內核同步中得不到鎖而掛載到鎖的等待隊列中,很多關中斷就不必真正的禁止硬件中斷了,而是禁止內核進程搶占,從而減小了中斷延遲[4]。

在初始化階段,常規(guī)中斷初始化和中斷線程化的初始化在STart_kernel( )函數中都調用trap_init( )和init_IRQ( )兩個函數來初始化irq_desc_t結構體,區(qū)別主要體現在內核初始化創(chuàng)建init線程時,中斷線程化的中斷在init( )函數中還將調用init_hardirqs(kernel/irq/manage.c)來為每一個IRQ創(chuàng)建一個內核線程,最高實時優(yōu)先級為50,依次類推直到25。因此,任何IRQ線程的最低實時優(yōu)先級為25,具體實現是通過kthread_create函數創(chuàng)建的。功能實現等同于如下代碼:

void __init init_hardirqs(void)

{   ……

for (i = 0; i < NR_IRQS; i++) {

//對于每一個中斷建立一個中斷線程

irq_desc_t *desc = irq_desc + i;

if(desc->actiON && !(desc->status & IRQ_NODELAY))

//有IRQ_NODELAY標志的中斷不允許線程化

desc->thread = kthread_create(do_irqd,

desc, "IRQ %d", irq);     //建立線程

……

}

}

static int do_irqd(void * __desc)

//分配中斷線程優(yōu)先級50~25

{  ……

/*Scale irq thread priorities from prio 50 to prio 25 */

param.sched_priority = curr_irq_prio;

if (param.sched_priority > 25)

curr_irq_prio = param.sched_priority - 1;

……

}
[!--empirenews.page--]
在中斷處理階段當中斷發(fā)生時,CPU調用do_IRQ( )函數來處理中斷,do_IRQ( )在做了必要的相關處理之后調用_do_IRQ( )。_do_IRQ( )主要功能為判斷該中斷是否已經被線程化(核對終端描述符的狀態(tài)字段是否包含IRQ_NODELAY標志),對于沒有線程化的中斷,將直接調用 handle_IRQ_event( )函數來處理。功能實現等同于如下代碼:

fastcall notrace unsigned int __do_IRQ(unsigned int irq,

struct pt_regs *regs)

{  ……

if (redirect_hardirq(desc))

//檢測是否為線程化中斷,若是則喚醒中斷線程

goto out_no_end;

……

action_ret = handle_IRQ_event(irq, regs, action);

//處理非線程化中斷

……

}

int redirect_hardirq(struct irq_desc *desc)

//檢測irq_desc結構體,判斷是否線程化

{  ……

if (!hardirq_preemption || (desc->status & IRQ_

NODELAY) || !desc->thread)

return 0;

……

if (desc->thread && desc->thread->state != TASK_

RUNNING)

wake_up_process(desc->thread);

……

}

針對已線程化的情況,調用wake_up_process( )函數喚醒中斷處理線程執(zhí)行,內核線程將調用do_hardirq( )來處理相應的中斷。具體實現是通過handle_IRQ_event( )函數直接調用相應的中斷處理函數完成的。對于緊急的中斷(如時鐘中斷),內核保持原來的中斷處理方式,而不為其創(chuàng)建中斷線程,這樣就保證了緊急中斷的快速響應。

2.2 內核可搶占性設計

在Linux標準內核中,因不具有可搶占性和導致較大的延遲,增加內核的可搶占性能,可提高系統(tǒng)的實時任務處理能力。當前修改Linux內核提高實時性的方法主要有增加搶占點和改造成搶占式內核兩種方法。增加搶占點方法是在內核中插入搶占點,通過檢測搶占點調度標志來決定是否進行實時任務的調度。采用這種方法,在檢測搶占點標志時大大增加了系統(tǒng)開銷,因此本方案采用直接改造Linux內核的方法,通過修改自旋鎖為互斥鎖來提高內核的可搶占性 [5]。即借鑒Ingo Molnar的實時補丁的實時化方法,使用mutex互斥鎖來替換spinlock自旋鎖。使用mutex替換spinlock,可以讓spinlock 可搶占。起初spinlock不可搶占性設計目的是避免死鎖,可搶占性設計可能導致競爭者與保持者的死鎖局面。中斷處理函數中也可以使用 spinlock,如果spinlock已經被某一進程保持,則中斷處理函數無法進行,從而形成死鎖。中斷線程化以后,中斷線程將掛在等待隊列上并放棄 CPU讓別的線程或進程來運行,讓每個spinlock都有一個等待隊列,該等待隊列按進程或線程優(yōu)先級排隊,如果一個進程或線程競爭的spinlock 已經被另一個線程保持,它將把自己掛在該spinlock的優(yōu)先級化的等待隊列上,然后發(fā)生調度把CPU讓給別的進程或線程。mutex替換 spinlock后,spinlock結構定義如下代碼:

typedef struct {

struct rt_mutex lock;            //新的實時互斥鎖

unsigned int break_lock;

} spinlock_t;

其中struct rt_mutex結構如下:

struct rt_mutex {

raw_spinlock_t wait_lock;

struct plist wait_list;                  //優(yōu)先級等待隊列

struct task_struct *owner;     //擁有該鎖進程的信息

int owner_prio;

… …

};

在如上代碼中,類型raw_spinlock_t就是原來的spinlock_t。即代碼中的spinlock_t就是新設計的自旋鎖。 rt_mutex結構中,wait_list字段為優(yōu)先級等待隊列。在mutex使用中,當遇到鎖住的臨界資源時,任務被掛起到wait_list中,臨界資源解鎖時等待任務被激活。臨界資源被保護的同時可以搶占。
[!--empirenews.page--]
由于Linux內核底層的臨界資源是不可搶占的,使用mutex替換spinlock的過程中,這部分可以保留,仍由不可搶占的 spinlock保護,如:保護硬件寄存器的鎖、調度器的運行隊列鎖等。不可搶占的spinlock被重新命名為raw_spinlock_t。 spin_lock被宏定義為:

#define spin_lock(lock)  PICK_OP(raw_spinlock_t,spin,_lock,lock)

函數PICK_OP支持兩種鎖共存機制,PICK_OP在編譯階段將鎖操作轉化為mutex或者spinlock:

#define PICK_OP(type, optype, op, lock)

do {

if (TYPE_EQUAL((lock), type))

_raw_##optype##op((type *)(lock));

else if (TYPE_EQUAL(lock, spinlock_t))

//調用gcc的內嵌函數__builtin_types_compatible_p()

_spin##op((spinlock_t *)(lock));

else __bad_spinlock_type();

} while (0)

#define TYPE_EQUAL(lock, type)

__builtin_types_compatible_p(typeof(lock), type *)

gcc的內嵌函數__builtin_types_compatible_p用于判斷一個變量的類型是否為某指定的類型,如果類型為 spinlock_t,將運行函數_spin_lock;類型為raw_spinlock_t,將運行函數_raw_spin_lock。

實時rt_mutex在具體應用中,一個高優(yōu)先級任務搶占該鎖的同時,把先前的鎖擁有者添加到互斥鎖等待隊列中,并在當前擁有該鎖的任務 task_struct中標記等待該鎖的所有任務;反之,不能得到該鎖就把當前任務添加到鎖的優(yōu)先級等待隊列中,直到喚醒執(zhí)行。為了防止優(yōu)先級逆轉,可以改變鎖的當前擁有者的優(yōu)先級為鎖的等待隊列中任務的最高優(yōu)先級。

rt_mutex可以使高優(yōu)先級任務利用搶占鎖進入臨界區(qū),這樣內核不可搶占區(qū)的數量和范圍大大縮小,內核可搶占性有了很大的提高,且降低了實時高優(yōu)先級任務的搶占延遲,改善了系統(tǒng)的實時性能。

2.3 可搶占大內核鎖設計

大內核鎖BKL(Big Kernel Lock)實質上也是spinlock,它用于保護整個內核,該鎖保持時間較長,對系統(tǒng)的實時性能影響很大[6]。采用Ingo Molnar的實時化方法,BKL使用semaphore實現,結構定義如下代碼:

struct semaphore {

atomic_t count;

struct rt_mutex lock;              //實時互斥鎖的使用

};

由結構體發(fā)現,在BKL實現中利用了實時互斥鎖rt_mutex,在改進后的spinlock結構體spinlock_t中也利用了實時互斥鎖 rt_mutex,因此可搶占大內核鎖和新的spinlock共用了低層的處理代碼。使用semaphore之后,大內核鎖就可搶占了。

3 內核實時性測試

針對Linux2.6內核,本文并沒有作出對內核調度算法的修正,只是探討了中斷運行機制、自旋鎖及大內核鎖技術在系統(tǒng)實時性能上的局限性,所以實驗測試主要測試中斷延遲時間和任務響應時間。實驗環(huán)境: Intel 2 GHz CPU,256 DDR內存,Kernel 2.6.22版本。測試結果如表1所示。


由表可知,在中斷服務程序中寫入標記,測試中斷觸發(fā)至中斷服務程序執(zhí)行平均響應時間,標準Linux2.6內核平均中斷響應時間為182 μs,改進后Linux2.6內核為14 μs。采用開源軟件LMbench3.0 測試系統(tǒng)任務調度延遲時間,標準Linux2.6內核平均任務響應時間為1 260 μs,改進后Linux2.6內核為162μs。由此可見,改進策略在一定程度上大大減小了中斷延遲和任務調度時間,有利于改善移動機器人任務處理的實時性能。

本文基于Linux2.6內核的關中斷、中斷優(yōu)先級、內核的不可搶占性以及大內核鎖保持時間過長等問題進行了實時性分析,提出了相應的改進方法。利用中斷線程化、互斥鎖的應用及大內核鎖的改進等技術提高了系統(tǒng)的實時性能,降低了內核中斷延遲和調度延遲。改進后的內核在移動機器人控制器平臺中有很好的應用價值,提高了機器人控制的實時性能。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯系該專欄作者,如若文章內容侵犯您的權益,請及時聯系本站刪除。
換一批
延伸閱讀

黑石(Blackstone Group)公布2022年第三季度財務業(yè)績。季度營收10.58億美元,上年同期為62.24億美元,同比下降83%。歸屬于公司凈利潤為229.6萬美元,上年同期為14.02億美元。總資產管理規(guī)模...

關鍵字: GROUP ST CK AC

美國紐約州阿蒙克2022年10月20日 /美通社/ -- IBM(NYSE: IBM)發(fā)布 2022 年第三季度業(yè)績報告。 IBM 董事長兼首席執(zhí)行官 Arvind Kri...

關鍵字: IBM 軟件 BSP 云平臺

世界上最大的兩家資產管理公司貝萊德(BlackRock)和先鋒(Vanguard)等金融機構已在英國一項問詢中表示,它們將繼續(xù)投資化石燃料,并且不認同氣候變化計劃要求停止新的煤炭、石油和天然氣投資的觀點。貝萊德是試圖采取...

關鍵字: CK 天然氣 AN AC

成都2022年10月19日 /美通社/ -- 近期,平安養(yǎng)老險積極籌備個人養(yǎng)老金的產品設計和系統(tǒng)開發(fā)工作,發(fā)展多樣化的養(yǎng)老金融產品,推動商業(yè)養(yǎng)老保險、個人養(yǎng)老金、專屬商業(yè)養(yǎng)老保險等產品供給。 搭養(yǎng)老政策東風 ...

關鍵字: 溫度 BSP 東風 大眾

廣東佛山2022年10月19日 /美通社/ -- 空間是人居生活的基礎單元,承載著生存與活動的最基本功能。而對于理想空間的解構意義卻在物理性容器之外,體現出人們對于空間和生活深層關系的思考,同時也塑造著人與空間的新型連接...

關鍵字: 溫度 BSP 智能化 進程

上海2022年10月19日 /美通社/ -- 10月17日晚間,安集科技披露業(yè)績預告。今年前三季度,公司預計實現營業(yè)收入7.54億元至8.33億元,同比增長60.24%至77.03%;歸母凈利潤預計為1.73億...

關鍵字: 電子 安集科技 BSP EPS

北京2022年10月19日 /美通社/ -- 10月18日,北京市經濟和信息化局發(fā)布2022年度第一批北京市市級企業(yè)技術中心創(chuàng)建名單的通知,諾誠健華正式獲得"北京市企業(yè)技術中心"認定。 北京市企業(yè)技...

關鍵字: BSP ARMA COM 代碼

北京2022年10月18日 /美通社/ -- 10月14日,國際數據公司(IDC)發(fā)布《2022Q2中國軟件定義存儲及超融合市場研究報告》,報告顯示:2022年上半年浪潮超融合銷售額同比增長59.4%,近5倍于...

關鍵字: IDC BSP 數字化 數據中心

上海2022年10月18日 /美通社/ -- 2022年9月5日,是首都銀行集團成立60周年的紀念日。趁著首都銀行集團成立60周年與首都銀行(中國)在華深耕經營12年的“大日子”,圍繞作為外資金融機構對在華戰(zhàn)略的構想和業(yè)...

關鍵字: 數字化 BSP 供應鏈 控制

東京2022年10月18日  /美通社/ -- NIPPON EXPRESS HOLDINGS株式會社(NIPPON EXPRESS HOLDINGS, INC.)旗下集團公司上海通運國際物流有限公司(Nipp...

關鍵字: 溫控 精密儀器 半導體制造 BSP

嵌入式教程

6897 篇文章

關注

發(fā)布文章

編輯精選

技術子站

關閉