第七章 线程的调度、优先级和亲缘性(4)
2009-05-16 14:48
211 查看
六、运用结构环境
环境结构使得系统能够记住线程的状态,这样,当下次线程拥有可以运行的C P U时,它就能够找到它上次中断运行的地方。
Windows实际上允许查看线程内核对象的内部情况,以便抓取它当前的一组 C P U寄存器。若要进行这项操作,只需要调用G e t T h r e a d C o n t e x t函数
BOOL GetThreadContext(HANDLE hThread , PCONTEXT pContext );
指定一个CONTEXT结构,对某些标志(该结构的ContextFlags成员)进行初始化,指明想要收回哪些寄存器,并将该结构的地址传递给GetThreadContext。然后该函数将数据填入你要求的成员.调GetThreadContext之前,应该调用SuspendThread,否则,线程可能被调度,而且线程的环境可能与你收回的不同(一个线程实际上有两个环境。一个是用户方式,一个是内核方式)。它只能返回线程的用户方式环境。
BOOL SetThreadContext(HANDLE hThread, CONST CONTEXT *pContext);
将新寄存器值放回线程的内核对象中, 修改其环境的线程应该首先暂停,否则其结果将无法预测。调用SetThreadContext之前,必须再次对CONTEXT的ContextFlags成员进行初始化。
七、线程的优先级
每个线程都会被赋予一个从0(最低)到3 1(最高)的优先级号码。当系统确定将哪个线程分配给CPU时,先查看有无优先级为3 1的线程可以调度,如果有就将该线程赋予一个CPU。在该线程的时间片结束时,系统再查看是否还有另一个优先级为3 1的线程可以运行,如果有,则调度之。如果无则查看有无优先级为30的线程可调度,以此类推。
低优先级的线程在运行时系统发现一个高优先级的线程准备要运行,那么系统就会立即暂停低优先级线程的运行(即使它处于它的时间片中) ,并将CPU分配给高优先级线程,使它获得一个完整的时间片。
当系统引导时,它会创建一个特殊的线程,称为 0页线程。该线程被赋予优先级0,它是整个系统中唯一的一个在优先级0上运行的线程。当系统中没有任何线程需要执行操作时,0页线程负责将系统中的所有空闲R A M页面置0。
环境结构使得系统能够记住线程的状态,这样,当下次线程拥有可以运行的C P U时,它就能够找到它上次中断运行的地方。
Windows实际上允许查看线程内核对象的内部情况,以便抓取它当前的一组 C P U寄存器。若要进行这项操作,只需要调用G e t T h r e a d C o n t e x t函数
BOOL GetThreadContext(HANDLE hThread , PCONTEXT pContext );
指定一个CONTEXT结构,对某些标志(该结构的ContextFlags成员)进行初始化,指明想要收回哪些寄存器,并将该结构的地址传递给GetThreadContext。然后该函数将数据填入你要求的成员.调GetThreadContext之前,应该调用SuspendThread,否则,线程可能被调度,而且线程的环境可能与你收回的不同(一个线程实际上有两个环境。一个是用户方式,一个是内核方式)。它只能返回线程的用户方式环境。
BOOL SetThreadContext(HANDLE hThread, CONST CONTEXT *pContext);
将新寄存器值放回线程的内核对象中, 修改其环境的线程应该首先暂停,否则其结果将无法预测。调用SetThreadContext之前,必须再次对CONTEXT的ContextFlags成员进行初始化。
七、线程的优先级
每个线程都会被赋予一个从0(最低)到3 1(最高)的优先级号码。当系统确定将哪个线程分配给CPU时,先查看有无优先级为3 1的线程可以调度,如果有就将该线程赋予一个CPU。在该线程的时间片结束时,系统再查看是否还有另一个优先级为3 1的线程可以运行,如果有,则调度之。如果无则查看有无优先级为30的线程可调度,以此类推。
低优先级的线程在运行时系统发现一个高优先级的线程准备要运行,那么系统就会立即暂停低优先级线程的运行(即使它处于它的时间片中) ,并将CPU分配给高优先级线程,使它获得一个完整的时间片。
当系统引导时,它会创建一个特殊的线程,称为 0页线程。该线程被赋予优先级0,它是整个系统中唯一的一个在优先级0上运行的线程。当系统中没有任何线程需要执行操作时,0页线程负责将系统中的所有空闲R A M页面置0。
相关文章推荐
- Windows核心编程 第七章 线程的调度、优先级和亲缘性(上)
- 第七章 线程的调度、优先级和亲缘性(5)
- Windows核心编程 第七章 线程的调度、优先级和亲缘性(下)
- 第七章 线程的调度、优先级和亲缘性(6)
- 第七章 线程的调度、优先级和亲缘性(7)
- 读书笔记:第七章 线程的调度、优先级和亲缘性
- Windows内核之线程的调度,优先级,亲缘性
- 线程的调度、优先级和亲缘性
- 线程的调度、优先级和亲缘性
- Windows核心编程<读书笔记七>线程的调度、优先级以及亲缘性 【含有代码】
- Windows via C/C++ 学习(15)线程调度、线程优先级和亲缘性
- Windows核心编程学习笔记 第二部分 完成编程任务 第7章 线程的调度 优先级 亲缘性
- WinAPI 线程的优先级 调度 亲缘性
- Windows高级编程之线程调度、优先级和亲缘性
- 线程的调度、优先级和亲缘性——Windows核心编程学习手札系列之七
- C7、线程的调度、优先级、亲缘性
- Windows内核之线程的调度,优先级,亲缘性
- 线程的调度,优先级和亲缘性
- Windows C/C++ 学习线程调度、线程优先级和亲缘性
- Linux下线程的调度策略与优先级(一) http://blog.csdn.net/dongliqiang2006/article/details/5837824