虚拟化
虚拟化顾名思义就是不是真实的,非实际物理的。而是逻辑上面的一个概念。平常的机器资源大小是固定的,不能灵活改变。而且资源是不能够复用的, 在一台机器上的资源就那么多,系统编号都是按序来的,不能够大家都一样的。怎么说了,其实系统本身也是具有虚拟化的概念,比如进程的虚拟地址,每个进程都有4G的虚拟空间。
在linux上解决不灵活的问题方法就是创建虚拟机。每个虚拟机都有单独的操作系统,可以指定规格,通过一个命令就可以启动起来。我们平常使用到的VMWare, virtualBox就是虚拟化的具体应用案例。这些软件对于宿主机而言,是一个普通的用户程序,但是在内部运行时,他又好像就是系统程序。
这些软件,充当一个虚拟化的层。大概就是hook了系统的接口,在虚拟机内核调用的都是其提供的接口,虚拟机内核无感知。
虚拟化有三种方式:
- 完全虚拟化,就是模拟假的CPU、内存、网卡、硬盘。凡事都是通过虚拟化软件来转一手执行。
- 硬件辅助虚拟化,通过设置虚拟机的状态位,让他直接在CPU上执行指令,而不需要虚拟化软件转一手,提高执行的效率。
- 半虚拟化,不同于前面两种,这中方式内核知道自己是虚拟机,采用特别的接口处理指令。
有一种虚拟化软件叫qemu,就是使用的完全虚拟化的方式。现在qemu也结合了硬件辅助虚拟化提高了指令执行的速度,也使用了半虚拟化的方式加快了设备访问的效率。
linux内核提供了一个KVM模块,暴露接口给用户态程序调用,提高指令的执行速度。
虚拟机的创建
基本的操作跟安装virtualBox虚拟机一样:
- 创建一个虚拟机指定一个名称
- 设置虚拟内存的大小
- 创建虚拟的硬盘,指定大小。可以选择固定大小,也可以动态分配的(占用实际的大小)
- 挂载iOS系统安装盘
- 选择网络模式,桥接网络的话就是会创建一个虚拟的交换机,把虚拟机网卡和物理网卡连接起来。桥接网络的话虚拟机的ip跟物理机是一个网段的。NAT网络的话,IP不是一个网段的。
更多
这里小结了一下虚拟化的原理。具体虚拟化的实现是一个很大的知识面了。以后有需要再深入。
行动,才不会被动!
欢迎关注个人公众号 微信 -> 搜索 -> fishmwei,沟通交流。