说明

本文介绍x86平台(大部分是CPU)的一些高级功能。

介绍功能的模式大致是先说明功能的基本概述,然后介绍从哪代CPU开始引入,如何判断是否支持,以及如何使能该功能。

鉴于能力和篇幅有限,介绍的不会非常的详细,所以本文还会提供参考的文档。

下文中老是提到的《Intel软件开发者手册》可以在https://software.intel.com/en-us/articles/intel-sdm下载到。

Intel Virtualization Technology

虚拟化的作用是在一个平台上模拟出多个独立的平台系统供软件使用。

x86平台支持的虚拟化有如下的几种:


VT-x ——面向 IA-32 架构的英特尔® 虚拟化技术,为 IA-32 增加了两种全新的 CPU 操作模式:VMX 根操作和 VMX 非根操作。VMX 根操作设计用于 VMM,其运行方式非常类似于没有 VT-x 的 IA-32。VMX 非根操作可提供 VMM 控制,且用于支持虚拟机的其它 IA-32 环境。这两种操作模式均可支持全部 4 种优先级水平,支持客户机的软件以适当的优先级水平运行,并为 VMM 提供运行多种优先级水平的灵活性。通过 VT-x,客户机软件与 VMM 之间的每次转换都可改变线性地址空间,从而支持客户机软件充分利用其自己的地址空间。VMX 转换由 VMCS 进行管理,它驻留在物理地址空间中,而且不是线性地址空间中。

VT-i ——面向安腾架构的英特尔® 虚拟化技术,可为 VMM 提供客户机软件不能使用的虚拟地址位。VMM 可通过将客户呼叫截取到 PAL 流程(报告所部署的虚拟地址位数量),从而隐藏对该地址位的硬件支持。这样,客户机将不会期望使用这一最高位,硬件也不允许它使用,从而为 VMM 提供单独使用一半虚拟地址空间的“特权”。通过 VT-i,VMM 可以使用虚拟处理器描述符(VPD)中的虚拟化加速字段来表示客户机软件能够读取或写入中断控制寄存器,而且不需要调用每次存取的 VMM。VMM 可在发出任何虚拟中断前建立这些寄存器的数值,并且可以在客户机中断处理程序返回前对其进行修改。

VT-d ——面向 Directed I/O 的英特尔® 虚拟化技术,是接下来通往英特尔平台虚拟化全面硬件支持的关键一步。VT-d 扩展了英特尔® 虚拟化技术的发展蓝图,从目前支持 IA-32(VT-x)和英特尔® 安腾® 处理器(VT-i)虚拟化,到对 I/O 设备虚拟化的全新支持。VT-d 能够满足使用虚拟机(VM)技术的两项主要要求。首先,保护从虚拟机访问 I/O 资源不会干扰同一平台上另一台虚拟机的正常运行。VM 之间的相互隔离是实现可用性、可靠性和相互信任的基础。其次,虚拟平台必须提供在多台虚拟机之间共享 I/O 资源的能力。为每台虚拟机复制存储或网络控制器等 I/O 资源既不实用也不经济高效。VT-d I/O 设备虚拟化可以解决上述问题。


上面这一段是从Intel官网摘出来的。

简单来说,VT-x是对CPU的虚拟化;VT-d是对外设(一般是PCIE的外设,也称为SRIOV)虚拟化;VT-i是安腾的架构下的虚拟化,不是很熟......

VT-x

VT-x简单来说就是将一个CPU模拟成多个独立的CPU给软件使用。

VT-x将平台分为两个部分,一个是VMM(Virtual Machine Monitor),另一个是VM(Virtual Machine):

上图的Guest x就是VM。VM Exit,VMXON和VMXOFF等是操作虚拟化的命令。

VT-x在x86平台也称为VMX,全称Virtual Machine Extensions,在《Intel软件开发者手册》中第三卷中有大量的篇幅介绍。

最早Intel在奔腾4处理器中引入虚拟化技术:

为了使能VT-x需要对如下寄存器进行操作(还是IA32_FEATURE_CONTROL):

说明如下:

这里有说到SMX,它的全称是Safer Mode Extensions,它其实是TXT(后面会介绍)的一部分,为TXT提供了编程接口来进入更安全的Measured Launched Environment (MLE)。

因为TXT可以为VMX提供更安全的执行环境,所以这里分了IN和OUT SMX下的VMX。

SMX提供的编程接口在《Intel软件开发者手册》的第2卷中有详细的介绍。

VT-d

VT-d是对设备的模拟,就是将一个设备模拟成多个设备供软件使用。

为了完成设备的虚拟化,需要完成如下的部分:

为了完成上述的内容,引入了一个称为Domain的概念,它最终化为一张张的映射表放到VMM中,来形成对应。

Security Technology

虚拟化其实也是Intel安全技术的一种,因为它提供了隔离的系统环境,在这里就不介绍了。

TXT

TXT全称Trusted Execution Technology。

