Linux系统的一般执行过程
Linux操作系统的启动过程
一般分为四个阶段: BIOS启动引导阶段; GRUB启动引导阶段; 内核阶段; init初始化阶段。
BIOS启动引导阶段:计算机加电后,首先运行的是BIOS程序,BIOS程序会检测计算机硬件设备并进行初始化,然后将控制权交给下一级的启动引导程序。
GRUB启动引导阶段:GRUB是GNU开源组织开发的多操作系统引导程序,它可以在多个操作系统之间进行切换。GRUB启动后会显示一个菜单,让用户选择要启动的操作系统。
内核阶段:内核是操作系统的核心部分,它负责管理计算机硬件设备和软件资源。内核在启动时会加载驱动程序、文件系统等模块,并初始化各种数据结构。
init初始化阶段:init是Linux系统中的第一个进程,它负责启动其他所有进程。init进程会读取配置文件/etc/inittab,根据配置文件中的信息来启动其他进程。
进程执行过程
最一般的情况:正在运行的用户态进程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
结合虚拟化技术分析Linux系统的一般执行过程
虚拟化技术下Linux系统的执行过程如下
-
首先,在物理计算机上启动虚拟化管理程序,例如KVM、Xen等会被启动。虚拟化管理程序负责创建和管理虚拟机并提供了对硬件资源的访问和分配。之后创建根据用户要求,创建一个或多个虚拟机。
-
虚拟化管理程序会分配硬件资源,虚拟化管理程序将物理计算机的硬件资源,如CPU、内存等。
-
接着虚拟机启动引导程序,而在虚拟化环境下,所有的硬件访问都会被拦截,虚拟化层会虚拟化层会将其重定向到虚拟机中。此时操作系统内核开始执行。在Linux系统中,引导加载程序(bootloader)负责加载内核和必要的初始文件系统。所有中断相关的内容都会被虚拟机捕获,并重定向到虚拟机,完成虚拟化。
-
最后启动用户空间,虚拟化技术为每个虚拟机提供了强大的安全和隔离机制,以确保它们之间不会相互干扰。
课程收获
通过VScode阅读linux源代码并进行跟踪,分析进程切换过程,对系统调用、进程切换的知识有更加直观的了解,课程还涵盖了Linux容器技术,包括Docker和Kubernetes等工具的底层实现原理。我学会了如何使用容器来隔离和管理应用程序,并了解了容器的部署、监控和扩展等方面的知识。