日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]嵌入式Linux實(shí)時(shí)化技術(shù)

引言

Linux支持PowerPC、MIPS、ARM、DSP等多種嵌入式處理器,逐漸被用于多種關(guān)鍵性場(chǎng)合。其中實(shí)時(shí)多媒體處理、工業(yè)控制、汽車(chē)電子等特定應(yīng)用對(duì)Linux提出了強(qiáng)實(shí)時(shí)性需求。Linux提供了一些實(shí)時(shí)擴(kuò)展,但需要進(jìn)行實(shí)時(shí)性改造。本文針對(duì)嵌入式Linux實(shí)時(shí)化技術(shù)中的一些關(guān)鍵問(wèn)題進(jìn)行了討論,如Linux內(nèi)核時(shí)延,實(shí)時(shí)化主流技術(shù)方案及其評(píng)價(jià)等。

Linux內(nèi)核時(shí)延

主流Linux雖然部分滿(mǎn)足POSIX 1003.1b實(shí)時(shí)擴(kuò)展標(biāo)準(zhǔn),但還不完全是一個(gè)實(shí)時(shí)操作系統(tǒng),主要表現(xiàn)為:

● 任務(wù)調(diào)度與內(nèi)核搶占

2.6版本內(nèi)核添加了許多搶占點(diǎn),使進(jìn)程執(zhí)行在內(nèi)核代碼時(shí)也可被搶占。為支持內(nèi)核代碼可搶占,在2.6版內(nèi)核中通過(guò)采用禁用中斷的自旋鎖來(lái)保護(hù)臨界區(qū)。但此時(shí)如果有低優(yōu)先級(jí)進(jìn)程在臨界區(qū)中執(zhí)行,高優(yōu)先級(jí)進(jìn)程即使不訪問(wèn)低優(yōu)先級(jí)所保護(hù)的臨界區(qū),也必須等待低優(yōu)先級(jí)進(jìn)程退出臨界區(qū)。

● 中斷延遲

在主流Linux內(nèi)核設(shè)計(jì)中,中斷可以搶占最高優(yōu)先級(jí)的任務(wù),使高優(yōu)先級(jí)任務(wù)被阻塞的最長(zhǎng)時(shí)間不確定。而且,由于內(nèi)核為保護(hù)臨界區(qū)需要關(guān)閉中斷,更加增長(zhǎng)了高優(yōu)先級(jí)任務(wù)阻塞時(shí)間。

● 時(shí)鐘精度

Linux通過(guò)硬件時(shí)鐘編程來(lái)產(chǎn)生毫秒級(jí)周期性時(shí)鐘中斷進(jìn)行內(nèi)核時(shí)間管理,無(wú)法滿(mǎn)足實(shí)時(shí)系統(tǒng)較高精度的調(diào)度要求。內(nèi)核定時(shí)器精度同樣也受限于時(shí)鐘中斷,無(wú)法滿(mǎn)足實(shí)時(shí)系統(tǒng)的高精度定時(shí)需求。

● 其他延遲

此外,Linux內(nèi)核其他子系統(tǒng)也存在多種延遲。比如為了增強(qiáng)內(nèi)核性能和減少內(nèi)存消耗,Linux僅在需要時(shí)裝載程序地址空間相應(yīng)的內(nèi)存頁(yè)。當(dāng)被存取內(nèi)容(如代碼)不在RAM中則內(nèi)存管理單元(MMU)將產(chǎn)生頁(yè)表錯(cuò)誤(Page-Fault)觸發(fā)頁(yè)面裝載,造成實(shí)時(shí)進(jìn)程響應(yīng)時(shí)間不確定。

Linux實(shí)時(shí)化技術(shù)發(fā)展

主流Linux內(nèi)核1.x、2.2.x和2.4.x版本的Linux內(nèi)核無(wú)搶占支持,直到2.6版本的Linux內(nèi)核才支持可搶占內(nèi)核,支持臨界區(qū)外的內(nèi)核搶占和可搶占的大內(nèi)核鎖。在此基礎(chǔ)上,Linux采用了下列兩類(lèi)實(shí)時(shí)化技術(shù)。

