999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

嵌入式Linux在SMP系統上的移植研究與實現

2016-11-25 09:00:28朱蘇建邵培南
電子設計工程 2016年18期
關鍵詞:嵌入式系統

朱蘇建,邵培南,金 剛

(華東計算技術研究所 上海 200233)

嵌入式Linux在SMP系統上的移植研究與實現

朱蘇建,邵培南,金 剛

(華東計算技術研究所 上海 200233)

基于自主開發以雙核嵌入式CPU EM8301為處理核心的嵌入式應用的目的,針對雙核CPU芯片的系統結構和Linux內核的特性,通過研究嵌入式Linux操作系統在SMP系統上的移植,探討SMP架構多核硬件平臺下的啟動流程、任務調度策略、任務間同步與互斥、中斷處理等問題,結合自主研發嵌入式應用的實際需求,得到解決上述問題的方案,完成嵌入式Linux在SMP系統上的移植,并實現嵌入式Linux在自主CPU芯片上的成功運行。

嵌入式;Linux內核;對稱多處理器;移植

如何不斷提升處理器性能一直是處理器研究的重要內容,在單核處理器時代,提高處理器主頻一直是提高處理器性能的主要方式。但由于工業工藝的限制,處理器主頻已經很難再有大幅度的提升,并且功耗增加的代價也已經超出了提高主頻所能帶來的收益。這一難題隨著多核處理器的出現得到了很大程度上的解決,單一處理器的主頻對性能的限制被突破。多核處理器就是將一個或多個CPU核集成到一個芯片內,多個CPU核心共同承擔系統負載,完成功能需求,形成多個處理器核心(Chip Multi-Processing,CMP)的并行體系結構,這樣就可以將處理器主頻保持在較低水平的同時提高處理器性能[1]。

EM8301是針對以太網網絡通信應用開發的一款雙核嵌入式CPU,該嵌入式CPU的內核和系統結構都是自主設計。首先需要選擇較為高效和可靠的操作系統進行移植,使其滿足該嵌入式CPU內核的功能需求,以便進一步研究和實現基于該CPU的嵌入式應用板。作為開源系統的嵌入式Linux操作系統,系統結構易于研究和應用,同時,Linux內核實現了對SMP的支持,因此本文選擇嵌入式Linux作為移植目標。考慮到嵌入式 CPU EM8301的硬件特性,本文選擇使用Linux-3.17.2版本的內核,開展針對多核EM8301的操作系統移植研究和實現。文中重點對 SMP(Symmetric Multi-Processing)多核平臺下移植過程中的內核啟動流程、任務調度策略、任務間同步與互斥、中斷處理等問題進行分析解決。

1 硬件平臺的系統結構

EM8301嵌入式CPU的系統結構框圖如圖1所示。

圖1 EM8301嵌入式CPU系統結構框圖

EM8301嵌入式CPU的內核是參考PowerPC指令集自主設計的 CPU核心 E300。E300內核集成了 32 kB指令Cache和32 kB數據Cache,支持存儲管理功能。

EM8301的外圍接口包括:DDR、GMAC、PCIE、串口等。

2 嵌入式Linux的SMP架構分析

Linux的代碼完全開放及其良好的結構設計,使其非常適用于嵌入式系統。由于Linux系統的開源特性,目前出現了許多針對嵌入式硬件系統的單處理器Linux內核版本。隨著多核處理器的應用領域不斷擴展,這些單處理器的Linux內核版本已經無法滿足現有嵌入式應用的需求。因此,必須對所選用的Linux內核進行重新改進和設計,適應當前的問題。但是從單核處理器到多核處理器,原有的操作系統模型已經無法滿足現有的功能需求,整個模型都需要發生變化[2],主要體現在以下幾個方面:

