Linux虚拟化技术(第49天)

操作系统原理

系统调用:操作系统提供的调用接口
库:库是对系统调用的封装

用户态和内核态

x86指令分4层:ring0,ring1,ring2, ring3


MMU:内存管理单元,主要用于内存分页
寄存器:cpu内部保持数据的元器件


cpu缓存:一级缓存,二级缓存,三级缓存


IO设备:包括控制器和设备
控制器:集成在主板上的芯片
驱动程序:通常由设备生产商提供
每个控制器都集成少量的用于通信的寄存器:内核调用驱动程序进行读写操作,驱动程序会操作控制器对设备进行读写。


IO端口空间:所有IO设备的控制器上的寄存器集合,每一个寄存器表现为一个IO端口,被映射到内存中,每一个IO端口的都有一个独立的地址


中断:主板上的可编程中断控制器
中断号:IO设备的控制器在系统启动时要向中断控制器注册一个中断号,当IO设备有读写请求时,向中断控制器发出中断请求,中断控制器通知CPU,CPU发起中断切换。

中断分为中断上部,中断下部。
中断上部:将IO设备缓存中的内容copy到内核内存中

DMA:直接内存访问,完成中断上部。


虚拟地址

物理地址


虚拟化技术:
将计算机资源分割

cpu的虚拟化的技术:模拟和虚拟
模拟:软件模拟,emulation,宿主机架构和guest架构可以不一样,必须模拟出来ring0, ring1, ring2,ring3

虚拟:virtualization,guest并不知自己运行于虚拟机中,必须模拟出来一个特权环境,各guest内核运行于宿主机的ring1,当guest主机运行特权指令时候可以进行二进制翻译,把指令翻译为宿主机的特权指令运行之。


HVM:硬件辅助虚拟化技术:intel vt技术
宿主机运行于ring-1级,各guest用户态进程运行于ring3, guest内核态运行于ring0。


半虚拟化技术:para-virtualization
在硬件上运行hypervisor,也就是vm monitor,hypervisor直接管理硬件,hypervisor虚拟一层hyper call, 各guest的内核进程可以直接调用hyper call。各guest的内核必须做相应的调整,才能适配对hyper call的调用,所以guest是知道hyper call的存在的



Memory的虚拟:

intel EPT技术:extended page table,MMU的虚拟化


TLB的虚拟化:tagged TLB



IO设备虚拟化:模拟,半虚拟化,IO-through(IO透传)

模拟:完全使用软件来模拟真实硬件
半虚拟化:
IO-through:guest直接使用硬件




主机虚拟化的实现方式:type-I  type-II
type-I:硬件上安装hypervisor,hypervisor安装各个guest:
    xen
    vmware ESX
    
type-II:硬件上装一个宿主机,宿主机装虚拟化软件,通过虚拟化软件创建管理各guest
    virtualbox
    kvm
    vmware workstation



Intel硬件辅助的虚拟化:
CPU:vt-x, EPT, targged TLB
IO/CPU:vt-d, vt-x, IOV


模拟:QEMU, virtio



虚拟化技术分类:
模拟:纯软件模拟,guest的内核不需要任何修改
    著名模拟器有:PearPC, Bochs, QEMU

完全虚拟化:native virtualization ,两种加速方式:BT(二进制翻译)和HVM
    实现有vmware workstation, VMware Server, Parallels Desktop,KVM,Xen(HVM)

半虚拟化:para-virtualization
在硬件上运行hypervisor,guest内核要做修改才能调用hypervisor call
    实现有xen, uml(user-mode linux)

OS级别虚拟化:虚拟出多个用户空间,多个用户空间共用同一个内核,一般这些用户空间里运行应用程序,比如httpd,mysqld等
    OpenVZ,lxc, docker,Solaris Containers, freebsd jails


库虚拟化:
    wine(在linux,macOS平台上虚拟windws类库)


应用程序虚拟化:
    jvm, pvm(python vm)



虚拟化网络:软件定义的网络,有桥接,仅主机,地址转换
桥接:宿主机网卡工作于混杂模式,就相当于交换机,宿主机之上的各个guest连接至宿主机的网卡上(因为该网卡已经相当于交换机了)。虚拟出一张网卡接收属于宿主机自己的流量

仅主机:纯软件虚拟出一个交换机,各个guest连接到该虚拟交换机。比如vmware workstation安装后创建的VMnet1

地址转换(nat):软件虚拟出一个交换机,各个guest连接到该虚拟交换机。guest向外通信时将数据包的源地址转换为宿主机的源地址,外部主机发送数据包响应guest时,数据包到达时,数据包的目标地址转换为相应的guest的地址。比如vmware workstation创建的的VMnet8 


yum install bridge-utils   安装 bridge-utils,桥网络管理工具
brctl  --help                      查看使用帮助


linux上的虚拟机操作系统 要使用桥接模式时,做法如下:
brctl addbr br0   添加交换机br0 
ifconfig eth0 0 up   把eth0的ip地址清空
brctl addif br0 eth0  把eth0和br0设备连接
ifconfig br0  172.16.100.8/16 up   为br0设置原eth0的ip地址
route add default gw 172.16.0.1  为br0设置网关
brctl show   查看所有交换机 











评论

此博客中的热门博文

OAuth 2教程

网格策略

apt-get详细使用