高级操作系统——虚拟化技术学习(Part1)

mac2025-04-01  6

多计算系统

公司运营的时候,会拥有邮件服务器,web服务器等服务器。这些服务器运行在不同计算机上 作用: 1:可靠性。机器发生故障是常态 2:安全性。沙盒原理,攻击者攻陷某个服务器不一定能获得他想要的信息 3:某个机器无法承受所有负载

虚拟机

优化:使用虚拟机:VMM虚拟机管理程序 的确,在一个虚拟化系统中,将不同的服务器安装在不同的虚拟机上,就像把所有鸡蛋放在一个篮子里,如果硬件出现故障那么带来的后果是灾难性的。但是虚拟化有效的前提是虚拟机的故障多不是硬件而是软件造成的

VMM的分类:

首先区别两个不同的东西,虚拟机和虚拟机管理程序VMM 虚拟机又分为客户操作系统和用户程序 第一类虚拟化管理程序和第二类虚拟化管理程序: 第一类:类似于操作系统,运行的最高特权级程序,VMM直接运行在裸机上。 第二类:依赖于windows或linux的操作系统,类似于一个普通的进程,VMM运行在其他操作系统上。本身的操作系统称为宿主操作系统

全虚拟化,半虚拟化,进程虚拟化,硬件辅助虚拟化

全虚拟化:呈现与底层一模一样的操作系统【分为支持VT和不支持VT】 半虚拟化:暴露自己是一个虚拟化环境,提供虚拟化调用 硬件辅助虚拟化: 进程级虚拟化:作为进程申请

全虚拟化技术:

支持VT的操作系统:

首先对于一个第一类虚拟机管理程序(直接运行于裸机)此时VMM就充当操作系统,执行内核态的功能,为真正的内核态。 而在用户态的虚拟机的操作系统,也认为自己处在内核态,所以命名为虚拟内核态 虚拟机的用户进程,为用户态,也可以称为虚拟用户态 对于开启VT(Virtualization Technology)的机器,如果虚拟机请求特权指令,则VMM帮助其执行 对于未开启VT的,会出错。

不支持VT的操作系统:

利用二进制翻译和特权级指令。 对于linux系统,ring0为内核态,ring3为用户态。则设置ring1为客户操作系统,此时VMM在ring0里。 所以此时虚拟机的用户程序在ring3,虚拟机的操作系统在ring1,VMM在ring0 二进制翻译:用户程序发出用户指令–>客户操作系统对应为特权指令–>VMM接收成基本块,将基本块中的特权指令转换成虚拟机管理程序中的指令,之后调用真正的硬件其实我也不是很理解

半虚拟化技术

修改操作系统源码,将特权指令转换为虚拟化调用,客户操作系统的特权指令被移除。 用户程序发出用户指令–>客户操作系统对应为虚拟化调用–》VMM执行

硬件辅助虚拟化

这种虚拟化技术引入新的CPU运行模式和新的指令集,使得VMM和GuestOS运行于不同的模式下(VMM=Root Mode;GuestOS=Non-Root Mode) GuestOS运行于受控模式,原来的一些敏感指令在受控模式下会全部陷入VMM,由VMM来实现模拟,这样就解决了部分非内核态敏感指令的陷入——模拟难题,而且模式切换时上下文的保存恢复由硬件来完成,这样就大大提高了陷入——模拟时上下文切换的效率 。

内存虚拟化

首先辨别概念 虚拟机虚拟地址 虚拟机物理地址 宿主机物理地址 影子页表: 1:客户机A请求将虚拟7,8,9页映射到物理地址10,11,12页上,宿主机接受了请求: 虚拟机虚拟地址7,8,9= 虚拟机物理地址10,11,12= 宿主机物理地址10,11,12 2:客户机B请求将虚拟10,11,12页映射到物理地址10,11,12页上,宿主机接受了请求: 虚拟机虚拟地址10,11,12= 虚拟机物理地址10,11,12= 宿主机物理地址15,16,17 因为宿主机物理地址10,11,12已经被分配了,所以必须另找地方。 通过这里可以看出, 虚拟机虚拟地址 虚拟机物理地址 是通过页表实现 虚拟机物理地址 宿主机物理地址是通过影子页表实现。

过量使用: 一个宿主机开设三台虚拟机,若宿主机的内存32GB,则三台虚拟机可以设置为16GB。相当于虚拟机的内存和是超过宿主机的,因为可能不会用到内存的上限,也可能会共享具有相同内容的页面(linux内核)

内存气球: 通常来说,要改变客户机占用的宿主机内存,是要先关闭客户机,修改启动时的内存配置,然后重启客户机才能实现。 内存的ballooning(气球)技术可以在客户机运行时动态地调整它所占用的宿主机内存资源,而不需要关闭客户机。 气球中的内存是可以供宿主机使用的(但不能被客户机访问或使用)。 当宿主机内存使用紧张,请求客户机回收已分配的部分内存,将内存放入内存气球,内存气球充气膨胀,此时宿主机可以利用气球中的内存给其他进程或虚拟机 当客户机中内存不足时,让客户机的内存气球压缩,释放出内存气球中的部分内存,让客户机使用更多的内存。

最新回复(0)