資料介紹
1 引言
本文分析了Windows 系統的進程調度機制,并設計了一種基于Windows 操作系統內核驅動的多核CPU 線程管理方法,實現了一個基于Windows 內核驅動的線程管理服務系統,它能讓用戶根據每一個任務線程對CPU 資源的需要程度和對實時性的要求,在多核CPU上合理為線程分配CPU 核。
圖1 Windows 內核調度結構體關系圖
2 Windows 系統的進程調度方法分析
Windows NT 中的每一個進程都是EPROCESS 結構體。此結構體中除了進程的屬性之外還引用了其它一些與實現進程緊密相關的結構體。例如,每個進程都有一個或幾個線程,線程在系統中就是ETHREAD 結構體。簡要描述一下存在于這個結構體中的主要的信息,這些信息都是由對內核函數的研究而得知的。首先,結構體中有KPROCESS 結構體,這個結構體中又有指向這些進程的內核線程(KTHREAD)鏈表的指針(分配地址空間),基優先級,在內核模式或是用戶模式執行進程的線程的時間,處理器affini ty(掩碼,定義了哪個處理器能執行進程的線程),時間片值。在ETHREAD 結構體中還存在著這樣的信息:進程ID、父進程ID、進程映象名。
在E P R O C E S S 結構體中還有指向P E B 的指針。
ETHREAD 結構體還包含有創建時間和退出時間、進程ID 和指向EPROCESS 的指針,啟動地址,I/O 請求鏈表和KTHREAD 結構體。在KTHREAD 中包含有以下信息:內核模式和用戶模式線程的創建時間,指向內核堆?;泛晚旤c的指針、指向服務表的指針、基優先級與當前優先級、指向APC 的指針和指向T E B 的指針。
KTHREAD 中包含有許多其它的數據,通過觀察這些數據可以分析出KTHREAD 的結構。圖1 描述了這些結構體之間的關系。
通過遍歷KPROCESS 結構體中的ETHREAD,找到系統中當前所有的KTHREAD 結構,這個結構中的偏移量為0x124 處的Affinity 域(Windows XP sp3)即為設置CPU 親緣性掩碼的內存地址。在此重點解釋CPU 親緣性的概念,CPU 親緣性就是指在系統中能夠將一個或多個進程或線程綁定到一個或多個處理器上運行,這是期待已久的特性。也就是說:" 在1號處理器上一直運行該程序"或者是"在所有的處理器上運行這些程序,而不是在0 號處理器上運行"。然后, 調度器將遵循該規則,程序僅僅運行在允許的處理器上。在Windows 操作系統上,給程序員設定CPU 親緣性的接口是用一個32 位的雙字型數表示的, 它被稱為親緣性掩碼(Affinity bitMask)。親緣性掩碼是一系列的二進制位,每一位代表一個CPU 單元是否可執行當前任務。例如一個在具有四個CPU 的PC 機上( 或四核CPU) ,親緣性掩碼的形式的二進制數如下式所示:
0000000000000000000000000000XXXXB
其中自右向左,每一位代表0 到31 號CPU是否可用,由于本機只有四個CPU, 所以只有前四個位可用,X 為1則代表當前任務可執行在此位代表的CPU 上,X 為0 則代表當前任務不可執行在此位代表的CPU 上, 例如:
00000000000000000000000000000010B
代表當前任務只能執行在1 號 CPU 上(CPU 下標記數從0 開始),又如0x00000004 代表當前任務只能執行在2 號CPU 上,0x00000003 代表當前任務可以運行在0號和1 號CPU 上。
Windows 的進程調度代碼是在它的SySTem 進程下的,所以它不屬于任何用戶進程上下文。調度代碼在適當的時機會切換進程上下文,這里的切換進程上下文是指進程環境的切換, 包括內存中的可執行程序, 提供程序運行的各種資源。進程擁有虛擬的地址空間,可執行代碼, 數據, 對象句柄集, 環境變量, 基礎優先級, 以及最大最小工作集等的切換。而Windows 最小的調度單位是線程, 只有線程才是真正的執行體,進程只是線程的容器。Windows 的調度程序在時間片到期,或有切換線程指令執行(如Sleep,KeWaitForSingleObject 等函數)時, 將會從進程線程隊列中找到下一個要調度的線程執行體,并裝入到KPCR(Kernel ' s Processor CONtr ol Re g i o n , 內核進程控制區域) 結構中,CPU 根據KPCR 結構中的KPRCB 結構執行線程執行體代碼。而在多核CPU 下,當Windows 調度代碼執行時,從當前要調度執行的KTHREAD 結構中取出Affinity,并與當前PC 機上的硬件配置數據中的CPU 掩碼作與操作,結果寫入到指定的CPU,例如雙核CPU 的設備掩碼為0x03,如果當前KTHREAD 里的Affinity 為0x01,那么0x01&0x03=0x01,這樣執行體線程會被裝入CPU1的KPRCB 結構中得以執行,調度程序不會把這個線程交給CPU2 去執行。此過程如圖2 所示。這就是為線程選擇指定CPU 核的原理。
本文分析了Windows 系統的進程調度機制,并設計了一種基于Windows 操作系統內核驅動的多核CPU 線程管理方法,實現了一個基于Windows 內核驅動的線程管理服務系統,它能讓用戶根據每一個任務線程對CPU 資源的需要程度和對實時性的要求,在多核CPU上合理為線程分配CPU 核。
圖1 Windows 內核調度結構體關系圖
2 Windows 系統的進程調度方法分析
Windows NT 中的每一個進程都是EPROCESS 結構體。此結構體中除了進程的屬性之外還引用了其它一些與實現進程緊密相關的結構體。例如,每個進程都有一個或幾個線程,線程在系統中就是ETHREAD 結構體。簡要描述一下存在于這個結構體中的主要的信息,這些信息都是由對內核函數的研究而得知的。首先,結構體中有KPROCESS 結構體,這個結構體中又有指向這些進程的內核線程(KTHREAD)鏈表的指針(分配地址空間),基優先級,在內核模式或是用戶模式執行進程的線程的時間,處理器affini ty(掩碼,定義了哪個處理器能執行進程的線程),時間片值。在ETHREAD 結構體中還存在著這樣的信息:進程ID、父進程ID、進程映象名。
在E P R O C E S S 結構體中還有指向P E B 的指針。
ETHREAD 結構體還包含有創建時間和退出時間、進程ID 和指向EPROCESS 的指針,啟動地址,I/O 請求鏈表和KTHREAD 結構體。在KTHREAD 中包含有以下信息:內核模式和用戶模式線程的創建時間,指向內核堆?;泛晚旤c的指針、指向服務表的指針、基優先級與當前優先級、指向APC 的指針和指向T E B 的指針。
KTHREAD 中包含有許多其它的數據,通過觀察這些數據可以分析出KTHREAD 的結構。圖1 描述了這些結構體之間的關系。
通過遍歷KPROCESS 結構體中的ETHREAD,找到系統中當前所有的KTHREAD 結構,這個結構中的偏移量為0x124 處的Affinity 域(Windows XP sp3)即為設置CPU 親緣性掩碼的內存地址。在此重點解釋CPU 親緣性的概念,CPU 親緣性就是指在系統中能夠將一個或多個進程或線程綁定到一個或多個處理器上運行,這是期待已久的特性。也就是說:" 在1號處理器上一直運行該程序"或者是"在所有的處理器上運行這些程序,而不是在0 號處理器上運行"。然后, 調度器將遵循該規則,程序僅僅運行在允許的處理器上。在Windows 操作系統上,給程序員設定CPU 親緣性的接口是用一個32 位的雙字型數表示的, 它被稱為親緣性掩碼(Affinity bitMask)。親緣性掩碼是一系列的二進制位,每一位代表一個CPU 單元是否可執行當前任務。例如一個在具有四個CPU 的PC 機上( 或四核CPU) ,親緣性掩碼的形式的二進制數如下式所示:
0000000000000000000000000000XXXXB
其中自右向左,每一位代表0 到31 號CPU是否可用,由于本機只有四個CPU, 所以只有前四個位可用,X 為1則代表當前任務可執行在此位代表的CPU 上,X 為0 則代表當前任務不可執行在此位代表的CPU 上, 例如:
00000000000000000000000000000010B
代表當前任務只能執行在1 號 CPU 上(CPU 下標記數從0 開始),又如0x00000004 代表當前任務只能執行在2 號CPU 上,0x00000003 代表當前任務可以運行在0號和1 號CPU 上。
Windows 的進程調度代碼是在它的SySTem 進程下的,所以它不屬于任何用戶進程上下文。調度代碼在適當的時機會切換進程上下文,這里的切換進程上下文是指進程環境的切換, 包括內存中的可執行程序, 提供程序運行的各種資源。進程擁有虛擬的地址空間,可執行代碼, 數據, 對象句柄集, 環境變量, 基礎優先級, 以及最大最小工作集等的切換。而Windows 最小的調度單位是線程, 只有線程才是真正的執行體,進程只是線程的容器。Windows 的調度程序在時間片到期,或有切換線程指令執行(如Sleep,KeWaitForSingleObject 等函數)時, 將會從進程線程隊列中找到下一個要調度的線程執行體,并裝入到KPCR(Kernel ' s Processor CONtr ol Re g i o n , 內核進程控制區域) 結構中,CPU 根據KPCR 結構中的KPRCB 結構執行線程執行體代碼。而在多核CPU 下,當Windows 調度代碼執行時,從當前要調度執行的KTHREAD 結構中取出Affinity,并與當前PC 機上的硬件配置數據中的CPU 掩碼作與操作,結果寫入到指定的CPU,例如雙核CPU 的設備掩碼為0x03,如果當前KTHREAD 里的Affinity 為0x01,那么0x01&0x03=0x01,這樣執行體線程會被裝入CPU1的KPRCB 結構中得以執行,調度程序不會把這個線程交給CPU2 去執行。此過程如圖2 所示。這就是為線程選擇指定CPU 核的原理。
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- Windows CE.net操作系統的內核定制
- 安全關鍵的嵌入式實時操作系統內核 5次下載
- STEP7與Windows操作系統的兼容性 6次下載
- 如何實現一個微內核操作系統的設計 28次下載
- Linux操作系統分析與實踐PDF電子書免費下載 15次下載
- 一種多核實時操作系統的應用配置工具 0次下載
- Windows CE 進程、線程和內存管理三 0次下載
- Windows CE 進程、線程和內存管理一 0次下載
- RTX實時操作系統內核演示 9次下載
- 多核架構及編程技術 36次下載
- 基于WRK的操作系統課程設計 37次下載
- Linux0.01內核分析與操作系統設計
- 嵌入式操作系統的內核研究
- Windows 2000中文操作系統培圳教程 0次下載
- Windows XP操作系統 ppt課件 0次下載
- Windows操作系統中的常用命令 695次閱讀
- 基于優先級調度的嵌入式實時操作系統內核詳解(下) 936次閱讀
- 國產操作系統之中科方德桌面系統安裝 8859次閱讀
- FreeRTOS:一個迷你的實時操作系統內核 1015次閱讀
- 操作系統中搶占式和非搶占式內核的區別 1994次閱讀
- 什么是多線程 1304次閱讀
- 一個用rust制造的新的現代操作系統Aero 1608次閱讀
- TinyOS操作系統的工作原理、應用技術及應用分析 6386次閱讀
- 基于Windows NT多線程實現智能蓄電池遠程監控系統的設計 1860次閱讀
- Linux操作系統修改內核參數的三種方法詳細說明 1.1w次閱讀
- 基于S3C2410處理器對Windows CE 5.0操作系統實現BSP移植 1069次閱讀
- windows10操作系統安全模式的使用技巧 1295次閱讀
- 嵌入式操作系統是什么_嵌入式操作系統有哪些 2w次閱讀
- 基于FreeRTOS的嵌入式實時操作系統的原理和實現 6713次閱讀
- Windows內核模式下的字符串操作 4909次閱讀
下載排行
本周
- 1電子電路原理第七版PDF電子教材免費下載
- 0.00 MB | 1489次下載 | 免費
- 2單片機典型實例介紹
- 18.19 MB | 91次下載 | 1 積分
- 3S7-200PLC編程實例詳細資料
- 1.17 MB | 27次下載 | 1 積分
- 4筆記本電腦主板的元件識別和講解說明
- 4.28 MB | 18次下載 | 4 積分
- 5開關電源原理及各功能電路詳解
- 0.38 MB | 9次下載 | 免費
- 6基于AT89C2051/4051單片機編程器的實驗
- 0.11 MB | 4次下載 | 免費
- 7基于單片機和 SG3525的程控開關電源設計
- 0.23 MB | 3次下載 | 免費
- 8基于單片機的紅外風扇遙控
- 0.23 MB | 3次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費
- 2PADS 9.0 2009最新版 -下載
- 0.00 MB | 66304次下載 | 免費
- 3protel99下載protel99軟件下載(中文版)
- 0.00 MB | 51209次下載 | 免費
- 4LabView 8.0 專業版下載 (3CD完整版)
- 0.00 MB | 51043次下載 | 免費
- 5555集成電路應用800例(新編版)
- 0.00 MB | 33562次下載 | 免費
- 6接口電路圖大全
- 未知 | 30319次下載 | 免費
- 7Multisim 10下載Multisim 10 中文版
- 0.00 MB | 28588次下載 | 免費
- 8開關電源設計實例指南
- 未知 | 21539次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935053次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537791次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234313次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233045次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191183次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183277次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138039次下載 | 免費
評論
查看更多