1)內核的啟動過程。在單處理器上,內核的啟動只需要完成一個CPU的初始化,而在多核處理器上,必須有新的啟動方式,否則會造成混亂。多核處理器并不同時啟動處理器上的所有核心,而是首先確定一個CPU作為主核心,啟動這一主核心并完成必需的初始化操作。這個主核心稱為 BP(Booting Processor)。在BP完成一定的初始化操作之后,再逐個喚醒其它的次處理器核心,這些次 CPU被稱為 SP(Secondary Processor)。在所有次處理器核心(SP)都啟動后,就和主核心(BP)共同承擔系統負載,實現處理器性能的最大利用。

2)高速緩存一致性。從EM8301嵌入式CPU的系統結構圖中可以看出,EM8301的兩個CPU(CPU0、CPU1)分別獨享32 kB的數據Cache。系統中存在大量共享數據被各個處理器調用和修改,這些數據在各處理器的數據Cache中存有副本。當處理器修改共享數據時,僅是修改數據Cache中的副本,并不對共享數據本身產生影響。而數據的修改對另一個處理器是不可見的,另一個處理器在調用或者修改同一數據時,無法獲得被修改后的最新數據,這樣就會造成Cache不一致。通常情況下,Cache不一致問題主要有軟件和硬件解決兩種不同的方法:一種是通過軟件的方法實現,由軟件來控制數據的修改,以保證一致性,但這種方法會使操作系統更加復雜,影響系統性能;另一種方法是通過硬件的方法實現,在硬件上使用Cache一致性維護邏輯,EM8301嵌入式CPU就是采用的這種方法。

3)負載的平衡。單核處理器中的單一處理器內核完成所有的系統功能需求,承擔系統負載,因此無需考慮負載平衡的問題。而在多處理器中,所有的處理器核心共同承擔負載,如果負載不平衡,出現某些處理器上的任務量偏重而其它處理器比較空閑,就會使處理器資源得不到充分利用,使用多處理器的優勢就沒有體現出來。所以在多核架構下,系統的負載是由多個CPU共同承擔,操作系統必須處理好CPU核負載均衡的問題。

4)任務之間的同步與互斥。在單處理器上,只要保證在內核中運行進程是非搶占的,就能確保進程是互斥的。而在多處理器上,系統中有多個CPU,由于多個進程可以同時運行在不同的CPU核心上,就必須引入新的同步與互斥機制。并且在Linux2.6以后版本的Linux內核中,為了提高系統的實時性,一個內核任務可以被搶占[3],非搶占內核幾乎已被淘汰。

5)中斷與異常處理。在單處理器上,一個CPU完成中斷響應、異常處理等操作,處理機制較為容易實現。而在多核處理器中,在工作的多個處理器核心中選擇一個合適的CPU進行中斷的響應和異常的處理需要新的機制進行控制,以實現合理分配中斷和異常處理給相應的CPU。

3 嵌入式Linux的SMP平臺移植實現

目前,Linux-3.17.2版本的內核已經能夠很好的支持SMP系統,這為移植提供了便利。本文針對自主開發的一款雙核嵌入式CPU EM8301,開展嵌入式Linux操作系統的移植研究,移植后的Linux內核應該達到以下目標:

1)Linux內核能夠支持嵌入式多核處理器系統,在自主嵌入式CPU上成功運行,同時保留Linux效率高、可靠性強的特點,實現從單處理器向多處理器的功能拓展;

2)成功移植的內核應擁有可擴展的系統架構,該內核應當易于配置,并且實現多核服務與底層硬件的分離。

在前面已經分析過嵌入式Linux從單處理器到多處理器的主要變化,下面就對具體的移植過程中的問題進行分析與實現。

3.1 啟動過程

Linux系統中,多核的啟動是由BP(Booting Processor)引導SP(Secondary Processor)的啟動。在啟動最初的Bootrom階段,每個CPU都會識別自身的ID,如果ID是0,則引導Bootloader和Linux內核執行,如果ID不是0,就將自身置于WFI或WFE狀態,并等待CPU0的喚醒[4]。啟動的流程圖如圖2所示。

