亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Linux內(nèi)核修改的車載監(jiān)控系統(tǒng)實(shí)時性研究

        2010-04-12 00:00:00梁中華,吳曉云,馮興樂
        現(xiàn)代電子技術(shù) 2010年15期

        摘 要:針對以往車載監(jiān)控系統(tǒng)存在較大延時的缺點(diǎn),設(shè)計(jì)一種實(shí)時寬帶車載監(jiān)控系統(tǒng)。該系統(tǒng)通過在32位ARM微處理器中選用可搶占內(nèi)核和O(1)調(diào)度器的Linux 2.6.13 操作系統(tǒng),以直接修改Linux 內(nèi)核的方式,從線程化中斷、自旋鎖可搶占兩方面提高系統(tǒng)的實(shí)時響應(yīng)性。測試表明,此系統(tǒng)的數(shù)據(jù)傳輸實(shí)時性和帶寬可以滿足車載監(jiān)控的要求。

        關(guān)鍵詞:Linux; ARM微處理器; 線程化中斷; 自旋鎖; 實(shí)時響應(yīng)性

        中圖分類號:TN919; TP914文獻(xiàn)標(biāo)識碼:A

        文章編號:1004-373X(2010)15-0173-04

        Real-time Vehicle Monitoring System Based on Linux Kernel Modification

        LIANG Zhong-hua1,WU Xiao-yun1, FENG Xing-le1,2

        (1. School of Information Engineering, Chang’an University, Xi’an 710064, China; 2. Xi’an Research Institute of Navigation Technology, Xi’an 710068, China)

        Abstract: A real-time wide-band vehicle monitoring system was designed in view of the long time delay of former vehicle monitoring system. The Linux2.6.13 kernel of O(1) scheduler and preemption in the 32 bits ARM microprocessor is selected. In order to improve real-time responsiveness, the kernel is modified directly by means of threaded interrupt and preemptive spin lock. It is demonstrated that the real-time performance and the band width of this system can satisfy the request of vehicle monitoring system.

        Keywords: Linux; ARM microprocessor; threaded interrupt; preemptive spin lock; real-time responsiveness

        0 引 言

        隨著信息化社會和公路交通的快速發(fā)展,車載監(jiān)控系統(tǒng)已廣泛應(yīng)用于物流、公交、客運(yùn)等方面,監(jiān)控內(nèi)容也由單純的位置信息轉(zhuǎn)變?yōu)閷?shí)時在線的多媒體信息,這對系統(tǒng)的實(shí)時處理能力和傳輸帶寬提出了更高的要求,選用高性能的嵌入式CPU成為目前高端車載監(jiān)控系統(tǒng)的發(fā)展趨勢,其中選擇嵌入式操作系統(tǒng)又成為影響傳輸效率和實(shí)時性的重要因素。目前主流的商用實(shí)時嵌入式操作系統(tǒng)(如QNX ,VxWorks 和pSOS 等)由于價格昂貴、技術(shù)保密的特點(diǎn)而限制了它的廣泛應(yīng)用。而Linux操作系統(tǒng)具有開放代碼,易于移植的優(yōu)點(diǎn),但由于其設(shè)計(jì)初衷是實(shí)現(xiàn)多任務(wù)/多用戶功能,強(qiáng)調(diào)各任務(wù)共享資源的公平性,采用非搶占式的調(diào)度方法,所以無法滿足實(shí)時系統(tǒng)的需求[1]。為了使Linux適應(yīng)實(shí)時系統(tǒng)的要求,許多文獻(xiàn)從內(nèi)核構(gòu)架、調(diào)度機(jī)制和搶占能力等方面對現(xiàn)有的Linux操作系統(tǒng)進(jìn)行改良。文獻(xiàn)[2]提出在Linux內(nèi)核中插入搶占點(diǎn)的辦法提高實(shí)時性,但該方法需要在很多模塊中插入搶占點(diǎn),實(shí)現(xiàn)復(fù)雜度很高;另外,若缺乏有效的機(jī)制保證搶占前后內(nèi)核狀態(tài)的一致性,特別是搶占點(diǎn)的插入位置選擇不當(dāng)可能使整個系統(tǒng)崩潰。文獻(xiàn)[3]提出在Linux 內(nèi)核基礎(chǔ)上增加實(shí)時內(nèi)核的雙內(nèi)核方式,該方法雖然實(shí)現(xiàn)了硬實(shí)時,但舍棄了Linux 固有的穩(wěn)定性、可靠性、支持多種架構(gòu)的優(yōu)點(diǎn),并且需要針對實(shí)時內(nèi)核重新編寫驅(qū)動程序。

        本文以提高車載監(jiān)控系統(tǒng)的實(shí)時性為出發(fā)點(diǎn),通過線程化中斷、自旋鎖可搶占兩方面對Linux內(nèi)核進(jìn)行修改,以基于ARM9內(nèi)核的友善之臂mini2440開發(fā)平臺,結(jié)合高性能的GPS模塊和寬帶GPRS通訊模塊,設(shè)計(jì)了實(shí)時寬帶車載監(jiān)控系統(tǒng),可以實(shí)現(xiàn)圖像、聲音、位置信息和報警等多任務(wù)的快速切換和高效隊(duì)列管理,提高了系統(tǒng)的實(shí)時性。

        1 車載監(jiān)控系統(tǒng)的整體結(jié)構(gòu)

        車載監(jiān)控系統(tǒng)的結(jié)構(gòu)框圖如圖1所示。主要包括信息采集模塊、數(shù)據(jù)處理模塊、通信傳輸模塊和監(jiān)控中心4部分。

        車載監(jiān)控系統(tǒng)的工作原理如下:

        GPS模塊采集位置信息,攝像頭采集監(jiān)控圖像,這些數(shù)據(jù)經(jīng)串口傳送到ARM控制器,經(jīng)數(shù)據(jù)處理后,將位置信息顯示于終端顯示器,并通過GPRS無線通信模塊將位置信息和多媒體數(shù)據(jù)發(fā)送到監(jiān)控中心,存儲到車輛監(jiān)控?cái)?shù)據(jù)庫??蛻艨梢灾苯釉L問監(jiān)控中心,查看具體的監(jiān)控圖像和聲音信息,實(shí)現(xiàn)對監(jiān)控車輛的位置查詢、跟蹤、調(diào)度、控制指令,若車載終端遇到緊急情況,可以通過自動或人工方式把位置坐標(biāo)或報警信息迅速傳給監(jiān)控中心,進(jìn)行應(yīng)急處理。

        圖1 車載監(jiān)控系統(tǒng)結(jié)構(gòu)框圖

        車載監(jiān)控系統(tǒng)的軟件工作主要包括基于嵌入式微處理器的Linux操作系統(tǒng)優(yōu)化和車載監(jiān)控應(yīng)用軟件兩部分。其中應(yīng)用軟件的主要功能包括:GPS數(shù)據(jù)的接收處理與傳輸,信令的接收、處理與傳輸,建立基于TCP/IP協(xié)議的GPRS數(shù)據(jù)傳輸與通信。操作系統(tǒng)的優(yōu)化是影響系統(tǒng)實(shí)時性的重要因素,下面將重點(diǎn)闡述。

        2 系統(tǒng)實(shí)時性分析

        盡管Linux操作系統(tǒng)的設(shè)計(jì)初衷是實(shí)現(xiàn)多任務(wù)共享資源,但隨著Linux在實(shí)時控制系統(tǒng)中的應(yīng)用,提高Linux實(shí)時性能也成為一個研究熱點(diǎn)。通常來講,影響Linux實(shí)時性能的因素主要包括中斷處理機(jī)制、定時器的時鐘精度、內(nèi)核是否可被搶占、實(shí)時任務(wù)調(diào)度機(jī)制和調(diào)度算法等[4]。許多學(xué)者也在這些方面不斷改進(jìn)Linux操作系統(tǒng)的實(shí)時性,例如本系統(tǒng)采用的Linux 2.6.13內(nèi)核采用了可搶占式內(nèi)核和高效的調(diào)度算法,在中斷響應(yīng)和進(jìn)程間調(diào)度切換時間等方面較以前的版本有明顯的改進(jìn)[5],但是內(nèi)核中仍有大量的不可搶占區(qū)域影響著系統(tǒng)的實(shí)時性能。

        其中最主要的制約因素有兩點(diǎn):

        (1) 中斷處理。在標(biāo)準(zhǔn)的Linux系統(tǒng)中,中斷不可搶占,若系統(tǒng)一直處在中斷處理狀態(tài),這樣再緊急的實(shí)時任務(wù)都無法運(yùn)行。

        (2) 自旋鎖。Linux 2.6內(nèi)核普遍使用自旋鎖,在自旋鎖期間任務(wù)不能被搶占,這將增加搶占延遲。

        具體到本文研究的車載監(jiān)控系統(tǒng),搶占式操作系統(tǒng)是根據(jù)優(yōu)先級從高到低的順序依次調(diào)度任務(wù)。分別是:系統(tǒng)監(jiān)視、鍵盤掃描、位置信息采集和GPRS通信。其中系統(tǒng)監(jiān)視任務(wù)將按照預(yù)先設(shè)定的處理表監(jiān)視并處理其他任務(wù),并能在監(jiān)視任務(wù)出現(xiàn)差錯時對其處理并恢復(fù)運(yùn)行,提高系統(tǒng)運(yùn)行的可靠性。位置信息采集部分放到定時器中斷程序中執(zhí)行,根據(jù)預(yù)設(shè)的時間間隔采集經(jīng)度、緯度等位置信息,存儲并更新地理信息緩沖區(qū)的內(nèi)容;最后把位置信息按序存儲在非易失性數(shù)據(jù)存儲器SDRAM中。

        由于車輛在行駛過程中速度很快,有些需要中斷常規(guī)的位置信息傳輸任務(wù),而響應(yīng)實(shí)時任務(wù)(例如緊急報警、事故處理、路線引導(dǎo)等),因此對系統(tǒng)的實(shí)時性提出了更高的要求。因此,本文從監(jiān)控系統(tǒng)的實(shí)際需要出發(fā),借鑒TimeSys Linux思路[6],從中斷處理和自旋鎖兩方面入手直接修改內(nèi)核,采用線程化中斷,修改spinlock自旋鎖,以此保證及時響應(yīng)車載系統(tǒng)中發(fā)生的緊急任務(wù)。

        2.1 線程化中斷

        線程化中斷的核心是將中斷當(dāng)作一個線程進(jìn)行處理,同時根據(jù)中斷是否緊急,又可分為實(shí)時線程化中斷和非實(shí)時線程化中斷兩種類型。在中斷初始化階段,線程化中斷與常規(guī)中斷的惟一區(qū)別在于:線程化中斷在內(nèi)核初始化創(chuàng)建線程函數(shù)init()中調(diào)用init_hardirqs為每個中斷創(chuàng)建一個在內(nèi)核空間執(zhí)行的內(nèi)核線程。具體來講,init_hardirqs()函數(shù)首先判斷irq_desc[]數(shù)組的0~223項(xiàng)中是否存在action不為空,且該項(xiàng)聲明可以被線程化(非IRQ_NODELAY)的項(xiàng),若存在,則調(diào)用kthread_create()創(chuàng)建內(nèi)核線程,并且喚醒該線程。

        創(chuàng)建中斷內(nèi)核線程的主要代碼如下:

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

        {

        irq_desc_t *desc = irq_desc + i;

        if (desc->action !(desc->status IRQ_NODELAY));

        desc->thread = kthread_create(do_irqd,desc,″IRQ%d″,irq);

        wake_up_process(desc->thread);

        }

        對于已被線程化的非緊急中斷,根據(jù)中斷號為其設(shè)置一定的靜態(tài)實(shí)時優(yōu)先級和調(diào)度策略。中斷到來后,調(diào)用wake_up_process()函數(shù)喚醒中斷處理線程,比較該中斷線程和當(dāng)前運(yùn)行任務(wù)的優(yōu)先級后作出調(diào)度決策,這樣就保證當(dāng)前運(yùn)行的高優(yōu)先級實(shí)時任務(wù)不會受到非緊急中斷的影響;而在其他時刻內(nèi)核線程將分別調(diào)用do_hardirq()函數(shù)和handle_IRQ_event()函數(shù)來判斷并響應(yīng)需要處理的中斷。

        可以看出:中斷線程化具有以下優(yōu)點(diǎn):

        (1) 對于實(shí)時任務(wù),由于分配了更高的優(yōu)先級,而且在調(diào)度時無需在用戶空間和內(nèi)核空間之間切換,使其運(yùn)行更加高效。

        (2) 對于緊急中斷(比如時鐘中斷或緊急報警事件),內(nèi)核保持原來的中斷處理方式,而不為其創(chuàng)建中斷線程,這樣就保證了緊急中斷的快速響應(yīng)。

        (3) 由于Linux 2.6內(nèi)核采用復(fù)雜度為O(1)的調(diào)度機(jī)制,不會因?yàn)樵黾觾?nèi)核線程數(shù)而額外增加調(diào)度開銷。

        2.2 自旋鎖改互斥鎖

        由于Linux 2.6.13內(nèi)核中使用了自旋鎖spinlock,存在大量的內(nèi)核不可搶占的臨界區(qū),嚴(yán)重影響系統(tǒng)的實(shí)時性,本系統(tǒng)用實(shí)時互斥鎖rt_mutex代替spinlock,以提高內(nèi)核的實(shí)時性能。其結(jié)構(gòu)體如下:

        typede fstruct{

        struct rt_mutex lock; /*實(shí)時互斥鎖*/

        unsigned int break_lock;

        } spinlock_t;

        struct rt_mutex

        { …

        raw_spinlock_t wait_lock;/*原來的spinlock_t*/

        struct task_struct *owner;/*擁有該鎖的進(jìn)程的信息*/

        struct plist wait_list;/*優(yōu)先級化的等待隊(duì)列*/

        int owner_prio;/*擁有該鎖的進(jìn)程的優(yōu)先級 */

        }

        設(shè)置等待隊(duì)列優(yōu)先級的目的是為了改善實(shí)時性,每次spinlock保持者釋放鎖時總是喚醒優(yōu)先級最高的進(jìn)程或線程,而喚醒的時間復(fù)雜度為O(1)。對于實(shí)時rt_mutex,如果當(dāng)前任務(wù)優(yōu)先級高,可以搶占該鎖,并且在新的鎖擁有者的task_struct結(jié)構(gòu)中增加一項(xiàng)mutex_list_t*locks_held,用于記錄進(jìn)程所擁有的互斥鎖的相關(guān)信息,包括從該互斥鎖繼承的優(yōu)先級、互斥鎖的擁有者等,同時將鎖的先前擁有者添加到該鎖的等待隊(duì)列中;若不能獲得當(dāng)前鎖,則把當(dāng)前任務(wù)放到鎖的優(yōu)先級等待隊(duì)列中,直到鎖的先前擁有者釋放該鎖,喚醒等待隊(duì)列中最高優(yōu)先級的任務(wù)進(jìn)入臨界區(qū)。結(jié)構(gòu)類mutex_list_t 的定義如下:

        typedef struct {

        struct task_struct proc;/* 擁有鎖的進(jìn)程*/

        struct mutex_list_t *next, *prev; /* 隊(duì)列列表指針*/

        struct mutex_t rt_mutex;/* 互斥鎖*/

        unsigned long inherit_rt_priority; /* 該鎖繼承的實(shí)時優(yōu)先級*/

        unsigned long inherit_policy;/* 該鎖繼承的調(diào)度策略*/

        } mutex_list_t;

        另外,實(shí)時內(nèi)核中的一些底層臨界區(qū),比如調(diào)度器的運(yùn)行隊(duì)列、硬件寄存器必須是不可搶占的,所以必須由不可搶占的自旋鎖保護(hù)[7]。函數(shù)映射結(jié)構(gòu)PICK_OP是允許自旋鎖與互斥鎖共存的機(jī)制,但要在編譯階段將鎖轉(zhuǎn)化為合適的類型(rt_mutex或者spinlock):

        #define TYPE_EQUAL(lock, type) builtin_types_compatible_p(typeof(lock), type *)

        #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))

        spin_op((spinlock_t *)(lock));

        else bad_spinlock_type();

        } while (0)

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

        根據(jù)宏處理的結(jié)果,若鎖類型為spinlock_t,將運(yùn)行函數(shù)_spin_lock;若鎖類型為raw_spinlock_t,將運(yùn)行函數(shù)_raw_spin_lock。

        3 試驗(yàn)結(jié)果

        為了提高實(shí)時性測試結(jié)果的有效性和可信度,本文采用軟硬件協(xié)同測試的思想[8],即在相同的系統(tǒng)硬件環(huán)境下,分別通過軟件編程和硬件輔助設(shè)備測試系統(tǒng)的實(shí)時性能,并比較分析其結(jié)果,以達(dá)到互相驗(yàn)證和支持的目的。圖2和圖3分別是對采用標(biāo)準(zhǔn)的Linux 2.6.13和修改后的Linux 2.6.13,對位置信息和報警任務(wù)的響應(yīng)時間進(jìn)行5萬次測試后的響應(yīng)時間對照圖,表1是平均響應(yīng)時間的對比表。

        圖2 位置信息響應(yīng)時間

        圖3 報警任務(wù)響應(yīng)時間

        表1 任務(wù)響應(yīng)平均時間對比結(jié)果μs

        位置信息報警信息

        標(biāo)準(zhǔn)的2.6內(nèi)核1 472203

        修改后的2.6內(nèi)核16013

        以上測試結(jié)果表明,通過對實(shí)時Linux 2.6.13內(nèi)核進(jìn)行中斷線程化和互斥鎖的改進(jìn),監(jiān)控系統(tǒng)的實(shí)時性提高了一個數(shù)量級。

        4 結(jié) 語

        通過線程化中斷和自旋鎖改為互斥鎖兩方面對Linux 內(nèi)核進(jìn)行改進(jìn),提高了基于ARM9的車載監(jiān)控系統(tǒng)的實(shí)時性能。設(shè)計(jì)并完成了寬帶實(shí)時車載監(jiān)控系統(tǒng)的樣機(jī),能夠?qū)崟r傳輸車輛位置數(shù)據(jù)和多媒體信息,解決了多任務(wù)并行處理的實(shí)時性問題。隨著3G網(wǎng)絡(luò)的建成和完善,研究基于3G網(wǎng)絡(luò)的超寬帶實(shí)時可視車載監(jiān)控系統(tǒng)將是未來發(fā)展的方向。

        參考文獻(xiàn)

        [1]王繼剛,顧國昌,徐立峰,等.強(qiáng)實(shí)時性Linux 內(nèi)核的研究與設(shè)計(jì)[J].系統(tǒng)工程與電子技術(shù), 2006, 28(12):1932-1935.

        [2]WANG Yu-chung, LIU Kwei Jay. Some discussion on the low latency patch for Linux[D]. Berkeley: University of California, 2001.

        [3]陳文星,張輝宜.嵌入式Linux的實(shí)時性改進(jìn)技術(shù)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2006,16(10):114-117.

        [4]曾樹洪,劉衛(wèi)國.Linux內(nèi)核搶占的實(shí)現(xiàn)機(jī)制分析[J].惠州學(xué)院學(xué)報:自然科學(xué)版,2008:28(3):56-59.

        [5]何克右,周彩貞.Linux 2.6進(jìn)程調(diào)度機(jī)制的剖析[J].華中師范大學(xué)學(xué)報:自然科學(xué)版,2007,41(4):520-522.

        [6]RAO M V Panduranga, SHET K Chandrashekar, BALAKRISHNA R,et.al. Development of scheduler for real time and embedded system domain[C]//22nd International Conference on Advanced Information Networking and Applications. [S.l.]: Workshops, 2008: 1-6.

        [7]褚文奎,張鳳鳴,樊曉光.嵌入式Linux系統(tǒng)實(shí)時性能測試研究[J].系統(tǒng)工程與電子技術(shù),2007,29(8):1386-1390.

        [8]YANG Jian, CHEN Yu, WANG Hua-yong, et al. A Linux kernel with fixed interrupt latency for embedded real-time system[C]//Proceedings of the Second International Conference on Embedded Software and Systems. [S.l.]: [s.n.], 2005: 131-135.

        [9]高婷,王曉楠.基于域的交通聯(lián)網(wǎng)監(jiān)控模型研究[J].現(xiàn)代電子技術(shù),2010,33(5):161-163,170.

        亚洲专区一区二区三区四区五区| 色悠久久久久综合欧美99| 色综合久久天天综线观看| 99热在线播放精品6| 中文字幕文字幕视频在线| 久久99亚洲精品久久久久| 亚洲欧美激情在线一区| 亚洲国产成人精品福利在线观看| 亚洲人妻有码中文字幕| 日本男人精品一区二区| 天天爽天天爽夜夜爽毛片| 国产人成精品综合欧美成人| 国产精品国产三级国产在线观 | 99久久99久久久精品久久| 手机在线观看亚洲av| 亚洲一区二区三区乱码在线中国| 一夲道无码人妻精品一区二区| 欧美va免费精品高清在线| 亚洲精品中文有码字幕| 亚洲一区二区三区国产| 帮老师解开蕾丝奶罩吸乳网站| 国产精品麻豆最新AV| 女同性恋亚洲一区二区| 亚洲国产成人久久精品不卡| 人人妻人人爽人人澡欧美一区| 毛片免费在线播放| 另类人妖在线观看一区二区| 亚洲一区二区国产激情| 亚洲人成影院在线观看| 亚洲电影一区二区三区 | 国产免费一区二区三区免费视频| 精品一区二区三区在线观看视频| 黑人一区二区三区在线| 中文字幕第一页人妻丝袜| 国产99久久久国产精品免费看| 91麻豆精品激情在线观看最新| 午夜日本理论片最新片| 亚洲av无码国产精品色午夜软件 | 一本色道加勒比精品一区二区| 日日摸天天碰中文字幕你懂的| 国产精品香蕉在线观看|