嵌入式系统嵌入式系统/ARM技术中的技术中的Windows操作系统多核操作系统多核CPU内核线内核线
程管理方法程管理方法
摘要:Windows 是采用CPU 时间片轮转多任务分配机制的非实时操作系统,无法满足实时性要求比较高的任务
需要。而随着CPU技术的快速发展,当前市场上双核甚至多核CPU 已成为主流,这使得在Windows 平台上用多
核CPU 的某些核独立执行任务,从而有效地提高软件的实时性成为可能。本文介绍一种在Windows 内核模式下
编写Windows 驱动程序,有效分配多核CPU 资源从而提高软件实时性的方法。 1 引言 本文分析了
Windows 系统的进程调度机制,并设计了一种基于Windows 操作系统内核驱动的多核CPU 线程管理方法,实现了
一个基于Windows 内核驱动的线程管理
摘要:Windows 是采用CPU 时间片轮转多任务分配机制的非实时操作系统,无法满足实时性要求比较高的任务需要。而随
着CPU技术的快速发展,当前市场上双核甚至多核CPU 已成为主流,这使得在Windows 平台上用多核CPU 的某些核独立执
行任务,从而有效地提高软件的实时性成为可能。本文介绍一种在Windows 内核模式下编写Windows 驱动程序,有效分配多
核CPU 资源从而提高软件实时性的方法。
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 中包含有以下信息:内核模式和用户模式线程的创建时间,指向内核堆栈基址和顶点的指
针、指向服务表的指针、基优先级与当前优先级、指向APC 的指针和指向T E B 的指针。
KTHREAD 中包含有许多其它的数据,通过观察这些数据可以分析出KTHREAD 的结构。图1 描述了这些结构体之间的关
系。
通过遍历KPROCESS 结构体中的ETHREAD,找到系统中当前所有的KTHREAD 结构,这个结构中的偏移量为0x124 处的
Affinity 域(Windows XP sp3)即为设置CPU 亲缘性掩码的内存地址。在此重点解释CPU 亲缘性的概念,CPU 亲缘性就是指在系
统中能够将一个或多个进程或线程绑定到一个或多个处理器上运行,这是期待已久的特性。也就是说:“ 在1号处理器上一直运行
该程序”或者是“在所有的处理器上运行这些程序,而不是在0 号处理器上运行”。然后, 调度器将遵循该规则,程序仅仅运行在