上交os lec11 系统虚拟化
11.1 系统虚拟化的优势
- abstration是新接口,virtualization是旧接口新的abstration意味着新的接口,那么通信上层的软件就需要改了
- 在新接口和旧接口之间交替,如果上层趋于稳定,那么底层就可以更新,如果底层一直在更新,那么上层就会停止发展,所以早期很多体系不能确定os,因为os需要做很多修改
- 虚拟化可以提高服务器利用率也就是需要做服务器整合,在一台物理机中同时运行多个虚拟机
- 虚拟机还可以方便程序的开发调试还可以测试应用程序的兼容性做负载均衡也变得更简单,也就是可以将虚拟机镜像打包到各个物理机
- doker,k8s都是更加轻量的虚拟化技术
11.2 什么是系统虚拟化
- 系统的ISA可以是修改页表寄存器等
- ABI是指用户ISA与系统调用,只要抽象出的ABI是一致的。比如windows中的用户ISA与os系统调用接口保持不变,windows版本不同,那么相同的程序仍然可以使用。如果需要在window上跑linux的应用,那么需要window去模拟linux的系统调用接口。如需要在arm架构上跑本来运行在x86和windows的应用,那么需要系统调用与用户ISA
- APIc语言hello world程序如果编译为2进制文件,那么其需要使用到ABI。如果是python这种脚本式语言,那么它会使用api。对于dota,如果是windows版本的,想要跑在linux上很难,因为其会调用很多系统调用的依赖。一个Java程序,如果需要泡在不同的系统,只需要提供相同的JVM即可
- 虚拟机便是需要虚拟用户ISA与系统ISA,对于用户ISA的指令,比如load和store就不需要用到os的介入,用户可以直接访问CPU,内存也就是软硬之间的界限
- 向上提供多个系统ISA与用户ISA在用户层面的ISA中存在的寄存器,可以在切换上下文的时候,把上一个进程的寄存器切换。系统ISA层面有一些寄存器需要做切换时,那么切换内核寄存器,就需要用到VMM
- VMM从功能上讲,需要实现多个客户虚拟机运行,除此之外还需要满足三个特性虚拟机需要提供与改程序原先执行的硬件完全一样的接口,虚拟机需要达到较好的性能,也就是在五虚拟化情况下性能略差一点,因为有些资源需要用在VMM上,所以性能会差一下;虚拟机监控器控制所有物理资源
- hypervisor的分类type-1虚拟机监控器,也就是在裸金属上直接运行,性能较高,定制化层度一般也比较高,另外也需要实现硬件资源的驱动type-2虚拟机监控器,比如qemu/kvm,一般个人电脑也会是用type-2的VMM,Type-2的优势在于可以复用主机os的大部分功能对于一个VMM,加入有4个Vcpu,那么这个4个Vcpu就会对Host OS暴露出4个thread
11.3 如何实现系统虚拟化
- 主要还是要实现系统ISA
- 由VMM去介入执行系统ISA的指令也就是不做所有系统ISA并陷入,由具体指令实现相应的虚拟化
- 主要是处理器虚拟化,内存虚拟化,设备虚拟化
- 处理器虚拟化一种方式是讲客户os降权,那么os执行系统指令时,会发生Trap&Emulate有些指令不可以虚拟化arm中的CPSID与CPSIE指令的开关中断,在用户态会被当作NOP指令需要使用这些方法处理这种指令
- 在这种情况下整个Qemu表现出来的是1个进程和4个线程
- ARM的处理器虚拟化