Windows Internals 笔记——关联性
1.默认情况下,Windows Vista在给线程分配处理器时,使用软关联。意思是如果其他因素都一样,系统将使线程在上一次运行的处理器上运行。让线程始终在同一个处理器上运行有助于重用仍在处理器高速缓存中的数据。
2.有一种称为NUMA的计算机体系结构,结构的计算机由多个系统板组成,每个系统版都有自己的CPU和内存块。任何线程都可以在这些CPU中任何一个上运行。如果CPU需要访问其他系统板上的内存,性能会下降的厉害。为了支持这种体系结构,Windows Vista允许我们设置进程和线程的关联性。也就是说,我们可以控制CPU让哪些CPU运行特定的线程。这称为硬关联。
3.默认情况下,系统可以将任何CPU调度给任何线程使用。如果要限制某些线程只在可用CPU的一个子集上运行,则可以调用SetProcessAffinityMask(HANDLE hProcess, DWORD_PTR dwProcessAffinityMask),第二个参数代表线程可以在哪些CPU上运行。例如传入0x00000005意味着这个进程中的线程可以在CPU0和CPU2上运行,但是不能在CPU1和CPU3~31上运行。
4.请注意,子进程将继承进程关联性。此外,我们还可以使用作业内核对象来限制一组进程只在一组CPU上运行。
5.可以通过调用SetThreadAffinityMask分别设置各线程的关联性掩码。
6.当一个x86系统启动时,系统将执行代码,检查主机上的哪个CPU存在著名的Pentium浮点bug。系统必须对每个CPU做这项检查。检查的方法是,将一个线程的关联性设置为该CPU,执行可能会出错的除法操作,然后比较结果是否与已知正确的结果相符。随后再采用同样的步骤检查下一个CPU,依次类推。
7.在大多数环境里,改变线程的关联性,将妨碍调度程序的这种能力,下面给出一个例子:
8.要给线程设置一个理想的CPU(也允许系统将它移到另一个空闲的CPU),可以调用SetThreadIdealProcessor(HANDLE hThread, DWORD dwIdealProcessor),dwIdealProcessor不是位掩码,它是一个0到31/63之间的整数,表示线程希望设置的CPU。可以传入MAXIMUN_PROCESSORS值(在WinNT.h中定义,32位操作系统中定义为32,64位操作系统中定义为64),表示线程没有理想的CPU。
9.当Windows Vista在x86计算机上启动时,我们可以限制系统将使用的CPU数量(修改启动配置数据 BCD)。
Windows Internals 笔记——关联性的更多相关文章
- Windows Internals 笔记——线程优先级
1.每个线程都被赋予0(最低)~31(最高)的优先级数.当系统确定给哪个线程分配CPU时,它会首先查看优先级为31的线程,并以循环的方式进行调度.如果有优先级为31的线程可供调度,那么系统就会将CPU ...
- Windows Internals 笔记——线程调度
1.线程内核对象中的CONTEXT反应了线程上一次执行时CPU寄存器的状态.大约每隔20ms,Windows都会查看所有当前存在的线程内核对象.Windows在可调度的线程内核对象中选择一个,并将上次 ...
- Windows Internals 笔记——线程
1.进程有两个组成部分,一个进程内核对象和一个地址空间.线程也有两个组成部分: 一个是线程的内核对象,操作系统用它管理线程.系统还用内核对象来存放线程统计信息的地方. 一个线程栈,用于维护线程执行时所 ...
- Windows Internals 笔记——进程的权限
1.大多数用户都用一个管理员账户来登录Windows,在Vista之前,这样的登录会创建一个安全令牌.每当有代码试图使用一个受保护的安全资源时,操作系统就会出示这个令牌.从包括Windows资源管理器 ...
- Windows Internals 笔记——作业
1.Windows提供了一个作业内核对象,它允许我们将进程组合在一起并创建一个“沙箱”来限制进程能够做什么.创建只包含一个进程的作业同样非常有用,因为这样可以对进程施加平时不能施加的限制. 2.如果进 ...
- Windows Internals 笔记——CreateProcess
1.一个线程调用CreateProcess时,系统将创建一个进程内核对象,其初始使用计数为1.然后系统为新进程的主线程创建一个线程内核对象(使其计数为1). 2.CreateProcess在进程完全初 ...
- Windows Internals 笔记——进程
1.一般将进程定义成一个正在运行的程序的一个实例,由以下两部分构成: 一个内核对象,操作系统用它来管理进程,内核对象也是系统保存进程统计信息的地方. 一个地址空间,其中包含所有可执行文件或DLL模块的 ...
- Windows Internals 笔记——内核对象
1.每个内核对象都只是一个内存块,它由操作系统内核分配,并只能由操作系统内核访问.这个内存块是一个数据结构,其成员维护着与对象相关的信息. 2.调用一个会创建内核对象的函数后,函数会返回一个句柄,它标 ...
- Windows Internals 笔记——字符和字符串处理
1.自Windows NT起,Windows的所有版本都完全用Unicode来构建,调用Windows函数时,如果向它传入一个ANSI字符串,那么函数首先会把字符串转换为Unicode,再把结果传给操 ...
随机推荐
- FTP设置用户名和密码
第一步新建用户: 1.电脑右键管理--> 2.本地用户和组--> 3.新建用户,设置密码成功 第二步:开启FTP服务 1.控制面板-->程序-->启用或关闭Windows功能- ...
- 20165223 《信息安全系统设计基础》 改进ls的实现
课下作业:改进ls的实现 一.作业要求 参见附图,改进你的ls的实现.提交代码运行截图和码云链接.
- LCA Binary Lifting 倍增
留坑 待填 一篇不错的CF博客 这篇纯讲理论的,比较清楚. 去CF上搜Gym algorithm 可以看到很多算法文章.
- redis基础知识思维导图
看到一张redis的基础知识思维导图,比较清晰, 但是没有标明来源,希望知道的给个地址,我也好说明来源 图大小有1M多.在博客上看比较模糊,可以先下载下来查看,或者在浏览器新标签中打开图片查看,就比较 ...
- python正则表达式Re模块备忘录
title: python正则表达式Re模块备忘录 date: 2019/1/31 18:17:08 toc: true --- python正则表达式Re模块备忘录 备忘录 python中的数量词为 ...
- Apicloud学习第四天
apicloud存储机制,添加和获取存储的数据 $api.setStorage('currentCity', cityList[i_]); $api.getStorage('currentCity') ...
- nodeJS模块寻址规则
引子 阮一峰一则教程中, 将应用放置在 npm 模块安装目录同等级的目录(https://github.com/ruanyf/webpack-demos)下. 但是应用目录文件中, 引用标准库的使用 ...
- Html.ActionLink与Url.Action区别
一.@Html.ActionLink()概述 在MVC的Rasor视图引擎中,微软采用一种全新的方式来表示从前的超链接方式,它代替了从前的繁杂的超链接标签,让代码看起来更加简洁.通过浏览器依然会解析成 ...
- Win10蓝屏的一些解决办法
请仔细回想这个错误是什么时候出现的: 第一次发生时你对系统做了哪些操作: 发生时正在进行什么操作: 从这些信息中找出可能的原因: 从而选择相应解决方案并尝试排除. 0x0000000A:IRQL_NO ...
- 基于Python的Webservice开发(二)-如何用Spyne开发Webservice
一.功能需求 本次案例是开发一个Item的新建的WebService.IN&OUT的类型JsonDocument. 通过传入相关的参数创建Item,且相关的参数可以被缺省. 二.实现代码 引入 ...