圖2 多核Linux啟動流程

具體的實現過程是,BP通過start_kernel()函數完成初始化,并在最后調用rest_init()函數,通過rest_init()創建一個內核線程kernel_init()來為SP的啟動布置好運行環境。

Kernel_init()內核線程首先調用smp_init_cpus()函數獲取EM8301系統中CPU核的個數,smp_init_cpus(void)實現的代碼如下:

然后通過smp_prepare_cpus()函數設置SP啟動的地址,具體調用的是flags_set(virt_to_phys(secondary_startup)),其中secondary_startup就是SP被喚醒的執行入口,因為此時SP的MMU尚未開啟,所以要將其轉換為物理地址。

最后smp_boot_secondary()完成最終的SP喚醒工作,實現代碼如下:

調用的write_pen_release()會將pen_release變量設置為要喚醒的CPU核的CPU號,而后通過arch_send_wakeup_ipi_mask()給要喚醒的CPU發IPI中斷,這時SP就會從前面smp_prepare_cpus()函數設置的地址 secondary_startup處開始執行。接著就是SP進行初始化操作,在所有的SP完成初始化后,SP和BP一起共同承擔系統負載,完成功能需求,此時就需要完善的多處理器任務調度策略。

3.2 任務調度策略

任務在雙核處理器上調度需要滿足兩個前提條件,才能保證任務在運行空間上的數據一致性[5]:1)多個任務在執行過程中如需進行相互之間的通信操作,必須通過調用消息處理模塊進行處理,避免多任務之間的共享內存,以消除可能產生的重入隱患;2)內核的可重入性。保證內核的接口操作函數在執行過程中不被打斷,即保證函數操作為原子操作,同時避免操作過程中引入各類重入問題。當滿足這兩個條件時,上層調用接口時數據訪問的一致性才能夠得到保證。

EM8301嵌入式CPU的兩個CPU核心使用一個操作系統內核,在同步模式下進行工作,共同完成系統指令。在這種同步模式下,單核處理器對指令流的控制方式已經無法滿足實際需要,idle任務會導致指令流出現斷流。因此在雙核處理器上,為了防止指令流斷流的情況出現,要為每一個處理器核設置獨立無關的idle任務。

在雙核處理器中,實現任務的透明調度對系統來說很重要,這樣用戶任務只需確定其功能是否正確,無需關心任務具體在哪個CPU核上運行。為了使任務調度具有透明性,需要在處理器內核中新增3個不同功能的任務隊列,便于任務的分配運行。如圖3所示。

1)ready隊列:系統在運行過程中,將存在大量的任務,因此系統需要保證大量不同優先級和同一優先級任務的正常運行。如圖3中所示,ready隊列的結構包含兩個主要部分,左側部分是一個優先級指針數組,用于區分不同優先級,右側部分則是一個雙向鏈表,用于保存同一優先級的多個任務。這樣的ready隊列可以保證大規模任務在多個CPU核上的合理分配。

圖3 任務隊列數據結構

2)tick隊列:tick隊列即為延時隊列,任務在被掛到tick隊列后,通過delay計數控制延遲運行。系統任務通過調用taskDelay()函數來改變當前的工作狀態。當該函數被執行后,其任務的系統狀態發生改變,由 ACTIVE轉變為 TICK_ DELAY,同時該任務將被放入到tick隊列中,并設置一個delay計數。tick隊列中的任務都擁有的delay計數對任務的TICK_DELAY進行控制。每當有一個tick中斷,系統內核將對tick隊列中所有任務的delay計數都減一。隨后將對delay計數進行檢測,如有delay計數為0,則把對應的任務重新加入到ready隊列中。在多核處理器的環境下,每個核的tick中斷不會對同一任務的delay計數進行刷新操作,保證tick隊列在邏輯上分離同核任務。

3)active隊列:在該嵌入式系統中可運行的任務都將被放到active隊列中。

