關(guān) 閉

新聞中心

EEPW首頁 > 工控自動化 > 設(shè)計應用 > Windows操作系統(tǒng)多核CPU內(nèi)核線程管理方法

Windows操作系統(tǒng)多核CPU內(nèi)核線程管理方法

作者: 時間:2011-01-20 來源:網(wǎng)絡 收藏

進程線程的兩種數(shù)據(jù)結(jié)構(gòu)


SYSTEM_PROCESS_INFORMATION 結(jié)構(gòu)

進程線程的兩種數(shù)據(jù)結(jié)構(gòu)

圖4 進程線程的兩種數(shù)據(jù)結(jié)構(gòu)。

3.3 線程管理服務系統(tǒng)應用程序設(shè)計

進程管理服務系統(tǒng)應用程序是要通過調(diào)用Win 32子系統(tǒng)的API 函數(shù)DeviceIoControl 來向線程管理服務系統(tǒng)驅(qū)動程序發(fā)送IRP 的,然后在IRP 結(jié)束之后把驅(qū)動程序中讀出的所有有用進程線程信息填入到指定的內(nèi)存中。這樣線程管理服務系統(tǒng)應用程序就可以根據(jù)所獲得的系統(tǒng)信息句柄來對線程 親緣性屬性進行設(shè)置。首先為DeviceIoControl 中的InputBuffer 申請一段內(nèi)存空間傳入給驅(qū)動程序,驅(qū)動程序讀取內(nèi)核空間進程線程信息寫入到這段內(nèi)存中,應用程序讀到信息并顯示給用戶。

在系統(tǒng)中應用程序為每一個 維護一個結(jié)構(gòu)體,內(nèi)容包括該 是否運行實時線程,該CPU 上運行的線程數(shù)(如果是實時線程CPU線程數(shù)為1),以及在此CPU上運行的線程結(jié)構(gòu)數(shù)組的首地址。系統(tǒng)通過對此CPU 結(jié)構(gòu)數(shù)組的解析來對線程進行管理。并通過DeviceIoControl函數(shù)把設(shè)置后的CPU 結(jié)構(gòu)交給驅(qū)動程序內(nèi)核。

3.4 修改 內(nèi)核結(jié)構(gòu)體

在驅(qū)動程序讀回應用程序下用戶的設(shè)置結(jié)果后,就需要按照用戶的設(shè)定修改KTHREAD 下的Affinity 域的掩碼值了。首先要找到KTHREAD 的線性內(nèi)存空間,PsGetCurrentProcess()內(nèi)核函數(shù)可以返回內(nèi)核下當前進程空間的E P R O C E S S 結(jié)構(gòu)。E P R O C E S S 結(jié)構(gòu)下的ActiveProcessLinks 域是LIST_ENTRY 結(jié)構(gòu),通過它可以遍歷所有的ETHREAD 結(jié)構(gòu),那么那到KTHREAD 下的Affinity 域就不難了,可以使用兩個循環(huán)嵌套來得到所有線程的Affinity 域并將其值設(shè)為應用程序中用戶的設(shè)定值。線程CPU 掩碼就被成功的修改了。當CPU 被設(shè)定為運行實時線程的CPU 時,在它上面運行的線程只能是一個實時線程,這時的運行線程數(shù)被設(shè)定為1; 當CPU被設(shè)定為非實時線程的時候,上面有可能除了任務線程運行之外,還有 系統(tǒng)進程下的線程。

4 軟件使用及性能測試

4.1 驅(qū)動的加載及軟件的使用

首先需要把本系統(tǒng)的驅(qū)動sys 文件加載到的服務管理器中,加載成功后打開應用程序,用戶可以通過應用程序中顯示出的當前系統(tǒng)內(nèi)的進程和線程進行選擇,并在GUI 圖形界面中對其CPU 占用率及CPU親緣性進行設(shè)置。

4.2 設(shè)置 CPU 親緣性測試

測試運行在雙核CPU 的PC 機上,系統(tǒng)運行一個要測試的任務線程(任務線程為一個108 次加法運算),四個其它線程(為測試方便,設(shè)為while 循環(huán)線程),限定了循環(huán)線程的CPU 親緣性掩碼為0x0001,任務線程的CPU親緣性為0x0002,這樣任務線程與其它線程分別在兩個核上運行,分別測試了任務線程單獨運行,任務線程與其它線程不設(shè)定CPU 親緣性,任務線程與其它線程設(shè)定CPU 親緣性三種情況下下任務線程的運行總時間如表2 所示。

表2
表2
從表2 分析, 設(shè)定任務線程的CPU 親緣性與其它線程所占用的CPU 分開,真正意義上的實現(xiàn)了任務的異步執(zhí)行,非常有效的提高了實時線程對CPU 資源的使用率。

5 結(jié)束語

本文分析了Windows 系統(tǒng)的內(nèi)核進程線程調(diào)度表2CPU 親緣性設(shè)定三種情況下任務線程運行時間表機制,并在此基礎(chǔ)上設(shè)計了一種基于Windows 內(nèi)核驅(qū)動的CPU 線程管理方法, 實現(xiàn)了這樣一個軟件系統(tǒng)。首先在Windows 內(nèi)核層獲取系統(tǒng)進程線程信息,然后再把信息傳入應用層,由應用層上的應用程序根據(jù)獲取的信息句柄,對進程進行操作,用戶在圖形界面下按照仿真任務對CPU 資源的不同需求,進行相應的設(shè)置,可以為指定線程設(shè)置CPU 親緣性的功能。在一定程度上為Windows 系統(tǒng)下的任務合理地分配了CPU 資源,為對實時性要求較高的任務提供了一個可靠的運行環(huán)境。

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

上一頁 1 2 3 下一頁

關(guān)鍵詞: Windows CPU 操作系統(tǒng) 多核

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