关于TXT,Intel有如下的说法:

简单来说就是Intel提供了一套软硬件结合的机制,用来提高系统的安全性。

下图是构成完成TXT支持的组件:

虚拟化其实不是TXT的必要条件,只是TXT也可以在虚拟化中使用(后面讲虚拟化的时候还会涉及到TXT)。

TPM是一个独立的芯片,TXT功能依赖于该模块来提供安全的加解密等操作。

TXT在Intel Xeon 5600系列处理器中首次引入。

关于TXT的详细介绍,可以在如下网站找到:

https://www.intel.com/content/www/us/en/architecture-and-technology/trusted-execution-technology/trusted-execution-technology-security-paper.html

CPU要使能TXT功能,需要通过IA32_FEATURE_CONTROL这个MSR寄存器来使能:

SGX

SGX全称是Software Guard Extensions。Intel支持SGX的CPU提供了一种特定的访问内存的方式(称为Enclave)和一组指令,用来提供更加安全的方式来保护应用的代码和数据,如下图所示:

Intel提供了一个SDK用来编写有Enclave的应用程序,关于SGX的详细介绍可以在https://software.intel.com/zh-cn/sgx找到。

SGX是在SKYLAKE型号CPU中首次引入的:

SGX同样是一个需要在BIOS下使能的功能,如下面的寄存器所示(还是IA32_FEATURE_CONTROL):

关于SGX的完整说明可以在《Intel软件开发者手册》卷3中找到。

Power and Performance Technology

在x86平台中,能耗和性能是两个不可分割的部分,Intel提供了很多的技术来满足不同的能耗和性能的需求。

Intel Multi-Core and Hyper-Threading Technology

这是两项相关的技术,前者指在一个CPU中包含多个物理核,后者是指一个物理核中包含若干个逻辑核。

我们常说的2核4线程就是指支持HT的CPU里面有2个物理核,每个物理核包含2个逻辑核,如下图所示:

Hyper-Threading技术在2002年的推出的奔腾4系列CPU中首次引入:

关于多核支持,是在Intel奔腾处理器Extreme版本(就是双核四线程)中首次引入的,那应该是在2005年:

关于MP和HT的初始化,可以参考《Intel软件开发者手册》卷3中的《MULTIPLE-PROCESSOR (MP) INITIALIZATION》章节。

关于MC和HT还有如下的说明:

1. 可以通过CPUID来确定支持的MC和HT特性:

2. 为了初始化支持MC和HT的CPU,需要将CPU中的核分为BSP(Boot Strap Processor)和AP(Application Processors),然后每个核会分配一个ACPI ID,通过它来区分各个核。

《Intel软件开发者手册》卷3还讲了很多的内容,感觉看着还是很乱,先这样吧。

Intel Turbo Boost Technology

Turbo Boost的作用是让CPU的核心(包括图形处理的核)能够在基准频率之上运行。当然这种调节是自动的,并且是智能的。

该技术是在2008年推出的Nehalem架构CPU中推出的:

目前最新的CoffeeLake CPU已经支持到第二代的Turbo Boost技术,主要是增强了多线程和单线程上的性能。

与Turbo Boost技术相关的有很多的MSR寄存器,比如(不同平台可能存在差异):

我们就是通过控制这些寄存器来控制Turbo Boost功能的。

Intel Streaming SIMD Extensions (SSE)

要了解这项技术首先需要了解SIMD的意义,它表示的是Single Instruction Mulit Data。

这个SIMD的概念是在Intel的MMX技术中引入的,它的重点在于相同时钟周期内能够处理的数据变多了,这样就能够提升CPU的性能。

SSE基础从MMX开始,又经历的SSE、SSE2、SSE3、SSE4等,CPU能够在相同周期内处理的数据越来越多。

以上技术都会代码新的指令和寄存器。

Intel Advanced Vector Extensions(AVX)

该功能提供CPU能够处理256比特矢量的能力。它引入了新的一组指令集和寄存器。

简单来说就是CPU的处理能力变强了,不仅是在整型的处理,在浮点的处理也是,这就在执行某些运算的时候提升了性能。

它算是对SSE的扩展。

已经经历了AVX、AVX2,AVX-512等几代。

Intel 64 Architechture x2APIC

x2APIC是x86平台处理中断的机制,它之前是xAPIC,再之前是Intel® 82489DX external APIC。

关于中断机制的基本历史如下:

可以看到平台默认使用的是xAPIC模式,x2APIC需要另外使能。

关于使能x2APIC,如下所示:

对应的MSR寄存器如下:

