虚拟化的好处: 下层复杂逻辑转变为上层的简单逻辑。
操作系统对硬件的虚拟化
- 操作系统本身就是一段程序
- 操作系统是可以提供给其他应用程序方便编写并运行的程序,由程序来运行程序,而不是程序自己来运行,则是操作系统提供虚拟化的表现。
操作系统的多任务模式:
操作系统利用中断服务程序,当时钟中断到来的时候,cpu根据中断向量表的内容,指向调度程序所在的内存地址入口,执行调度程序的代码,调度程序所做的就是将cpu的执行跳转到各个应用程序所在的内存地址入口,比方说让每个应用程序执行10ms,然后保存其状态,然后等下次轮到它的时候继续执行。因为间隔时间特别小,所以给人的错觉会认为这些程序在同时执行。
计算机存储子系统的虚拟化
存储子系统的元素包括磁盘、磁盘控制器、存储网络、磁盘阵列、卷管理层、目录虚拟层、文件系统虚拟层。
磁盘控制器
磁盘控制器的工作是根据驱动程序发来的磁盘读写信息,向磁盘发送SCSI指令和数据。它的虚拟化表现在磁盘控制器可以对其驱动程序隐藏其下挂的物理磁盘,虚拟出一个或多个虚拟磁盘。由控制器来完成虚拟磁盘和物理磁盘的映射和抽象虚拟。RAID就是典型代表。
存储网络的虚拟化
在交换式SAN上,即任何节点都是通过交换设备来进行通信的,通过在交换节点上做些手脚,就可以达到虚拟化的效果。
case1:在交换机上嵌入SCSI协议感知模块(暂时还不太懂这是个什么东东),SCSI发起设备向目标设备传输的数据,经过交换机,会主动复制对应的帧到另一个节点lun上,形成镜像。若一个节点故障,则会将数据重定向到镜像的LUN上。
case2:或者将某些节点的N个lun合并成一个池,然后动态的从这个池中再划分出虚拟LUN,向发起者报告。
磁盘阵列的虚拟化
磁盘阵列本来就是一个小计算机系统(JBOD除外),是对存储子系统的抽象虚拟化最佳表现。
何为磁盘阵列,指的是将大量磁盘进行组织管理,抽象虚拟成逻辑磁盘。通过和主机适配器通信,呈现给主机。
这个虚拟设备,面对后端存储,它充当主机,可以从后端掌管LUN,然后将这些LUN合并再按照需求灵活分割,从而呈交给前端的多台主机使用;而面对前端主机的时候,它就是存储。
卷管理层
运行在应用主机上的功能模块(它是应用在主机上的),对底层的物理磁盘或者LUN搜集再分配。
- 对盘阵控制器虚拟化之后的LUN再虚拟化,
- 比如进行镜像处理,
- 或者对其中的多个LUN做成软RAID 。
- 再或者将所有的LUN合并形成资源池。
- 然后掰成多个卷。
- 典型的卷管理软件有LVM等
文件系统的虚拟化
即通过元文件(描述文件分布和属性)找实际数据在磁盘上对应的位置。文件系统是对磁盘块的虚拟、抽象、组织和管理。
目录虚拟层
操作系统(Windows\UNIX\linux)中都有一个虚拟目录结构,在linux中叫VFS(Virtual File System)。
虚拟文件系统,也就是说文件系统的目录不是真实的,任何的文件系统可以挂在目录下。成为虚拟目录的子目录,可以增强灵活性。
带内虚拟化和带外虚拟化
- 带内 InBand :控制指令和数据包走同一路线,所谓控制指令指的是控制数据流向的数据,如IP路由协议产生的数据包,它也是利用实际数据线路进行传输。
- 带外 OutBand:控制指令走单独的路线。
带外和带内虚拟化:
- 带内虚拟化:进行虚拟化的设备直接横在发起者和目标路径之间,也就是串在同一路径上,作为一个“泵”
- 带外虚拟化:旁路,用这条路径来走控制信号,而实际数据还是由发起者直接走向目标。发起者必须先咨询旁路的虚拟化设备,经过提示之后,才根据虚拟化设备的指示直接向目标请求数据.