关于CPU的的NX/XD标志解析

  

     一位朋友问“在PC或笔记本上,开启了CPU虚拟化。然后安装了一个VMware虚拟机,操作系统是Windows 2008 R2 DataCenter版本,VMware中设置虚拟化引擎为:Intel VT-x/EPT or AMD -v/RVI.启动虚拟机后,无法创建HYper-v角色, 提示CPU与Hyper-v不兼容,不知道为什么?”

     还有一位朋友“在安装Win8 PR时,发现在安装过程中竟然出现CPU不兼容的问题,明明已经超越了最低1GHz的频率,四核以及六核CPU都有遭遇过这个问题,这又是为什么?

      wKioL1S02Afh0UxIAAEd1z8O07o860.jpg

     以上两个问题,细究起来都跟CPU的的NX/XD标志设置有关。NX位(全名“No eXecute bit”,即“禁止执行位”),是应用在CPU中的一种安全技术。在功能上,AMD的“NX”和Intel的“XD”完全相同,只是名称不同。

      原理解析:支持NX技术的系统会把内存中的区域分类为只供存储处理器指令集与只供存储数据使用的两种。任何标记了NX位的区块代表仅供存储数据使用而不是存储处理器的指令集,处理器将不会将此处的数据作为代码执行,以此这种技术可防止大多数的缓存溢出式攻击(即一些恶意程序把自身的恶意指令集通过特殊手段放在其他程序的存储区并被执行,从而攻击甚至控制整台电脑系统)。这样就要求我们的CPU具备一定的安全功能,比如要支持SSE2、PAE以及NX指令,否则就会出现兼容性提示。


      那么遇到这个问题该如何修改?

 一、如果是物理机,需要修改BIOS

按F2进入BIOS,找到如下选项,修改为ENABLED

wKiom1S018LA7GkdAAWA0OToFNM458.jpg

然后保存退出


二、如果是虚机,需要打开这个标识。

在虚拟机属性中,选择“向客户机公开NX/XD标识”

wKioL1S02MDRF3fxAAIIAmIQV7U424.jpg


三、WINDOWS不兼容的问题解决

    NX功能在很多主板中往往是默认禁用的,需要用户手动开启,万一BIOS中不能开启这个功能还必须尝试升级BIOS。

  不过也不用担心,NX检测只会存在于全新安装和升级向导中,Win8或windows 2008 R2的安装文件中还有替代方法可以装在不支持这项指令的机器上,比如使用光盘启动或者通过网络安装。

  微软检测CPU的安全技术主要是为了防止间谍软件攻击,一旦用户遇到兼容性提示首先要查看一下BIOS设置启用相关指令支持,或者换用无硬件检测的安装方式避免这个问题。


补充知识:

类似的技术其实早已应用在SPARC、DEC Alpha、IBM的PowerPC、甚至是英特尔的IA-64架构处理器Itanium上;但“NX”这个名称最先在AMD的Athlon 64、Opteron等支持AMD64的处理器上使用,并成为这些技术的代名词。

在x86处理器的页表索引中,NX位置于63号的位置(以0作第一位),即64位中的最后一位。如果NX位的数值是0(关闭),在页表内的指令集可正常执行;但如果是1(启动)的话则不能执行页表的指令集,并会把页表的一切皆当作数据。在格式上,页表需为PAE格式,而非x86传统的格式。

2001年,英特尔在自家的Itanium处理器加入这种技术,但未有在Pentium、Celeron、Xeon等x86处理器上使用。在AMD把NX应用在AMD64之后,英特尔也为Prescott版本的Pentium 4处理器加入类似技术,并以“XD”(eXecute Disable)的名义推出市场。在功能上,AMD的“NX”和Intel的“XD”完全相同,只是名称不同。


你可能感兴趣的:(cpu,NX/XD标志)