● 雙內(nèi)核方式

Linux內(nèi)核實(shí)時(shí)化雙內(nèi)核方式以RTLinux、RTAI和Xenomai等為典型代表。其中RTLinux實(shí)現(xiàn)了一個(gè)微內(nèi)核實(shí)時(shí)操作系統(tǒng)支持底層任務(wù)管理、中斷服務(wù)例程、底層任務(wù)通信隊(duì)列等。普通Linux作為實(shí)時(shí)操作系統(tǒng)的最低優(yōu)先級(jí)任務(wù),Linux下的任務(wù)通過(guò)FIFO命名管道和實(shí)時(shí)任務(wù)進(jìn)行通信,如圖1所示。

當(dāng)Linux要關(guān)閉中斷時(shí),實(shí)時(shí)微內(nèi)核會(huì)截取并記錄這個(gè)請(qǐng)求,通過(guò)軟件來(lái)模擬中斷控制器,而沒(méi)有真正關(guān)閉硬件中斷,避免了由于關(guān)中斷所造成的響應(yīng)延遲。RT-Linux將系統(tǒng)實(shí)時(shí)時(shí)鐘設(shè)置為單次觸發(fā)模式,提供微秒級(jí)的時(shí)鐘精度。RTAI類(lèi)似RTLinux的實(shí)現(xiàn)方式,不同之處在于它修改了體系結(jié)構(gòu)相關(guān)代碼,形成一個(gè)實(shí)時(shí)硬件抽象層(RTHAL),使其實(shí)時(shí)任務(wù)能在任何時(shí)刻中斷普通Linux任務(wù),兩者之間通過(guò)非阻塞隊(duì)列進(jìn)行通訊。RTAI將直接修改Linux內(nèi)核的代碼減至最少,具有更好的可移植性。Xenomai以RTAI為基礎(chǔ),也稱(chēng)RTAI /Fusion。采用了Adeos微內(nèi)核替代RTAI的硬件抽象層。其特色還在于模仿了傳統(tǒng)RTOS的API接口,推動(dòng)傳統(tǒng)RTOS應(yīng)用在GNU/Linux下的移植。類(lèi)似還有基于Fiasco微內(nèi)核的L4Linux等開(kāi)源項(xiàng)目。

● 內(nèi)核補(bǔ)丁方式

雙內(nèi)核實(shí)時(shí)方案下,實(shí)時(shí)任務(wù)需要按照微內(nèi)核實(shí)時(shí)操作系統(tǒng)提供的另外一套API進(jìn)行設(shè)計(jì)。而內(nèi)核補(bǔ)丁方式則不改變Linux的API,原有應(yīng)用程序可在實(shí)時(shí)化后的操作系統(tǒng)上運(yùn)行,典型的有早期研究性的Kurt-Linux和Red-Linux,商業(yè)版本的MontaVista、TimeSys 和Wind River Linux,以及現(xiàn)階段Ingo Monlnar等人開(kāi)發(fā)的實(shí)時(shí)搶占補(bǔ)丁內(nèi)核等[3]。

Kurt-Linux是第一個(gè)基于普通Linux的實(shí)時(shí)操作系統(tǒng)。通過(guò)正常態(tài)、實(shí)時(shí)態(tài)和混合態(tài)進(jìn)行實(shí)時(shí)和非實(shí)時(shí)任務(wù)的劃分。RED-Linux通過(guò)任務(wù)多種屬性和調(diào)度程序,可以實(shí)現(xiàn)多種調(diào)度算法。采用軟件模擬中斷管理,并在內(nèi)核插入了許多搶占點(diǎn),提高了系統(tǒng)調(diào)度精度。

