一、inux系统的一般执行过程(结合虚拟化)
1、Linux系统的一般执行过程:
最一般的情况:正在运行的用户态进程X切换到运行用户态进程Y的过程
- 正在运行的用户态进程X
- 发生中断——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).
- SAVE_ALL //保存现场
- 中断处理过程中或中断返回前调用了schedule(),其中的switch_to做了关键的进程上下文切换
- 标号1之后开始运行用户态进程Y(这里Y曾经通过以上步骤被切换出去过因此可以从标号1继续执行)
- restore_all //恢复现场
- iret - pop cs:eip/ss:esp/eflags from kernel stack
- 继续运行用户态进程Y
2、在Linux的一般执行过程中,有以下几个环节用到了虚拟化技术:
- 虚拟内存分配:在程序执行之前,Linux会为程序分配虚拟内存空间,这个虚拟内存空间可以比物理内存更大,可以让程序访问更多的内存空间。虚拟内存是通过页表映射实现的,它可以提高系统的内存利用率,并且可以防止程序之间相互干扰。
- 进程管理:在程序执行时,Linux会为程序创建一个进程,并为进程分配虚拟内存空间、栈空间、堆空间等。进程之间是相互隔离的,每个进程拥有独立的虚拟内存空间和系统资源,可以防止程序之间相互干扰。
- 文件系统:Linux的文件系统是通过虚拟文件系统(VFS)实现的,它可以将不同的文件系统抽象为统一的文件系统接口。虚拟文件系统可以让用户在不同的文件系统中访问文件和目录,例如EXT4、NTFS等。
- 虚拟化技术:在Linux系统中,常用的虚拟化技术包括KVM、Xen和Docker等。KVM是一种基于硬件虚拟化的全虚拟化技术,它可以在Linux系统上运行多个虚拟机。Xen是一种基于半虚拟化的虚拟化技术,它可以在Linux系统上运行多个虚拟机,每个虚拟机需要对操作系统进行修改。Docker是一种基于容器的虚拟化技术,它可以在Linux系统上运行多个容器,每个容器都运行在独立的命名空间中,可以共享操作系统内核。
二、课程中的收获
作为一名跨专业学生,通过两个月linux课程的学习,对linux系统有了进一步深入的了解,学会了使用qemu调试linux内核,熟悉了linux常用操作与命令,通过内核源代码和知识点结合的学习方式,了解了Linux系统的结构和设计原理,以及系统各个功能之间是如何分工协作的,通过自己动手运行和调试内核,我深刻体会到了一个操作系统是如何运作起来的,这门课的干货很多,对于我今后对linux的学习与深入打下了一个良好的基础,也让我对linux内核源码有了更加浓厚的兴趣。