虚拟化技术可以认为是一种对物理资源抽象化,进而形成虚拟化的版本的技术
物理资源组成庞大的资源池,然后可以按需分配,随意切割物理资源
大部分的现代计算机体系结构都有两个或两个以上的特权级别,用来分隔内核和应用软件。以x86为例,为了得到更高的保护控制,在x86的保护模式下定义了当前特权级别(Current Previleged Level,简称CPL),一共有四个特级层次(0 to 3)被定义,我们一般称之为Ring。Ring后面的数字越大特权越小,我们的操作系统一般都运行在Ring0上,而Ring1和2一般用来支持设备驱动,Ring3上面跑的就是应用软件了。而在现在的x86处理器中,64位架构已经非常普遍,64位CPU因为必须支持页表模式,所以只有两个特权级别,我们可以简单理解为Ring0和Ring3(实际上另有明确定义),这种模型我们常称为0/3模型。
系统中有一些关键操作指令只能在最高特权级别上执行,它们一般被称为特权指令,特权指令仅仅在当前的特权级别为零时(CPL=0)才会执行。如果在非特权级别上试图执行特权指令,将生成一个一般保护异常(这通常会生成一个应用程序错误),而非特权指令则可以在任何一个权限级别执行。
敏感指令:在虚拟化世界的VMM模型中,我们可以看到所有的客户机操作系统都运行在非特权模式下,即非Ring0级。因为Guest OS已经不处在特权级别,所以存在一部分原本应该在特权级别执行但现在因为层级权限不够必须转交VMM进行处理的指令,这部分指令就叫敏感指令。
VMM(virtual machine monitor,虚拟机管理层),统一管理虚拟机,对虚拟机的请求进行集中调度,虚拟操作系统与硬件通信必须经过VMM层
优点:不需要修改虚拟机OS
VMM(虚拟化层)用来统一管理上层虚拟机,工作在Ring 0级别,对虚拟机的请求进行集中调度
全虚拟化中客户操作系统没有做任何修改,虚拟机中的CPU指令集与工作在物理机上的CPU指令集一致
客户操作系统工作在Ring 1级别,那么如果客户操作系统发出Ring 0级别的指令就会导致异常(权限不够),这里的这个异常会被VMM层捕获。VMM层将捕获的异常进行翻译找出客户操作系统发出的什么样的高权限指令,然后模拟这个指令并将结果反馈给客户操作系统。
全虚拟化中每个请求都要经过异常捕获、翻译、模拟、反馈四个步骤,所以其性能比较低
典型产品:VMware Workstation、Virtual PC、QEMU
需要对客户操作系统的内核做修改
对操作系统的内核进行修改,使客户机工作在Ring 0级别,此时VMM不需要监控异常,只需要在客户操作系统发出Ring 0级别的指令时,在VMM层提供超级调用接口,将指令转发到计算机系统硬件即可。
半虚拟化需要对内核进行修改,但是windows的内核是不开源的,不能进行修改,所以windows不能使用半虚拟化技术,linux内核是开源的,可以使用半虚拟化技术
不能跨平台,操作系统发出的指令相当于通过超级调用转发到硬件,那么OS发出的指令必须与硬件匹配
硬件本身支持虚拟化技术,引入了Root模式和非Root模式
客户操作系统直接工作在Ring 0,此时不需要对OS做任何修改,发出的CPU指令不会出现异常
VMM工作在Ring 0层以下,通过超级调用转发客户操作系统的指令
典型产品:VMware EXSI、Xen3.0及以后的产品、MicroSoft Hyper-V、KVM
物理服务器上需要安装如Windows、Linux等操作系统,这些传统操作系统并不是为虚拟化而设计的,因此本身并不具备虚拟化功能,所有的虚拟化功能都由VMM来提供
VMM通常是宿主机操作系统独立的内核模块(工作在Ring 0层),有些实现中还包括用户态进程,如负责I/O虚拟化的用户态设备模型。VMM通过调用宿主机操作系统的服务来获得资源,实现处理器、内存和I/O设备的虚拟化
VMM层依托于宿主机
只需要Hypervisor VMM层,底层不需要原始的操作系统,但要调动硬件需要各种接口以及各种硬件的驱动。
在原生架构模型(Hypervisor VMM)中,VMM首先可以被看作是一个完备的操作系统,与传统操作系统不同的是,VMM是为虚拟化而设计的,因此其本身就具备虚拟化功能。
从架构上看,首先所有的物理资源如处理器、内存和I/O设备等都归于VMM所有,因此,VMM承担着管理物理资源的责任;其次,VMM需要向上提供虚拟机用于运行客户机操作系统,因此,VMM还负责虚拟环境的创建和管理。
混合模型(Hybrid VMM)是上述两种模式的混合体。VMM依然位于最底层,拥有所有的物理资源,包括处理器、内存和I/O设备等。与Hypervisor模型不同的是,VMM会腾让出大部分I/O设备的控制权,将他们交由一个运行在特权虚拟机中的特权操作系统来控制,相应的,VMM虚拟化的职责也会被分担。处理器、内存虚拟化依然由VMM来完成,I/O设备虚拟化则由VMM和特权操作系统共同来完成
前面我们一直都是用控制台进行信息的输入输出来写Java程序但是我们平常见到的程序都是有好看的界面的你可能会想难道Java不能做界面???放心,Java可以说是很强大的它是可以做出来的,只不过用Java写Windows窗口程序都太麻烦了所以用Java来写的不多但是我还是要讲一下滴好啦 开始一、简介及简单演示我们平时电脑用的软件能看到的界面其实就是GUI(Graphic User I...
USB xHCI控制器使用总结1 Intel USB xHCI控制器1.1 驱动架构1.2 x86 OTG架构1.3 x86 xHCI Scheduler Async Delay1.4 Interrupt on Short Packet1.5 x86 USB DCI DbC调试技术1.6 reset USB device1.7 PIPE PHY数据线宽度2 Bulk传输速度计算3 xHCI HS眼图调试3.1 EHCI眼图调试寄存器设置流程3.2 xHCI每个port的4个寄存器3.3 xHCI HS眼图调
待验证&pinctrl_1 { mcp2515_irq: mcp2515-irq { samsung,pins = "gpx0-1"; samsung,pin-function = <EXYNOS_PIN_FUNC_INPUT>; samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>; samsung,pin-drv = <EXYNOS4_PIN_DRV_LV1>; };};&spi_2 { num
汽车轮胎保养六大技巧 如何进行更好的汽车轮胎保养 1.经常检查轮胎状况 时常检查轮胎,及早发现轮胎是否有鼓包,裂缝,割伤,扎钉、气门嘴橡胶老化和不正常的轮胎磨损等情况。特别应注意检查轮胎胎面及轮胎边缘的磨损,这有可能是由于定位不良或轮胎气压不正常行驶造成的。 2.轮胎磨损到磨损...
include/init.PHP....................//主函数文件includes/inc_constant.php //常量,暂时没多大用includes/cls_ecshop.php //基础类includes/cls_error.php //用户级错误处理类includes/lib_...
R语言dplyr包select函数删除dataframe数据中包含指定字符串内容的数据列(drop columns in dataframe)
本文介绍了ES6语法中的块作用于let语法,通俗易懂。
实验内容:(场景:判断六度分离是否成立)1967年,美国著名的社会学家斯坦利·米尔格兰姆提出了一个名为“小世界现象(small world phenomenon)”的著名假说,大意是说,任何2个素不相识的人中间最多只隔着6个人,即只用6个人就可以将他们联系在一起,因此他的理论也被称为“六度分离”理论(six degrees of separation)。虽然米尔格兰姆的理论屡屡应验,一直也有很多社会学家对其兴趣浓厚,但是在30多年的时间里,它从来就没有得到过严谨的证明,只是一种带有传奇色彩的假说而已。L
项目介绍随着高校招生规模的逐步扩大和教学方式的改革,在校学生人数将不断增加。另一方面,我国高等学校基层学生考核工作的内容杂,管理细,要求高,头绪多,传统的手工档案式管理办法已基本不适应新形势的要求,已经暴露出了一些弊端。例如,学生请假不方便,学生请假对任课老师,班主任、院系领导不透明;学生对自己整个学期的上课出勤情况没有整体的统计信息。系统采用了ssm框架技术开发,利用mysql数据库实现数据持久化存储。系统后台编程语言采用java进行编程.超级管理员:基础信息管理:实现了学院和系部信息的管理,可以学
首先,弹出某个层时需要给层取名(赋值),如:var mylay = layer.open({ type: 2, content: 'layer.html', title: false, area: ['500px', '500px']});需要关闭指定的弹出层时,直接: layer.close(mylay) 如果在弹出层中写js,...
4.文件系统4.6分区、格式化与挂载4.6.6挂载什么是挂载?Linux通过倒树形的根文件系统来管理所有的文件,内核只能识别并管理根目录/所在的文件系统及其下的目录和文件。因此其他文件系统想要使用,都需要为其指定在现存目录下的访问入口。将额外的文件系统,与现存的Linux能够识别的目录,建立起映射关系,实现将现存目录作为访问额外文件系统的入口的功能,这个过程称为挂载;用于访问额外文件系统的,现存文...
后台运行Python程序,然后把打印信息保存在指定的日志文件中,可随时查看日志。一、启动命令1、一般使用nohup python -u pyth.py >log.log 2 >&1 &2、只记录异常日志(推荐)nohup python -u pyth.py >/dev/null 2>error.log 2>&1 &3、不记录任何日志nohup python -u pyth.py >/dev/null 2>&