MontaVista Linux在低延遲補(bǔ)丁以及可搶占內(nèi)核補(bǔ)丁基礎(chǔ)上[4],通過(guò)開(kāi)發(fā)內(nèi)核O(1)實(shí)時(shí)調(diào)度程序并對(duì)可搶占內(nèi)核進(jìn)行了改進(jìn)和測(cè)試,Linux 2.4內(nèi)核時(shí)代,MontaVista Linux 作為商業(yè)成熟產(chǎn)品在實(shí)時(shí)性上有較強(qiáng)的優(yōu)勢(shì)。TimeSys Linux通過(guò)內(nèi)核模塊的方式也提供了高精度時(shí)鐘、優(yōu)先級(jí)繼承mutex等支持。

2.6版本的主流內(nèi)核吸收了以上技術(shù),支持CONFIG_PREEMPT_NONE,CONFIG_PREEMPT_VOLUNTARY和CONFIG_PREEMPT等多種配置選項(xiàng)。分別適合于計(jì)算型任務(wù)系統(tǒng),桌面用戶(hù)系統(tǒng)和毫秒級(jí)延遲嵌入式系統(tǒng)。2005年,針對(duì)2.6內(nèi)核MontaVista推出了實(shí)時(shí)Linux計(jì)劃,推進(jìn)了Linux內(nèi)核實(shí)時(shí)化進(jìn)程。隨后Ingo Molnar發(fā)布了新的實(shí)時(shí)搶占補(bǔ)丁,并逐漸成為L(zhǎng)inux內(nèi)核實(shí)時(shí)主流技術(shù),也為包括MontaVista Linux,Wind River Linux采用和補(bǔ)充,本文后續(xù)內(nèi)容要涉及實(shí)時(shí)搶占補(bǔ)丁。

Linux實(shí)時(shí)化技術(shù)及評(píng)價(jià)

2.6版本Linux內(nèi)核實(shí)時(shí)性能有一定增強(qiáng),雙內(nèi)核方式的Linux實(shí)時(shí)化技術(shù)也在不斷發(fā)展中。原來(lái)由FSMLab維護(hù)的RTLinux,其版權(quán)在2007年2月被Wind River購(gòu)買(mǎi),RTAI支持x386等體系結(jié)構(gòu),但由于其代碼較難維護(hù)、bug較難調(diào)試等原因,許多開(kāi)發(fā)者加入了Xenomai項(xiàng)目。Xenomai支持最新2.6版 Linux,相比之下代碼相對(duì)穩(wěn)定和可維護(hù),開(kāi)發(fā)模式較活躍。

內(nèi)核補(bǔ)丁方式的Linux實(shí)時(shí)化技術(shù)在2.6版內(nèi)核基礎(chǔ)上做了大量改進(jìn),使得內(nèi)核中除了中斷關(guān)閉和IRQ線程分派、調(diào)度和上下文切換之外的絕大部分代碼都可以被搶占,不可搶占的自旋鎖保護(hù)臨界區(qū)從一千多個(gè)減少到幾十個(gè),使得內(nèi)核實(shí)時(shí)性得到極大的提高,獲得社區(qū)廣泛支持并逐漸成為L(zhǎng)inux實(shí)時(shí)化主流技術(shù)。

Linux內(nèi)核實(shí)時(shí)化改進(jìn)

實(shí)時(shí)搶占內(nèi)核補(bǔ)丁針對(duì)Linux各種延遲進(jìn)行了實(shí)時(shí)化改進(jìn),主要包括了幾個(gè)方面的技術(shù)。

● 實(shí)時(shí)搶占內(nèi)核

為了實(shí)現(xiàn)內(nèi)核完全可搶占,實(shí)時(shí)內(nèi)核臨界區(qū)用高性能優(yōu)先級(jí)繼承mutex替換原來(lái)自旋鎖(spin-lock)來(lái)進(jìn)行保護(hù),使得在臨界區(qū)內(nèi)的執(zhí)行也可被搶占。只有當(dāng)線程想訪問(wèn)一個(gè)其他線程正在訪問(wèn)的臨界區(qū)時(shí),才被調(diào)度至睡眠,直到所保護(hù)的臨界區(qū)被釋放時(shí)被喚醒。

