欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

基于片上多處理器的線程調(diào)度實(shí)現(xiàn)方法

文檔序號(hào):6582035閱讀:186來源:國(guó)知局
專利名稱:基于片上多處理器的線程調(diào)度實(shí)現(xiàn)方法
技術(shù)領(lǐng)域
本發(fā)明屬于嵌入式操作系統(tǒng)技術(shù)領(lǐng)域,具體涉及一種基于片上多處理器的線程調(diào)度實(shí) 現(xiàn)方法。
背景技術(shù)
處理器的性能提升主要依靠提高其主頻,然而隨著主頻的不斷提升,處理器的晶體管 數(shù)目也不斷增大,功耗問題逐漸顯現(xiàn),顯然工藝的提升可以解決部分功耗問題,但工藝提 升本身就是一個(gè)耗資巨大的工程。由于多種因素的合力作用下,人們目前幾乎己不再具備 制造更大更快的單核處理器的能力?,F(xiàn)在的處理器制造廠商開始采用一種新的微處理器設(shè) 計(jì)模式片上多處理器(chip multiprocesseor,CMP)。片上多處理器就是集成到一個(gè)處 理器芯片上,作為一個(gè)整體工作的一組單核處理器,此時(shí)幾個(gè)較小的處理器內(nèi)核填滿了本 來被單個(gè)大型單核處理器占用的芯片面積。
在程序員看來,CMP系統(tǒng)中的多核處理器內(nèi)核是不同的實(shí)體,因此需要將傳統(tǒng)的馮*諾 依曼計(jì)算模型替換為全新的并行編程模型(parallel programming model)。實(shí)用這種模型, 程序員必須將應(yīng)用程序劃分為多個(gè)線程,每個(gè)線程是一個(gè)"半"獨(dú)立的實(shí)體,多個(gè)線程可 在CMP系統(tǒng)中不同的處理器內(nèi)核上并行執(zhí)行。此時(shí)如何合理的調(diào)度線程在各處理器上運(yùn)行 成為一個(gè)重要問題。傳統(tǒng)的調(diào)度算法有很多,例如先來先服務(wù),最短剩余時(shí)間調(diào)度,優(yōu) 先級(jí)調(diào)度,輪轉(zhuǎn)調(diào)度等。由于多核系統(tǒng)的興起時(shí)間不常,傳統(tǒng)的實(shí)時(shí)操作系統(tǒng)大多不支持 片上多處理器,但隨著片上多處理器的應(yīng)用日益廣泛, 一些商用的實(shí)時(shí)操作系統(tǒng)也開始對(duì) 片上多處理器的支持。各廠商支持片上多處理器的方案各有不同,實(shí)現(xiàn)方式大體可分為以 下三種
1. 基于同步原語(yǔ)擴(kuò)展的實(shí)時(shí)操作系統(tǒng)。這一方案就是在每個(gè)處理器上運(yùn)行一個(gè)獨(dú)立 的實(shí)時(shí)操作系統(tǒng),然后通過擴(kuò)展的組件庫(kù)來提供同步原語(yǔ)實(shí)現(xiàn)各處理器的通信。如風(fēng)河公 司的VxWorks。
2. 傳統(tǒng)的SMP結(jié)構(gòu)的實(shí)時(shí)操作系統(tǒng)。這是傳統(tǒng)的SMP結(jié)構(gòu),即一個(gè)實(shí)時(shí)操作系統(tǒng)調(diào) 度各線程到各CPU上運(yùn)行,由Linux發(fā)展來的操作系統(tǒng)一般采用這種方案。
3. 基于微內(nèi)核和分布式技術(shù)的實(shí)時(shí)操作系統(tǒng)。加拿大QNX公司的QNX實(shí)時(shí)操作系統(tǒng) 就采用這一方案。
以上三種方法實(shí)現(xiàn)多線程調(diào)度修改原操作系統(tǒng)代碼龐大,線程調(diào)度效率以及實(shí)時(shí)性不高,不太適用于硬實(shí)時(shí)系統(tǒng)。