同時,在系統中增加scheduler模塊,用于管理ready,tick,active3個任務隊列,并基于round-robin策略和多優先級策略實現系統任務的調度功能。基于雙核處理器的內核調度結構圖如圖4所示。

圖4 雙核處理器中scheduler位置示意圖

Scheduler模塊的總體流程是:任務處理函數通過系統接口調用該模塊,在調用過程中選擇調度任務的策略作為參數提交給scheduler模塊。根據這一參數,scheduler模塊運行對應的子模塊進行處理。在完成處理后,scheduler模塊將任務放入到ready隊列合適的位置中。

3.3 任務間同步與互斥

在單核系統上,每個任務宏觀上并行執行,但在微觀上某一時刻并不存在并行,而是只有一個任務在執行。在這樣的系統上,同步和互斥問題相對比較容易解決,只要簡單的采取禁止中斷的方式能夠保證對臨界資源的互斥訪問。而多核平臺上的操作系統在運行時,同一時刻可能有多個任務執行,這個時候單條指令中完成的操作也會受到干擾出現系統問題,因為可能存在兩個核同時對某一內存或者數據進行操作。由此來看,傳統的方法有時不能滿足這種多核情況下的需求,SMP系統需要新的同步與互斥機制。

為了保證SMP環境下內核功能的正常實現以及系統共享資源的合理分配和利用,Linux中使用了新的鎖機制:自旋鎖(spin_lock)[6]。自旋鎖是一種底層同步機制,是用于解決多處理器并發造成的各類問題的特殊鎖,只能被一個內核任務所持有,保證共享資源的互斥使用。當某個處理器內核執行線程中需要調用共享資源時,該內核首先將申請自旋鎖。自旋鎖可用,則會分配給該內核,使其可以進入臨界區對資源進行操作。完成操作后,該內核將向系統釋放自旋鎖。如果鎖被占用,任務并不會直接進入睡眠狀態,而是忙等待直到正在使用自旋鎖的內核釋放鎖后再獲得鎖,繼續運行。

在EM8301嵌入式CPU的操作系統中,使用了任務自旋鎖控制任務對臨界區的數據訪問。任務自旋鎖的實現過程中是禁止本CPU核上任務調度的,當任務獲取該任務自旋鎖時,運行此任務的CPU核是不允許其它任務發生優先搶占的,下面是任務自旋鎖的設計與實現。

任務自旋鎖實現任務的同步和互斥需要以下3個操作:

1)任務自旋鎖的初始化。將任務自旋鎖的nextTicket、ticketInService、cpuIndex的屬性分別設置為0、0、-1,表示下個獲取該任務自旋鎖的任務標識為0,當前獲取到任務自旋鎖的任務標識為0,所對應的CPU核標識為-1,這樣的屬性設置便于實現自旋鎖的獲取和使用。

2)任務自旋鎖的獲取流程如圖5所示,在獲取任務自旋鎖后,任務線程可以進行相應的操作。

圖5 任務自旋鎖獲取流程

3)任務自旋鎖的釋放。將cpuIndex設置回初始值-1,表示CPU核標識無效,將ticketInService加1,釋放自旋鎖時打開任務調度,至此完成自旋鎖操作。

任務自旋鎖首先進行初始化的操作,只有完成后才能被處理器核獲得和使用,處理器核在自旋鎖空閑時獲得并使用。當完成臨界區的操作后釋放該鎖,等待下一次任務獲取自旋鎖操作,任務自旋鎖采用票鎖的算法。

3.4 中斷處理

中斷機制是一個操作系統必不可少的機制,在單核處理器的系統中,通過外部中斷控制器處理中斷問題是一個較為常用的方式,這個外部中斷控制器處理系統的所有中斷,控制器的處理效率影響操作系統性能。但在多核處理器的系統中,若系統中的所有中斷都由一個處理器處理,則會影響系統的性能,同時,這個CPU上運行的任務可能會一直被打斷,造成嚴重的問題。