在實(shí)時(shí)搶占內(nèi)核中通過(guò)優(yōu)先級(jí)繼承機(jī)制(PI)在線程被一個(gè)低優(yōu)先級(jí)線程所持有的資源阻塞時(shí),低優(yōu)先級(jí)線程通過(guò)繼承被阻塞線程優(yōu)先級(jí),盡快執(zhí)行并釋放所持資源而不被其他線程所搶占。

● 新型鎖機(jī)制帶來(lái)內(nèi)核性能提升

實(shí)時(shí)搶占補(bǔ)丁替換了大內(nèi)核鎖(BKL),將BKL從spin lock改成是mutex,持有BKL的線程也可以被搶占,減少了內(nèi)核調(diào)度延遲。此外,實(shí)時(shí)搶占補(bǔ)丁通過(guò)mutex替代semaphore,避免了不必要的時(shí)間負(fù)載。實(shí)時(shí)搶占補(bǔ)丁實(shí)現(xiàn)了可搶占的RCU(Read- Copy Update)鎖和串行化讀寫(xiě)鎖,保證了執(zhí)行可預(yù)測(cè)性,提高了性能。

● 中斷線程化

實(shí)時(shí)搶占補(bǔ)丁通過(guò)內(nèi)核線程來(lái)實(shí)現(xiàn)一些硬件中斷和軟件中斷的服務(wù)程序。體系結(jié)構(gòu)相關(guān)處理代碼設(shè)置IRQ狀態(tài)、檢查線程化的中斷是否使能,并喚醒相關(guān)線程。在中斷線程被調(diào)度執(zhí)行后,進(jìn)行中斷服務(wù)處理。在實(shí)時(shí)搶占內(nèi)核中,用戶(hù)線程優(yōu)先級(jí)可以高于設(shè)備中斷服務(wù)線程。實(shí)時(shí)任務(wù)無(wú)需等待設(shè)備驅(qū)動(dòng)處理程序執(zhí)行,減小了實(shí)時(shí)搶占延遲。

● 時(shí)鐘系統(tǒng)改進(jìn)

實(shí)時(shí)搶占內(nèi)核的時(shí)鐘系統(tǒng)重新進(jìn)行了設(shè)計(jì),實(shí)現(xiàn)了高精度定時(shí)器。時(shí)鐘精度不再依賴(lài)jiffies,使POSIX定時(shí)器和nanosleep精度由具體硬件所能提供的精度決定,使得gettimeofday能夠提供實(shí)時(shí)系統(tǒng)所需的精確時(shí)間值。

● 其他改進(jìn)

Linux在用戶(hù)層支持性能良好的futex,實(shí)現(xiàn)原理類(lèi)似于內(nèi)核優(yōu)先級(jí)繼承mutex,僅在產(chǎn)生競(jìng)態(tài)時(shí)進(jìn)入內(nèi)核,提高了應(yīng)用程序性能。此外,實(shí)時(shí)搶占補(bǔ)丁內(nèi)核還提供mutex死鎖檢測(cè)、延遲跟蹤與測(cè)量、中斷關(guān)閉跟蹤與延遲測(cè)量、搶占延遲測(cè)量等內(nèi)核調(diào)試與診斷、內(nèi)核性能測(cè)量與調(diào)優(yōu)等工具、實(shí)時(shí)Trace支持( Ftrace)等支持。

現(xiàn)階段實(shí)時(shí)化技術(shù)在各體系結(jié)構(gòu)上逐漸得到了支持,如表1所示。

實(shí)時(shí)搶占內(nèi)核延遲

現(xiàn)階段,實(shí)時(shí)搶占補(bǔ)丁技術(shù)仍處于完善過(guò)程中,其表現(xiàn)在以下幾點(diǎn)不足。

● 中斷延遲