發(fā)明內(nèi)容
本發(fā)明的目的在于提出一種基于片上多處理器的線程調(diào)度實(shí)現(xiàn)方法。 本發(fā)明提出的基于片上多處理器的線程調(diào)度實(shí)現(xiàn)方法,包括基于三維位圖的多線程就 緒隊(duì)列、實(shí)時(shí)內(nèi)核控制、線程分配,具體步驟如下
(1) 基于三維位圖的多線程就緒隊(duì)列
假設(shè)單芯片上有N個(gè)處理器核,把線程按M個(gè)優(yōu)先級(jí)標(biāo)記,在同一個(gè)優(yōu)先級(jí)下可以有
N個(gè)相同優(yōu)先級(jí)的線程,每個(gè)相同優(yōu)先級(jí)的線程按創(chuàng)建進(jìn)入就緒態(tài)的先后標(biāo)記,這樣可以 同時(shí)創(chuàng)建M傘N個(gè)線程,讓這樣一個(gè)線程隊(duì)列就緒時(shí)注冊(cè)在一張三維的就緒位圖中,位圖中
的每一位代表一個(gè)線程的狀態(tài),為l時(shí)表示就緒態(tài),0表示非就緒態(tài);
(2) 實(shí)時(shí)內(nèi)核控制
通過設(shè)置注冊(cè)表參數(shù)實(shí)時(shí)記錄當(dāng)前已注冊(cè)的進(jìn)程,同時(shí)為每個(gè)線程分配各自的線程棧 記錄線程的context (上下文),設(shè)置優(yōu)先級(jí)位便于線程恢復(fù)就緒態(tài),在采用優(yōu)先級(jí)判決表 中找出最高優(yōu)先級(jí)的同時(shí),利用注冊(cè)表控制査找當(dāng)前需要調(diào)度運(yùn)行N個(gè)線程的循環(huán)次數(shù); (3)線程分配
在片上多處理器的一個(gè)處理器核上運(yùn)行操作系統(tǒng),用于管理線程的狀態(tài)和分配工作。 在線程控制塊結(jié)構(gòu)體中設(shè)置成員變量標(biāo)記該線程是否被調(diào)度和被調(diào)度的CPU號(hào),采用位圖 副本便于修改記錄線程的調(diào)度情況。用線程控制塊指針唯一標(biāo)識(shí)各個(gè)線程,在找出最高優(yōu) 先級(jí)的N個(gè)要調(diào)度的線程后,判斷各個(gè)CPU正在運(yùn)行的線程,相同的繼續(xù)運(yùn)行,不同的線 程分配在剩余的CPU上運(yùn)行,避免線程的多余切換,各個(gè)CPU主動(dòng)調(diào)用切換函數(shù)完成此工 作。
本發(fā)明具有的有益效果是:本發(fā)明是一種基于片上多處理器的線程調(diào)度實(shí)現(xiàn)方法,合 理有效的實(shí)現(xiàn)多處理器上的線程調(diào)度,同時(shí)具有很好的實(shí)時(shí)性能。


圖1是8個(gè)處理器核64個(gè)優(yōu)先級(jí)的線程就緒位圖示意圖。 圖2是本發(fā)明的實(shí)施過程示意圖。 圖3是操作系統(tǒng)啟動(dòng)完畢后的數(shù)據(jù)結(jié)構(gòu)示意圖。
具體實(shí)施例方式
以下結(jié)合

