六、运用结构环境 环境结构使得系统能够记住线程的状态,这样,当下次线程拥有可以运行的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。

第七章 线程的调度、优先级和亲缘性(4)相关推荐

  1. Windows核心编程 第七章 线程的调度、优先级和亲缘性(下)

    7.6 运用结构环境 现在应该懂得环境结构在线程调度中所起的重要作用了.环境结构使得系统能够记住线程的状态,这样,当下次线程拥有可以运行的C P U时,它就能够找到它上次中断运行的地方. 知道这样低层 ...

  2. Windows核心编程 第七章 线程的调度、优先级和亲缘性(上)

    第7章 线程的调度.优先级和亲缘性 抢占式操作系统必须使用某种算法来确定哪些线程应该在何时调度和运行多长时间.本章将要介绍Microsoft Windows 98和Windows 2000使用的一些算 ...

  3. 线程的调度、优先级和亲缘性——Windows核心编程学习手札系列之七

    线程的调度.优先级和亲缘性 --Windows核心编程学习手札系列之七 每个线程都拥有一个上下文结构,在线程的内核对象中,记录线程上次运行时该线程的CPU寄存器状态.Windows会每隔20ms左右查 ...

  4. Java线程:线程的调度-优先级

    http://lavasoft.blog.51cto.com/62575/221801 Java线程:线程的调度-优先级 与线程休眠类似,线程的优先级仍然无法保障线程的执行次序.只不过,优先级高的线程 ...

  5. java多线程 修改优先级_Java多线程-线程的调度(优先级)

    与线程休眠类似,线程的优先级仍然无法保障线程的执行次序.只不过,优先级高的线程获取CPU资源的概率较大,优先级低的并非没机会执行. 线程的优先级用1-10之间的整数表示,数值越大优先级越高,默认的优先 ...

  6. java 线程亲缘性_第7章 线程调度、优先级和亲缘性(1)

    7.1线程的挂起和恢复 (1)线程挂起 ①创建时(如CreateProcess.CreateThread),传入CREATE_SUSPENDED标志 ②用SuspendThread挂起线程.这个函数可 ...

  7. java 线程亲缘性_线程的调度、优先级和亲缘性

    每隔20ms左右,Windows要查看当前存在的所有线程内核对象.在这些对象中,只有某些对象被视为可以调度的对象.Windows选择可调度的线程内核对象中的一个,将它加载到CPU的寄存器中,它的值是上 ...

  8. java 线程亲缘性_Windows内核之线程的调度,优先级,亲缘性

    1 调度 Windows不是实时操作系统,它是抢占式多线程操作系统.在如果全部优先级同样的情况下,CPU对线程的调度原则是每隔20m就会切换到下一个线程,依据Context中的IP和SP来接着运行上次 ...

  9. Windows via C/C++ 学习(15)线程调度、线程优先级和亲缘性

    每一个线程在它的线程内核对象中有一个上下文结构,反映了线程最后一次执行的 CPU 寄存器状态,每隔大约 20ms(可以使用 GetSystemTimeAdjustment 获得,我测得这个间隔大约为 ...

最新文章

  1. AGAT|GTF/GFF文件处理工具
  2. mysql oracle 查询语句执行顺序_MySQL sql语句执行顺序
  3. 在 React 工程中利用 Mota 编写面向对象的业务模型
  4. java班长竞选投票_竞选班长采取投票式,引家长不满,班主任:您说该怎么选?...
  5. 1005. 继续(3n+1)猜想 (25) PAT乙级真题
  6. Excel VBA高级编程-股票大盘跟踪
  7. Java进阶之FileUpload完成上传
  8. 【读书笔记】统计学:从数据到结论 第七章
  9. Excel 函数 : 身份证号获取年纪等
  10. 矩阵标准型的系数是特征值吗_数据分析基础:特征值和特征向量
  11. 人大金仓命令行客户端工具KSQL系列1
  12. 在国际化中如何获取当前浏览器的语种
  13. 【C#】调用Bartender进行打印
  14. Poedit国际化处理工具
  15. 如何写一个高效的串口接收程序
  16. Element UI 数字输入框的实现
  17. 弘辽科技:淘宝店铺失败后换个手机号还能再开吗?
  18. Revit中绘制弯曲的靠背栏杆和生成过梁
  19. BJDCTF 2nd writeup
  20. java使用poi-tl导出word及转换PDF后的合并导出pdf

热门文章

  1. mysql 取第一条_MySQL索引底层(一)索引底层原理
  2. php调用restful接口_如何使用PHP编写RESTful接口
  3. go 递归tree关系_Go实现一个二叉搜索树
  4. python 保留的类标识符
  5. javascript KeyboardEvent
  6. C++ 函数默认参数和占位参数
  7. C++ 对比 C语言
  8. opencv 性能测试
  9. 数据算法之冒泡排序(bubbleSort)的Java实现
  10. Java字符串替换(replace)