即使不發(fā)生中斷線程搶占,實(shí)時(shí)搶占內(nèi)核相對(duì)原來(lái)中斷服務(wù)機(jī)制額外增加一對(duì)上下文切換時(shí)間,用于喚醒中斷服務(wù)線程執(zhí)行和進(jìn)入睡眠狀態(tài)。此外,內(nèi)核中還存在少量用raw_spinlock鎖禁用中斷來(lái)保護(hù)的臨界區(qū),需要計(jì)算這些鎖造成的中斷延遲。

● 任務(wù)搶占延遲

內(nèi)核搶占延遲主要是由于在內(nèi)核中使用各種鎖機(jī)制用于控制任務(wù)和中斷對(duì)臨界區(qū)的訪問(wèn)所造成的,特別是實(shí)時(shí)搶占內(nèi)核中為了避免優(yōu)先級(jí)逆轉(zhuǎn)增加的鎖機(jī)制帶來(lái)了額外時(shí)間負(fù)載。

● 內(nèi)核模塊其他延遲

在實(shí)時(shí)搶占補(bǔ)丁中,內(nèi)存管理模塊還需減少頁(yè)表錯(cuò)誤引起的延遲,降低mlockall內(nèi)存鎖存造成的性能降級(jí)影響。實(shí)時(shí)搶占內(nèi)核中高精度定時(shí)器的使用導(dǎo)致了額外定時(shí)器管理時(shí)間負(fù)載。此外,內(nèi)核中一些驅(qū)動(dòng)程序需要針對(duì)實(shí)時(shí)應(yīng)用進(jìn)行優(yōu)化來(lái)提高實(shí)時(shí)響應(yīng)。軟浮點(diǎn)處理和軟浮點(diǎn)內(nèi)核仿真需要和實(shí)時(shí)搶占補(bǔ)丁兼容,能耗管理子系統(tǒng)還需要具備實(shí)時(shí)系統(tǒng)感知能力。

實(shí)時(shí)搶占內(nèi)核性能測(cè)試

本文在Intel Pentium M 1.7GHz處理器上進(jìn)行了測(cè)試。測(cè)試環(huán)境包括:Linux內(nèi)核2.6.25.8最小配置;patch-2.6.25.8-rt7實(shí)時(shí)補(bǔ)丁;libc 2.5+和busybox-1.10.0構(gòu)建initrdfs方式的根文件系統(tǒng)。

● 中斷延遲

采用實(shí)時(shí)搶占補(bǔ)丁支持的內(nèi)核中斷延遲測(cè)量工具測(cè)量中斷關(guān)閉(IRQ OFF)時(shí)間。在100%負(fù)載情況下,十萬(wàn)采樣點(diǎn)中,最大值在31ms左右,絕大多數(shù)在1ms左右。

● 任務(wù)搶占延遲

內(nèi)核搶占關(guān)閉時(shí)間采用實(shí)時(shí)搶占補(bǔ)丁所支持的內(nèi)核搶占關(guān)閉測(cè)量工具測(cè)量。實(shí)時(shí)搶占內(nèi)核和普通Linux內(nèi)核情況比較如表2所示。

實(shí)時(shí)應(yīng)用中周期性任務(wù)需要能在確定的時(shí)間內(nèi)得到執(zhí)行。實(shí)時(shí)搶占內(nèi)核和普通內(nèi)核下的周期性任務(wù)延遲對(duì)比中可以看出實(shí)時(shí)搶占內(nèi)核提供了實(shí)時(shí)任務(wù)的精確執(zhí)行。

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

阿聯(lián)酋迪拜2025年8月26日 /美通社/ -- 納斯達(dá)克上市公司Robo.ai Inc.今日正式宣布完成品牌煥新升級(jí),并于8月26日正式啟用全新納斯達(dá)克股票代碼"...

關(guān)鍵字: AI 人工智能 代碼 智能科技