所以在多核處理器系統中,需要同時由多個CPU核來處理不同的中斷,多個CPU核分擔中斷處理,以保證不會因為單一處理器處理中斷造成系統問題。那么就需要一個分配中斷的中斷管理策略,一般有如下兩種方法[7]:

1)靜態分配:不同的中斷請求和不同的處理器核進行分類綁定,每個處理器核處理特定的中斷請求,這種方法實現方式相對簡單,同時系統的并行性也較高。

2)動態分配:系統確定每個處理器核是否屏蔽某種中斷請求。每當有中斷請求時,系統首先對各個處理器屏蔽的中斷請求進行判斷,然后動態地把這一中斷分配給未屏蔽這一中斷的處理器核,由該處理器處理這一中斷。

由于EM8301硬件系統提供了對于中斷控制的支持,進行一定的配置工作就可以實現中斷請求的分配,因此關注的重點是核間中斷。核間中斷是處理器間的中斷,是任務在運行過程中主動觸發的任務調度。在多核處理器環境下,某一任務上運行的任務調度果會在整個系統的任務調度中產生全局影響。比如,有兩個任務分別運行在CPU0和CPU1上,任務1阻塞在某個信號量上,而這時任務0觸發了這個信號量,這時將喚醒任務1,使它從等待隊列轉入就緒隊列,但通常任務1不會立即執行,而是等到下一個時鐘中斷到來時才會執行,這時就需要提出核間中斷的概念了,只有處理器核間中斷能解決這種延時并處理這種情況,并且核間中斷子程序主要完成清中斷,防止這類中斷的反復進入造成嚴重的系統問題,然后切換任務。

4 結束語

文中基于一款自主開發的雙核嵌入式CPU,分析了多核硬件結構和從單核到多核操作系統所發生的變化,提出在SMP硬件平臺上進行嵌入式Linux操作系統內核移植過程中需要解決的問題,包括多核啟動過程、任務調度策略、任務間同步與互斥、中斷處理等,并給出了相應的解決方案。另外,由于本文僅針對的是雙核嵌入式CPU系統,隨著SMP系統中核個數的增加,保持系統負載均衡的難度可能會提高,核間通信的效率可能會下降,這就需要在后續的工作中設計出針對SMP更加完善的操作系統。

[1]鄧竹莎.面向多處理器結構的嵌入式Linux系統研究與實現[D].成都:電子科技大學,2006.

[2]陳云川.面向多核處理器的嵌入式操作系統研究[D].成都:電子科技大學,2009.

[3]曾樹洪,劉衛國.Linux內核搶占的實現機制分析[J].惠州學院學報:自然科學版,2008,23(3):56-59.

[4]宋寶華.Linux設備驅動開發詳解[M].3版.北京:機械工業出版社,2015.

[5]張國杰.嵌入式Linux在多核多線程平臺上的移植研究與實現[D].重慶:重慶大學,2008.

[6]彭正文,徐新愛.基于SMP的Linux內核自旋鎖分析[J].江西教育學院學報(綜合),2005,26(3):23-25,28.

[7]李嬌嬌.面向SMP架構處理器平臺操作系統主要模塊的設計與實現[D].西安:西安電子科技大學,2012.

Research and implementation of embedded Linux transplantation on SMP system

ZHU Su-jian,SHAO Pei-nan,JIN Gang
(East China Institute of Computer Technology,Shanghai 200233,China)

The thesis is aimed to conduct independent research and development of embedded applications,which are implemented with dual-core embedded EM 8301 CPU as a processing center.Additionally,the thesis also discusses varied topics,ranging from the characteristics of dual-core CPU chip systems and Linux kernels to transplantation of Linux operating system to SMP system.Based on these discussions,it goes further to investigate problems related to the multi-core hardware platform built under SMP system.These problems are related to start-up process,task-scheduling strategies,the synchronization and mutual exclusion among tasks,as well as interruption processing.In the end,the thesis proposes a solution that solves the above problems and meanwhile caters to the practical needs of developing embedded applications.Furthermore,the proposal can also prove that embedded Linux can be transplanted to SMP system,and functions successfully on self-developed CPU chip.