【x86架构】x86上的那些不明觉厉的功能相关推荐

  1. 5G时代,基带芯片下的ARM与X86架构……

    基带芯片是指用来合成即将发射的基带信号,或对接收到的基带信号进行解码的芯片.基带芯片可分为五个子块:CPU处理器.信道编码器.数字信号处理器.调制解调器和接口模块.目前大部分基带芯片的基本结构是微处理 ...

  2. 卅年史诗!地球上出现过的CPU完全收藏 - (26-28) x86架构下的其它CPU巨鳄 Cyrix,NexGen,IDT/Transmeta(组图)

    ●Cyrix CPU介绍 突然想起来,X86架构的CPU还有Cyrix公司啊!那我们就接着回顾吧. M1 M1 ,背面 100MHz的M1 100MHz的M1,背面 还是M1,不过公司名称换了 换了名 ...

  3. x86架构手机_都是芯片,为什么电脑CPU不能用在手机里?

    手机性能现在一代比一代强,很大程度上要归功于内部CPU处理器的不断升级,从单核到多核,低频到高频,经过这么多年的发展,甚至逐渐摸到了一些电脑处理器性能的边缘,这时候会有萌新小白同学发问,既然电脑CPU ...

  4. android x86 三星,三星主刀 X86架构Android4.X手机CES见

    下面这条情报是关于Intel的Android手机的.据了解,三星.美国运营商Sprint以及Intel将会在1个月后的CES大会上面展示一台搭载Android4.X冰淇淋三明治系统的智能手机,这台手机 ...

  5. 富士通台式电脑_英特尔X86架构霸权终将崩塌,ARM架构才是未来PC电脑市场的王者?...

    人们日常接触到的各类处理器芯片,通常是基于X86架构或者ARM架构.一般认为,X86架构用的是复杂指令集(CISC),强调高性能,更适合台式机.服务器:ARM架构用的是精简指令集(RISC),强调低功 ...

  6. 防火墙x86架构和ASIC架构和NP架构的区别

    防火墙x86架构和ASIC架构和NP架构的区别 在众多的安全产品中,防火墙产品无疑是保障网络安全的第一道防线,很多企业为了保障自身服务器或数据安全都采用了防火墙.  随着Internet的迅速普及,全 ...

  7. 【Android 逆向】Android 进程注入工具开发 ( 远程调用 | x86 架构的返回值获取 | arm 架构远程调用 )

    文章目录 前言 一.x86 架构的返回值获取 二.ARM 架构远程调用 前言 在之前的博客 [Android 逆向]Android 进程注入工具开发 ( 注入代码分析 | 获取 远程 目标进程 中的 ...

  8. 【Android 逆向】x86 汇编 ( 使用 IDA 解析 x86 架构的动态库文件 | 使用 IDA 打开动态库文件 | IDA 中查找指定的方法 )

    文章目录 一.使用 IDA 打开动态库文件 二.IDA 中查找指定的方法 一.使用 IDA 打开动态库文件 分析 Android SDK 中的 x86 架构的动态库 , 动态库位置 : D:\001_ ...

  9. 浅析x86架构中cache的组织结构

    cache通常被翻译为高速缓冲存储器(以下简称"高速缓存"),虽然现在cache的含义已经不单单指CPU和主存储器(也就是通常所谓的内存)之间的高速缓存了,但在本文中所谓的cach ...

最新文章

  1. e.getMessage 为空NULL
  2. LBP(局部二值模式)特征提取原理
  3. Python subprocess执行持续输出shell命令的控制
  4. usb深度检查 清理_巴南区清理化粪池工程队价格合理2020
  5. bootstrap-table.js如何根据单元格数据不同显示不同的字体的颜色
  6. vue弹出层滑动禁止背景跟着滑动_vue移动端弹起蒙层滑动禁止底部滑动操作
  7. 微信支付携手云闪付APP上线支付立减新优惠
  8. 初探Object in java
  9. 优秀课程案例:使用Scratch制作水果忍者游戏!
  10. openwrt1907 mt7621配置DDR自适应
  11. 微信小程序使用彩色图标(阿里巴巴矢量图标库)(炒鸡详细)
  12. Linux下Tomcat中文乱码解决
  13. Vue3 npm run serve 太慢的解决方法
  14. unity 打包APK 应用未安装
  15. 兼容IE8的文件下载,解决IE下载文本和图片直接打开问题
  16. 内部类与外部类之间的访问
  17. MindMapper使用技巧分享
  18. 基于PaddleOCR的集装箱箱号检测识别
  19. 广州百田前端实习生面试经历
  20. 有状态软件如何在 k8s 上快速扩容甚至自动扩容

热门文章

  1. JavaScript网页特效-“渔夫打鱼晒网”程序设计
  2. 夜曲编程python_夜曲编程app免费版下载-百词斩夜曲编程下载v1.0.0安卓版-西西软件下载...
  3. The Forty-first Of Word-Day
  4. 图像基本处理——图像阈值和平滑
  5. 中文转拼音 java_Java中文转拼音
  6. qgis获取几何图形中心点
  7. python判断正数和负数教案_正数和负数教案(教学设计)
  8. CodeForces入门
  9. 幸运与不幸-一起来编个有趣的故事
  10. 计算机常用的函数类型,珍藏版:计算机二级考试MS office 常用函数