一、结合虚拟化技术分析Linux系统的一般执行过程
在虚拟化环境中,中断过程经过多层抽象和处理。
1、首先,物理设备的中断信号被发送到宿主机。宿主机操作系统会将这个中断信号抽象成一个虚拟中断信号,并通过Hypervisor将它传递到对应的虚拟机。
虚拟机管理器(VMM或Hypervisor)
最初人们用VMM(Virtual Machine Manager,虚拟机管理器)来描述该功能,但是20世纪70年代早期,IBM工程师创造了Hypervisor(虚拟机管理程序)一词,因为虚拟化管理软件运行在被IBM称为Supervisor的操作系统之上。
可以利用Hypervisor来完成虚拟机的创建、虚拟机资源的分配、虚拟机参数的修改以及虚拟机的删除等操作。
Hypervisor主要分为两类,其类型名称并没有太多关于它们之间区别的信息,只是简单地称为Type-1 Hypervisor和Type-2 Hypervisor。KVM和QEMU可能是Linux中流行且常用的Hypervisor。
KVM是Linux内核提供的虚拟化架构,可以让QEMU使用硬件辅助的虚拟化技术。KVM/QEMU允许客户操作系统直接访问虚拟化硬件并获得几乎与直接访问硬件相同的性能(如果该客户操作系统运行在物理机之上)。
2、在虚拟机接收到中断信号后,虚拟CPU会将当前应用程序的执行状态保存到内存中的上下文环境中,然后切换到虚拟机内核的代码执行中。这个过程被称为上下文切换(Context Switch)。
虚拟cpu
创建虚拟机时,Hypervisor会将预定义的内存和CPU分配给虚拟机,分配给虚拟机的CPU资源会被客户操作系统视为专用物理CPU。由于有些客户操作系统对于支持的CPU套接字有限制,因此较新版本的Hypervisor会根据CPU套接字的颗粒度及内核数量来提供CPU资源。
可分配的CPU性能基于宿主操作系统级别的可用CPU资源,例如,如果宿主服务器使用的是Intel Xeon E5-2680v2
虚拟内存
为虚拟机分配内存也要使用共享技术。通过共享技术将内存分配给Hypervisor时,同样会让客户操作系统认为是在使用物理内存资源。类似内存页和磁盘交换空间等技术会被用于虚拟机操作系统,分配的全部可用内存都由其独占使用。
3、虚拟机内核接收到中断请求后,会根据中断的类型和原因进行相应的处理,例如响应磁盘中断的IO操作或处理网络中断处理网络数据包等。如果需要访问外部数据,虚拟机内核会将的IO操作传递到虚拟磁盘或虚拟网络设备驱动程序中,以便后续使用。
I/O设备分配
串行及其他I/O设备在虚拟机之间实现共享,是通过在同一时间内只将它们分配给一个虚拟机来实现的。这样一来,Hypervisor就可以基于特定的触发条件来切换资源分配。
例如在ESXi中,如果将键盘分配给虚拟机的控制台,ESXi截取到Ctrl+Alt组合键之后,就会将键盘从控制台中分离出来并连接到其他虚拟机上。
磁盘空间分配
初次创建虚拟机时,Hypervisor会被告知分配给客户操作系统的磁盘空间大小。根据所使用的置备方法类型,可以在宿主操作系统上创建一个或一组文件。可以使用两种常用的磁盘空间置备方法:厚置备(Thick Provision)和精简置备(Thin Provision)。
4、处理完成后,虚拟机内核会重新加载先前保存的上下文环境,并返回到原先应用程序的执行状态中继续执行。这个过程可能涉及到虚拟化技术中的内存管理、调度、交互等多个方面。
总之,虚拟化环境中的中断过程比物理环境中的中断过程要复杂得多,需要多个层次的抽象和处理。虚拟化技术的性能和可用性都会对中断过程的处理产生影响,因此对于虚拟化环境中的中断响应速度和稳定性的优化也具有重要的意义。
二、课程总结
本门课程主要基于Linux内核分析系统调用、进程切换、可执行程序工作原理等。本人是跨考生,之前没有接触过linux系统相关知识,所以通过本门课程,学习了编译内核,构建根文件系统,通过qemu模拟环境启动内核,使用gdb断点调试内核程序并据此分析,从一个个关键函数分析一个程序运行时的过程,对于进程切换有了一个既全面又细致的理解。对于进一步深入学习Linux系统有了一个良好的示范与基础。最终对Linux系统有了深入的了解。