embedded;Linux kernel;symmetric Multi-processing;transplantation

TN710

A

1674-6236(2016)18-0093-04

2015-09-16 稿件編號:201509116

朱蘇建(1990—),男,江蘇邳州人,碩士研究生。研究方向:計算機軟件與理論軟件工程。

猜你喜歡
嵌入式系統
Smartflower POP 一體式光伏系統
工業設計(2022年8期)2022-09-09 07:43:20
WJ-700無人機系統
ZC系列無人機遙感系統
北京測繪(2020年12期)2020-12-29 01:33:58
基于PowerPC+FPGA顯示系統
半沸制皂系統(下)
TS系列紅外傳感器在嵌入式控制系統中的應用
電子制作(2019年7期)2019-04-25 13:17:14
嵌入式系統通信技術的應用
電子制作(2018年18期)2018-11-14 01:48:16
搭建基于Qt的嵌入式開發平臺
連通與提升系統的最后一塊拼圖 Audiolab 傲立 M-DAC mini
嵌入式軟PLC在電鍍生產流程控制系統中的應用
電鍍與環保(2016年3期)2017-01-20 08:15:32
主站蜘蛛池模板: 国产成人福利在线视老湿机| 国产精品理论片| 国产女人喷水视频| 久久福利片| 国产美女在线观看| 久久免费观看视频| 国产成人禁片在线观看| 日韩欧美一区在线观看| 久久99热这里只有精品免费看| 亚洲成人黄色在线| 亚洲第一区在线| 亚洲欧美成人综合| 91色综合综合热五月激情| 国产欧美日韩在线在线不卡视频| 一级毛片免费不卡在线视频| 99ri精品视频在线观看播放| 国产色伊人| 久久精品娱乐亚洲领先| 亚洲精品无码抽插日韩| 日本免费一区视频| 热思思久久免费视频| 亚洲国产精品一区二区第一页免| 欧美色图久久| 亚洲日韩AV无码一区二区三区人| 成人午夜视频网站| 69综合网| 亚洲天堂777| 91激情视频| 18禁不卡免费网站| 久热中文字幕在线| 狠狠五月天中文字幕| 国产另类视频| 97在线免费| 性欧美久久| 亚洲国产成人无码AV在线影院L| 亚洲综合久久成人AV| 区国产精品搜索视频| 综合网久久| 欧美亚洲香蕉| 免费观看精品视频999| 国产精品无码AV片在线观看播放| 欧美一级黄片一区2区| 5555国产在线观看| 热re99久久精品国99热| 成人午夜视频免费看欧美| 国产乱人免费视频| 一本视频精品中文字幕| 无码电影在线观看| 国产大片喷水在线在线视频| 91在线无码精品秘九色APP| 日韩免费视频播播| 91精品啪在线观看国产| 在线a网站| 国产欧美日韩专区发布| 国产久操视频| 久久久久免费看成人影片 | av大片在线无码免费| 国产精品蜜芽在线观看| 一级毛片基地| 免费福利视频网站| 免费女人18毛片a级毛片视频| 亚洲成a人片| 色综合久久88| 久久精品电影| 97人人做人人爽香蕉精品| 欧美在线综合视频| 日韩毛片在线播放| 亚洲AⅤ无码日韩AV无码网站| 六月婷婷激情综合| 色哟哟国产成人精品| 在线日本国产成人免费的| 四虎影视无码永久免费观看| 午夜激情婷婷| 亚洲久悠悠色悠在线播放| 日韩黄色在线| 思思99热精品在线| 波多野结衣中文字幕一区二区| 免费人成黄页在线观看国产| 91九色国产porny| 欧美国产精品不卡在线观看| 国产在线一区二区视频| 欧美人人干|