盘锦网站建设制作,重庆点优建设网站公司吗,免费建站平台的源码,湖北网站推广CPU指令系统
在CPU的工作原理中#xff0c;CPU有不同的指令集#xff0c;如下图#xff0c;CPU有4各指令集#xff1a;Ring0-3#xff0c;指令集是在服务器上运行的所有命令#xff0c;最终都会在CPU上执行#xff0c;但是CPU并不是说所有的命令都是一视同仁的#xf…CPU指令系统
在CPU的工作原理中CPU有不同的指令集如下图CPU有4各指令集Ring0-3指令集是在服务器上运行的所有命令最终都会在CPU上执行但是CPU并不是说所有的命令都是一视同仁的它会把命令分为不同的指令集
Ring0指令集称之为内核态指令集改啊指令集里面啊运行的主要是操作系统访问硬件、关键数据结构运行中断等。
Ring1-2指令集主要运行的是设备驱动的命令
Ring3指令集称之为用户态该指令集运行的是用户态的应用的一些命令
CPU就是通过这种不同的指令集来运行着不同的命令为什么要做这种涉及呢因为在服务器上所运行的命令可能会产生不一样的后果比如说单纯的额运行上层应用的命令最多只影响上层的这些软件比如有些软件跑着跑着就跑非了但是它仅仅是软件挂了操作系统并不受影响
但是向Ring0这里它包含了操作系统访问硬件他是可以调度底层硬件设备向这些命令是非常关键的如果说调度底层硬件设备的命令出现了问题相当于这个命令直接给到了底层设备如果命令不加筛选或者随便给一个命令的话是有可能损坏底层设备的所以像这种最高级的操作系统访问硬件包括中断这种非常敏感和高级的指令是被放在了内核态的指令集里的
这个结构是CPU在最初涉及的时候就是这么涉及的这个结构最初的涉及仅仅考虑了CPU的正常运行但并没有考虑到虚拟化场景下出现的问题 CPU虚拟化分类
全虚拟化
在虚拟化场景中CPU架构面临的问题
在虚拟化场景下物理主机上的操作系统操作底层硬件的指令运行在Ring0内核态我们在操作系统上安装的各种软件运行在Ring3用户态而Hypervisor本质上也是操作系统上的一个软件所以Hypervisor运行在Ring3用户态。
作为一个虚拟化应用我们可以在Hypervisor之上创建了虚拟机因为Hypervisor运行在Ring3用户态所以通过Hypervisor创建的这台虚拟机也跑在Ring3用户态
但是作为一个完整的虚拟机虚拟机的CPU也会有Ring0-3虚拟机上的应用跑在Ring3上是没问题的问题是虚拟机的操作系统要如何运行
首先虚拟机的操作系统它应该运行在Ring0内核态但是由于虚拟机运行在Hypervisor上而Hypervisor又运行在Ring3上那虚拟机的操作系统也就只能运行在Ring3上所以虚拟机的操作系统本应该运行在Ring0内核态但它实际上处于Ring3用户态也就是说Guest OS想访问Ring0由于它运行在Hypervisor上实际上是跑在Ring3的。这就是引入虚拟化之后对于传统CPU结构带来的巨大冲突也就是传统CPU结构并不能满足虚拟机操作系统想要的运行环境这就是最早虚拟化所面临的第一大难题
上世纪八十年代这个问题由VMware公司提出并解决VMware的解决思路叫Binary Translation翻译成中文叫二进制转化它的解决思路是给Hypervisor附加了一个功能由Hypervisor来拦截、收集、辨识虚拟机的所有命令即包括Ring3命令也包括Ring0命令Ring3命令正常运行因为它就应该跑在Ring3如果是Ring0的命令则由Hypervisor来拦截虚拟机的这部分Ring0指令然后将这部分指令进行Binary Translation翻译将这些指令进行一些列的翻译和替换也就是使虚拟机内核态的这部分指令可以运行在Ring0的环境
直白地说就是对所有地指定进行拦截翻译再执行地过程通过这个过程就保证了虚拟机操作系统的那些指令也可以在经过转化之后运行在Ring0态通过这种技术就保证了虚拟机实现了CPU的虚拟化
但是这种技术会导致Hypervisor有大量的工作负荷因为他要拦截虚拟机的每一条指令并且进行鉴别、筛选、再传递等等工作这些工作就会占用大量的CPU和内存资源这种办法仅仅使从技术上解决了CPU的虚拟化但它实际的使用效率是比较低的
这种方案我们称之为全虚拟化也就是说这种方案完全是靠软件的功能来解决的没有涉及到任何硬件硬件也没有改动
简单来说全虚拟化就是虚拟机想访问Ring0由于它运行在Hypervisor上实际上它是跑在Ring3的。通过Hypervisor的拦截、翻译、传递这些指令使虚拟机内核态的指令可以运行在Ring0上 半虚拟化
全虚拟化主要的问题是效率比较低随着技术的发展人们又提出半虚拟化技术Para Virtualization它还有另外一个名字叫超虚拟化
半虚拟化技术最核心的点在于它直接修改了操作系统让操作系统即便运行在Ring3上它也可以产生一些能够直接跑在Ring0的命令如下图所示经过修改后的linux操作系统可以直接把他的命令传递给hardware(硬件)而不需要经过hypervisor翻译
半虚拟化技术优点不需要Hypervisor进行拦截和翻译占用的CPU和内存资源更少性能得到了提升
半虚拟化技术缺点技术门槛高要求需要对操作系统进行修改Linux是开源的是可以进行修改的而Windows是闭源的无法进行修改所以半虚拟化的使用范围也收到了限制仅仅是可以支持开源的Linux操作系统 硬件辅助全虚拟化
全虚拟化和半虚拟化都是在软件层面解决CPU虚拟化的问题CPU传统结构对于虚拟化技术是不友好的技术人员在软件层面做了一些改进以期让CPU更好的支持虚拟化技术随着技术的发展CPU厂商也在硬件层面做了改进在2000左右英特尔和AMD升级了他们的CPU硬件让CPU可以更好的来支持虚拟化技术。这种升级后的技术叫硬件辅助全虚拟化。
升级后的CPU有两种工作形态一个叫根态一个叫非根态
根态是物理机正常工作的情况下的形态主机操作系统运行在Ring0业务运行在Ring3。当在物理机上起了一台虚拟机之后虚机想要运行的时候如Guest OS需要调用Ring0的时候这时候CPU就会由根态切换到非根态切换之后Guest OS可以直接访问到物理CPU的Ring0Guest OS上的APP可以直接访问到物理CPU的Ring3当物理机的操作系统又想对CPU进行操作时再由非根态切换回根态
相比于全虚拟化和半虚拟化硬件辅助全虚拟化在硬件层面对CPU进行了重新设计让CPU可以更好的支持虚拟化技术它不需要在软件层面做修改虚拟化对于硬件的性能没有过多的占用保证了虚拟化有较好的性能水平