操作系统对硬件的虚拟化
操作系统
:就是为其他程序提供编写和运行环境的程序。
由程序来运行程序,而不是程序自己来运行,这是操作系统提供的虚拟化的表现。
加电之后,首先运行OS,随时可以载入其他程序执行。执行完以后切换回OS本身。
但是每次还是要等待这个程序执行完毕,才能接着载入下个程序执行。任何中断事件,都会中断正在运行的程序。
程序执行完毕,会将CPU归还给OS。从而继续OS本身的运行。这种操作系统就是单任务操作系统,典型代表就是DOS。
而批处理就是操作系统将多个程序一个一个的排列起来。省去了人为载入的过程。所以批处理操作系统相对单任务来说又进了一步,但是本质仍然是一个程序独占资源。
再后来操作系统针对系统时钟中断开发了中断服务程序,也就是多任务OS中的调度程序。
中断来临,CPU根据中断向量表的内容,指向调度程序所在的内存地址入口,执行调度程序的代码。
调度程序将CPU的执行跳转到各个应用程序所在的内存地址入口。
从微观上看,每个应用程序独占CPU,但是时间非常小10ms,从宏观上看就是同时执行多个任务。
多任务操作系统的关键就是有多任务调度程序。
虚拟化的好处
虚拟化的好处是,将下层复杂的逻辑转换为上层简单的逻辑,方便人类读懂。
其实整个计算机技术就是抽象、封装、虚拟、映射的过程。就连CPU也在想办法把功能封装到CPU的逻辑电路里面,从而出现了更多的指令集。1.6GHz的酷睿双核CPU性能比主频3GHz的奔腾4代CPU更高。
计算机存储子系统的虚拟化
存储子系统主要分为:
- 磁盘
- 磁盘控制器
- 存储网络
- 磁盘阵列
- 卷管理层
- 目录虚拟层
- 文件系统虚拟层
下面将介绍这些子系统如何进行抽象虚拟的。
磁盘控制器的虚拟化
控制器的工作就是根据驱动程序发来的磁盘读写信息,向磁盘发送SCSI指令和数据。
所以磁盘控制器完全可以对驱动程序隐藏下挂的物理磁盘。而虚拟出一个或者多个虚拟磁盘。RAID就是典型代表。控制器将物理磁盘组成RAID Group,然后在RG的基础上虚拟出多个LUN,通告给主机驱动。
存储网络的虚拟化
在交换式SAN中,任何节点都是通过交换设备来进行通信的,如果在交换节点上做些手脚,就可以达到虚拟化的效果。
我们可以在交换机上嵌入SCSI协议感知模块。,SCSI发起设备向目标设备传输的数据,经过交换机,会主动复制对应的帧到另一个节点的LUN上,形成镜像。若一个节点故障,则会将数据重定向到镜像的LUN上。
还可以将某些N节点的LUN合并成池,然后动态的从这个池中分出虚拟LUN
磁盘阵列的虚拟化
磁盘阵列本来就是一个小计算机系统,是对存储子系统的抽象虚拟化最佳表现。
何为磁盘阵列,指的是将大量磁盘进行组织管理,抽象虚拟成逻辑磁盘。通过和主机适配器通信,呈现给主机。
盘阵控制器的角色都是不直接参与连接每块磁盘,而是利用后端适配器来管理下挂的磁盘
适配器就是中心控制器驱动的二级磁盘控制器。作为中心CPU的IO适配器,直接控制和管理物理磁盘,然后由中心控制器统一实现RAID、卷管理等功能。
后端适配器与中心控制器CPU之间通过PCIX总线等连接。
中心控制器不但可以实现最基本的RAID功能,还可以实现LUN镜像、快照、远程复制、CDP数据保护、LUN再分配等。
卷管理层
运行在应用主机上的功能模块,对底层的物理磁盘或者LUN搜集再分配。
对盘阵控制器虚拟化之后的LUN再虚拟化,
比如进行镜像处理,
或者对其中的多个LUN做成软RAID 。
再或者将所有的LUN合并形成资源池。
然后掰成多个卷。
文件系统
SAN存储解决的是怎么记录的问题,文件系统解决的是怎么组织磁盘的数据
需要在相应的地方做标记,通过一个链表一次一次指引找出完整的数据。
把链表单独做成一个记录,放在固定的位置,可以通过表找出一条数据在磁盘上的完整分布。利用这种思想做出来的文件系统,比如FAT文件系统,把每个完整数据称为文件。
文件分配表:FAT , File Allocate Table文件可以在磁盘不连续的存放,由单独数据结构来描述文件在磁盘的分布,
NTFS:给出文件在磁盘上的具体扇区,利用“开始——结束”这样的结构来描述文件的分布情况。
文件系统将磁盘抽象成了文件柜,同一份文件放在柜子的不同抽屉,利用元数据
来记录“文件——对应抽屉” 的分布情况。
描述其他文件分布情况及属性的文件,
元文件Metadata
文件系统是对磁盘块的虚拟、抽象、组织和管理。只需要访问文件,就等于访问了扇区。
目录虚拟层
操作系统中有一个虚拟目录结构,在linux中叫VFS。--
虚拟文件系统,也就是说文件系统的目录不是真实的,任何的文件系统可以挂在目录下。成为虚拟目录的子目录,可以增强灵活性。
其次,OS外部设备虚拟成一个虚拟文件,比如卷。/dev/hda
磁盘——控制器——存储网络——总线适配器——卷管理层——文件系统——虚拟目录层和最终应用层
带内虚拟化和带虚拟化
带内 InBand :控制指令和数据包走同一路线,所谓控制指令指的是控制数据流向的数据,如IP路由协议产生的数据包,它也是利用实际数据线路进行传输。
带外 OutBand:控制指令走单独的路线。
带外和带内虚拟化:
带内虚拟化:进行虚拟化的设备直接横在发起者和目标路径之间,也就是串在同一路径上,作为一个“泵”
带外虚拟化:旁路,用这条路径来走控制信号,而实际数据还是由发起者直接走向目标。发起者必须先咨询旁路的虚拟化设备,经过提示之后,才根据虚拟化设备的指示直接向目标请求数据
硬网络与软网络
硬网络
硬件网络设备其功能还是靠软件来实现的,特别是路由设备,本质是一台Server,上面运行着处理数据包的程序。
所以硬件网络环境实际上是用一部分PC充当网络硬件设备,其他PC利用网络设备的PC实现通信
软件网络程序
message queue和Message Broker在硬件网络设备 的基础上,模拟出一个纯软件的网络转发引擎。
MQ:消息转发器。客户端通过TCP/IP与之相连,将消息转发到这个转发器上,然后根据策略将消息转发到其他客户端上。类似于交换机,不过MQ的链路层由TCP/IP来充当
MB:应用逻辑转发引擎。应用层次的转发,类似邮件服务器。只不过可转发各种格式的数据包。
多虚一
HPC
HPC主要分为两类:
CPU密集运算:专门用来计算数据,称为计算节点
IO密集运算:专门用来存储计算过程中所需要提取或者存放的数据,称为存储节点
计算节点看做CPU和内存,存储节点看做硬盘。对独立的PC,CPU内存与硬盘的连接为高速IO总线,如PCIe
但是对HPC ,有些利用Infiniband有些利用以太网。前者一般适用于IO密集运算,后者用于CPU密集运算。
Web + APP + db
客户端通过Web服务器获得网页,应用逻辑由APP服务器处理。最后通过Web服务器进行展现。
可以把Web看做显示终端,APP看做CPU和内存,将DB看做硬盘
一虚多
计算虚拟化:模拟硬件系统,将程序对这个硬件系统CPU发送的指令经过处理之后,加以虚拟传到物理CPU上。比如Vmware的ESX
用磁盘阵列来虚拟磁带库
VTL,Virtual Tape Lib
要提高磁带库的速度,只能多个驱动器同时工作,成本高。
VTL使用磁盘来存储数据而不是磁带,虚拟出机械手、磁带驱动器、磁带