一個(gè)線程只能屬于一個(gè)進(jìn)程,而一個(gè)進(jìn)程可以有多個(gè)線程,線程是進(jìn)程的一部分,就像工人是工廠的一部分。資源是分配給進(jìn)程的,同一進(jìn)程的所有線程共享該進(jìn)程的全部資源,就像工廠里的工人共享工廠的設(shè)備和場(chǎng)地。處理機(jī)(CPU)則是分給線...

關(guān)鍵字: 進(jìn)程 線程

北京2025年8月13日 /美通社/ -- 近日,北京積算科技有限公司(以下簡(jiǎn)稱(chēng)"積算科技")推出一站式AlphaFold3在線算力服務(wù),現(xiàn)已開(kāi)放免費(fèi)使用。其內(nèi)置優(yōu)化后的AlphaFold3模型,支持...

關(guān)鍵字: ALPHA 代碼 圖形化 蛋白質(zhì)

北京2025年7月21日 /美通社/ -- 浪潮信息宣布元腦企智一體機(jī)已率先完成對(duì)Kimi K2 萬(wàn)億參數(shù)大模型的適配支持,并實(shí)現(xiàn)單用戶(hù)70 tokens/s的流暢輸出速度,為企業(yè)客戶(hù)高效部署應(yīng)用大模型提供高處...

關(guān)鍵字: 模型 AGENT TOKEN 代碼

7月18日,一則“微信安卓安裝包出現(xiàn)5處fxxk”的話題,迅速登上微博熱搜,吸引了眾多網(wǎng)友的熱議和關(guān)注。

關(guān)鍵字: 代碼 程序員

共鑒AI未來(lái),緬懷先輩貢獻(xiàn) 深圳 2025年5月21日 /美通社/ -- 5月16日下午,深圳市金澄智創(chuàng)AI+傳承迎來(lái)了喬遷之喜,一場(chǎng)意義非凡的活動(dòng)在新址盛大舉行?;顒?dòng)現(xiàn)場(chǎng)星光熠熠,莊世平前輩之子莊榮新先生、南方財(cái)經(jīng)...

關(guān)鍵字: AI AI技術(shù) BSP 代碼

C語(yǔ)言代碼優(yōu)化與性能提升是軟件開(kāi)發(fā)中至關(guān)重要的一環(huán)。優(yōu)化C語(yǔ)言代碼不僅可以提高程序的執(zhí)行效率,還可以減少資源消耗,提升用戶(hù)體驗(yàn)。

關(guān)鍵字: C語(yǔ)言 代碼

線程和進(jìn)程各有其獨(dú)特的優(yōu)缺點(diǎn)。線程執(zhí)行效率高,而進(jìn)程則在安全性和資源管理方面表現(xiàn)出色。在多道程序設(shè)計(jì)環(huán)境中,進(jìn)程的并發(fā)執(zhí)行和資源共享能力得到了充分利用,從而提高了系統(tǒng)的整體效率和資源利用率。

關(guān)鍵字: 線程 進(jìn)程

Qt 路線圖致力于實(shí)現(xiàn)與各行業(yè)技術(shù)棧的無(wú)縫集成,助力企業(yè)與開(kāi)發(fā)者使用自選工具,更高效地構(gòu)建、擴(kuò)展和維護(hù)軟件解決方案。 芬蘭埃斯波 2025年5月7日 /美通社/ -- 在今日舉行的2025年Qt全球峰會(huì)上,Qt...

關(guān)鍵字: GROUP 生態(tài)系統(tǒng) 開(kāi)發(fā)者 代碼

——首批"專(zhuān)家級(jí)數(shù)字員工"部署上崗,構(gòu)建組織傳承與人才戰(zhàn)略的AI導(dǎo)師矩陣 北京2025年4月25日 /美通社/ -- 在生成式AI技術(shù)加速重構(gòu)組織能力與人才機(jī)制的當(dāng)下,如何留住專(zhuān)家經(jīng)驗(yàn)、培養(yǎng)管理人才...

關(guān)鍵字: AI 智能體 矩陣 代碼
關(guān)閉