本發(fā)明的方法。
實(shí)施例1:
4基于片上多處理器的線程調(diào)度實(shí)現(xiàn)方法,包括以下過程
1) 線程控制塊的定義。
線程控制塊(Thread Control Block, TCB)是包含線程相關(guān)信息的數(shù)據(jù)結(jié)構(gòu),包含了線 程執(zhí)行過程中所需的所有信息。其成員變量包括指向線程棧的指針(TCBstkptr)、線程 的優(yōu)先級(jí)(TCBprio)、線程的優(yōu)先級(jí)位,記錄同一優(yōu)先級(jí)線程在位圖中的位置 (TCBprioBit)、記錄線程是否被調(diào)度和被調(diào)度的CPU號(hào),未調(diào)度為-l (CPUID)、雙向鏈表 中指向該線程的前后線程控制塊(TCBnext、 TCBprev)、線程控制塊的位置(TCBX、 TCBY、 TCBBitX、 TCBBitY)(這四項(xiàng)用于加速線程進(jìn)入就緒態(tài),在線程創(chuàng)建初始化時(shí)賦值)等一 些其他變量。
2) 基于三維位圖的多線程就緒隊(duì)列。
線程就緒位圖用于管理就緒線程,這里以8個(gè)處理器核64個(gè)優(yōu)先級(jí)為例說明就緒位 圖。創(chuàng)建好的就緒位圖如圖l所示,此時(shí)在一個(gè)優(yōu)先級(jí)下可以有8個(gè)相同優(yōu)先級(jí)的線程, 同時(shí)可以創(chuàng)建管理512個(gè)不同的線程。
定義四個(gè)變量- char ReadyGro叩;char ReadyLayer[8]'■ char ReadyTable[8] [8]; char RegisterTable[64]; 8位變量ReadyGroup的每一位代表一組線程,8個(gè)優(yōu)先級(jí)的64 個(gè)線程。變量ReadyLayer[8]的每一項(xiàng)元素的每一位表示該組中各優(yōu)先級(jí)下有無線程。變 量ReadyTable[8] [8]—共有8*8=64個(gè)元素,每一個(gè)元素是一個(gè)8位的二進(jìn)制數(shù)表示一個(gè) 優(yōu)先級(jí),每一位代表該優(yōu)先級(jí)下可以創(chuàng)建的8個(gè)線程。變量RegisterTable[64]是一張注 冊(cè)表,用于記錄64個(gè)優(yōu)先級(jí)的線程在該優(yōu)先級(jí)下注冊(cè)登記的位置,該位置由創(chuàng)建注冊(cè)先 后決定。
3) 實(shí)時(shí)內(nèi)核控制。
通過線程就緒位圖的設(shè)置,協(xié)同以下算法提高操作系統(tǒng)的實(shí)時(shí)性。 定義五個(gè)變量TCB*TCBPrioTable[64] [8]; TCB *TCBHighReady [8]; TCB *TCBcur [8]; char MapTable[8]; char DecisionTable[256];變量TCBPrioTable[64] [8]用于保存每個(gè) 線程的線程控制塊指針,此變量在各線程創(chuàng)建初始化時(shí)賦值。變量TCBHighReady[8]保存 當(dāng)前要被調(diào)度的8個(gè)最高優(yōu)先級(jí)線程的線程控制塊指針。而變量TCBcur[8]保存當(dāng)前正在 運(yùn)行的8個(gè)線程的線程控制塊指針。變量MapTable[8]H00000001, 00000010, 00000100, 00001000, 00010000, 00100000, 01000000, 10000000};變量DecisionTable[256]是一 張
優(yōu)先級(jí)判決表,其值可以這樣得到,例如44=00101100, 二進(jìn)制數(shù)00101100從右往左數(shù)第一個(gè)1在第三個(gè)位置,既得DecisionTable[44]二3。 優(yōu)先級(jí)為prio的線程進(jìn)入就緒態(tài)時(shí)的偽代碼如下 ReadyGroup |= MapTable[prio》3];〃登記該線程所在組 ReadyLayer[prio>>3] |= MapTable[prio&0x07];〃登記該線程所在層 TCBprioBit= !fepTable[RegisterTable[prio]++];〃確定該線程優(yōu)先級(jí)位 ReadyTable[prio》3] [ prio&0x07]|= TCBprioBit;〃在位圖中登記 優(yōu)先級(jí)位prio、優(yōu)先級(jí)位為TCBprioBit的線程退出就緒態(tài)的偽代碼如下 if(ReadyTable[prio〉〉3][ prio&0x07]&=~ TCBprioBit==0) if (ReadyLayer [prio》3]&= MapTable [prio&0x07] ==0) ReadyGroup &= ~ MapTable [prio》3];
當(dāng)ReadyTable[prio》3] [ prio&0x07]所有位為0時(shí),ReadyLayer [prio》3]的相應(yīng) 位才清0,當(dāng)ReadyLayer |^]^0〉〉3]所有位為0時(shí),ReadyGroup的相應(yīng)位才清0。
由于有8個(gè)處理器核,要求找出8個(gè)最高優(yōu)先級(jí)線程完成調(diào)度,下一過程中說明這部 分類容,這里先說明采用判決表找出進(jìn)入就緒態(tài)的最高優(yōu)先級(jí)線程的優(yōu)先級(jí)prio的偽代 碼
High3Bit= DecisionTable[ReadyGroup]; Lo沐3Bit二 DecisionTable[ReadyLayer[High3Bit]]; prio二 (High3Bit《3) + Low3Bit; 4) 線程分配。
線程分配是把當(dāng)前就緒進(jìn)程中優(yōu)先級(jí)最高的8個(gè)線程找出,然后和當(dāng)前正在運(yùn)行的8 個(gè)線程比較,將不同的線程做切換,詳細(xì)過程如圖2所示。首先要復(fù)制位圖副本,包括變 量ReadyGroup、 ReadyLayer [8] 、 ReadyTable[8] [8],利用位圖副本找出當(dāng)前最高優(yōu)先級(jí) 的線程的prio,接著記錄該優(yōu)先級(jí)下最先就緒線程的TCB的指針于TC13HighReady[8],刪 除位圖副本中該線程(算法同線程退出就緒態(tài)),然后判斷是否査找最高優(yōu)先級(jí)的8個(gè)線 程完畢,沒有完畢接著判斷當(dāng)前優(yōu)先級(jí)prio下的所有就緒進(jìn)程是否記錄完畢,如果完畢 回到利用位圖副本找出當(dāng)前最高優(yōu)先級(jí)的線程的prio,為完畢則跳到記錄該優(yōu)先級(jí)下最先 就緒線程的TCB的指針于TC朋ighReady[8],直到查找最高優(yōu)先級(jí)的8個(gè)線程完畢。這部 分算法可由一下偽代碼實(shí)現(xiàn)
復(fù)制位圖副本;
int ChooseN=0;
6while(l)
{找出當(dāng)前最高優(yōu)先級(jí)的線程的prio;〃算法在過程3)中已描述 for(int j=0;j〈 RegisterTable[prio];」++)〃避免全局遍歷提高實(shí)時(shí)性 { TCBHighReady[ChooseN]= TCBPrioTable[prio][ MapTable[j]]; 刪除位圖副本中該線程; 〃同過程3)中線程退出就緒態(tài) If (++ChooseN〉=8) 〃這里已8個(gè)處理器核為例 跳出while循環(huán)結(jié)束;}} 上述TCBHighReady [8]査找完畢,接著依次判斷個(gè)CPU上運(yùn)行的線程是否包含于 TCBHighReady[8],標(biāo)記相同的線程為已調(diào)度,該CPU為已調(diào)度,然后為未調(diào)度的CPU分 配為調(diào)度的線程。具體流程如圖2。
當(dāng)線程分配完畢后,各CPU主動(dòng)調(diào)用線程切換函數(shù)完成保護(hù)現(xiàn)場(chǎng)及線程切換工作。 5) 操作系統(tǒng)啟動(dòng)后的數(shù)據(jù)結(jié)構(gòu)。
操作系統(tǒng)初始化時(shí)建立一個(gè)由M*N個(gè)線程控制塊TCB構(gòu)成的單向空線程鏈表,當(dāng)線程 被建立時(shí),鏈表的第一個(gè)TCB就賦給該線程,線程被刪除時(shí)歸還空線程鏈表。建立好的線 程TCB構(gòu)成一個(gè)雙向鏈表,其地址由指針數(shù)組TCBPrioTable[64] [8]保存。這里假設(shè)操作 系統(tǒng)初始化時(shí)創(chuàng)建了 1個(gè)優(yōu)先級(jí)位0的線程,3個(gè)優(yōu)先級(jí)位1的線程,3個(gè)優(yōu)先級(jí)為2的 線程,2個(gè)優(yōu)先級(jí)為3的線程,系統(tǒng)自動(dòng)創(chuàng)建8個(gè)優(yōu)先級(jí)為63的IDLE線程。則操作系統(tǒng) 啟動(dòng)后的數(shù)據(jù)結(jié)構(gòu)如圖3所示。此時(shí)TCBHighReady[8]、 TCBcur[8]指向相同的8個(gè)線程。
權(quán)利要求
1、一種基于片上多處理器的線程調(diào)度實(shí)現(xiàn)方法,其特征在于包括基于三維位圖的多線程就緒隊(duì)列、實(shí)時(shí)內(nèi)核控制、線程分配,具體步驟如下(1)基于三維位圖的多線程就緒隊(duì)列設(shè)單芯片上有N個(gè)處理器核,把線程按M個(gè)優(yōu)先級(jí)標(biāo)記,在同一個(gè)優(yōu)先級(jí)下有N個(gè)相同優(yōu)先級(jí)的線程,每個(gè)相同優(yōu)先級(jí)的線程按創(chuàng)建進(jìn)入就緒態(tài)的先后標(biāo)記,即可同時(shí)創(chuàng)建M*N個(gè)線程,該線程隊(duì)列就緒時(shí)注冊(cè)在一張三維的就緒位圖中;位圖中的每一位代表一個(gè)線程的狀態(tài),為1時(shí)表示就緒態(tài),0表示非就緒態(tài);(2)實(shí)時(shí)內(nèi)核控制通過設(shè)置注冊(cè)表參數(shù)實(shí)時(shí)記錄當(dāng)前已注冊(cè)的進(jìn)程,同時(shí)為每個(gè)線程分配各自的線程棧記錄線程的上下文,設(shè)置優(yōu)先級(jí)位便于線程恢復(fù)就緒態(tài);在采用優(yōu)先級(jí)判決表快速找出最高優(yōu)先級(jí)的同時(shí),利用注冊(cè)表控制查找當(dāng)前需要調(diào)度運(yùn)行N個(gè)線程的循環(huán)次數(shù);(3)線程分配在片上多處理器的一個(gè)處理器核上運(yùn)行操作系統(tǒng),用于管理線程的狀態(tài)和分配工作;在線程控制塊結(jié)構(gòu)體中設(shè)置成員變量標(biāo)記該線程是否被調(diào)度和被調(diào)度的CPU號(hào),采用位圖副本便于修改記錄線程的調(diào)度情況;用線程控制塊指針唯一標(biāo)識(shí)各個(gè)線程,在找出最高優(yōu)先級(jí)的N個(gè)要調(diào)度的線程后,判斷各個(gè)CPU正在運(yùn)行的線程,相同的線程繼續(xù)運(yùn)行,不同的線程分配在剩余的CPU上運(yùn)行,避免線程的多余切換,各個(gè)CPU主動(dòng)調(diào)用切換函數(shù)完成此工作。
全文摘要
本發(fā)明屬于嵌入式操作系統(tǒng)技術(shù)領(lǐng)域,具體涉及一種基于片上多處理器的線程調(diào)度實(shí)現(xiàn)方法。本發(fā)明以三維就緒位圖為基礎(chǔ),所有處理器共用此就緒位圖,每一個(gè)就緒線程在此位圖上標(biāo)記,提出操作系統(tǒng)的基于此位圖的線程分配算法,操作系統(tǒng)運(yùn)行在一個(gè)處理器核上。本發(fā)明通過三維位圖、注冊(cè)表、判決表等的使用大大提高系統(tǒng)的實(shí)時(shí)性能,同時(shí)分配多線程于多個(gè)處理器核上并行處理,提高了整體執(zhí)行速度。
文檔編號(hào)G06F9/46GK101673223SQ200910197530
公開日2010年3月17日 申請(qǐng)日期2009年10月22日 優(yōu)先權(quán)日2009年10月22日
發(fā)明者毅 凌, 蕓 陳 申請(qǐng)人:同濟(jì)大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
普兰县| 通州区| 常州市| 和林格尔县| 济源市| 彭州市| 沁阳市| 昭通市| 胶南市| 灌南县| 项城市| 宁河县| 岳普湖县| 固镇县| 盐源县| 福泉市| 徐闻县| 西乌珠穆沁旗| 奎屯市| 汝南县| 沙湾县| 鸡东县| 清新县| 甘泉县| 榆林市| 都江堰市| 天峻县| 萨迦县| 凌源市| 定兴县| 加查县| 漳平市| 务川| 红原县| 沈丘县| 长泰县| 镇康县| 龙岩市| 扶风县| 尖扎县| 平江县|