一、结合虚拟化技术分析Linux系统的一般执行过程
1.Linux系统的一般执行过程
最一般的情况:正在运行的用户态进程X切换到运行用户态进程Y的过程
-
1)正在运行的用户态进程X
-
2)发生中断——save cs:eip/esp/eflags(current) to kernel stack,then load cs:eip(entry of a specific ISR) and ss:esp(point to kernel stack).
-
3)SAVE_ALL //保存现场
-
4)中断处理过程中或中断返回前调用了schedule(),其中的switch_to做了关键的进程上下文切换
-
5)标号1之后开始运行用户态进程Y(这里Y曾经通过以上步骤被切换出去过因此可以从标号1继续执行)
-
6)restore_all //恢复现场
-
7)iret - pop cs:eip/ss:esp/eflags from kernel stack
-
8)继续运行用户态进程Y
当然还有几个特殊的情况:
- 1)通过中断处理过程中的调度时机,用户态进程与内核线程之间互相切换和内核线程之间互相切换,与最一般的情况非常类似,只是内核线程运行过程中发生中断没有进程用户态和内核态的转换;
- 2)内核线程主动调用schedule(),只有进程上下文的切换,没有发生中断上下文的切换,与最一般的情况略简略;
- 3)创建子进程的系统调用在子进程中的执行起点及返回用户态,如fork;
- 4)加载一个新的可执行程序后返回到用户态的情况,如execve;
2.虚拟化技术在linux执行过程中的应用
虚拟机技术在linux执行过程中起着非常重要的作用,其中主要涉及到虚拟机管理器以及虚拟机中断。
(1)虚拟机管理器
虚拟机管理器(VMM)是一种软件程序,用于实现虚拟化技术,将物理服务器分割为多个虚拟服务器,并控制它们的运行。下面是虚拟机管理器的一些功能:硬件资源管理、虚拟机配置、虚拟机监控、虚拟机间通信、安全性和隔离性。
(2)虚拟机中断
物理外设产生虚拟中断流程:
外设中断信号(Hypervisor已经将其配置成虚拟中断)到达GIC;
GIC Distributor将该物理IRQ发送至CPU;
CPU trap到Hyp模式,此时将会退出Guest OS的运行,并返回到Host OS;
Host OS将响应该物理中断,也就是Host OS驱动响应外设中断信号;
Hypervisor往List Register写入虚拟中断,Virtual CPU interface将virtual irq信号发送至vCPU;
CPU将处理该异常,Guest OS会从Virtual CPU Interface读取中断状态进行响应;
虚拟外设产生虚拟中断流程:
Qemu模拟外设,通过irqfd来触发Hypervisor进行中断注入;
Hypervisor往List Register写入虚拟中断,Virtual CPU interface将virtual irq信号发送至vCPU;
CPU将处理该异常,Guest OS会从Virtual CPU Interface读取中断状态进行响应;
irqfd提供了一种机制用于注入虚拟中断,而这个中断源可以来自虚拟外设;
irqfd是基于eventfd的机制来实现的,用于用户态与内核态,以及内核态之间的事件通知;
事件源可以是虚拟设备,比如VFIO框架等。
二、 课程总结
我是一名跨专业的学生,之前对linux的了解可能仅仅停留在纸面上,仅仅是会用一些简单的指令,通过这两个月的linux操作系统课程的学习,我对linux系统的执行过程又有了深入的理解,也学会了如何用qemu调试linux内核,面对一堆很复杂的源码也有头绪可以一步一步的读下去了。通过阅读源码以及和老师上课以及ppt上知识点结合的方式,我逐渐明白了linux系统设计的巧妙之处,明白了各个功能是如何分工协作的,这也让我对于一个大型工程项目有了一个更宏观的认识,也让我对于linux的学习更加感兴趣了,即使课程结束了我也会不断的了解更多的新知识,也会用到在这门课上学到的各种学习方法,这也正是课程的意义所在。
文章介绍了Linux系统的一般执行过程,包括用户态进程间的切换,以及内核线程的交互。同时,探讨了虚拟化技术在Linux中的应用,如虚拟机管理器的职责和虚拟中断的处理流程,特别是物理和虚拟外设如何触发中断。作者通过学习深化了对Linux操作系统的理解,并表示会对相关知识保持持续学习。
533

被折叠的 条评论
为什么被折叠?



