Linux系统的一般执行过程分为6个阶段
1.POST开机自检
linux开机加电后,系统开始开机自检,该过程主要对计算机各种硬件设备进行检测,如CPU、内存、主板、硬盘、CMOS芯片等,如果出现致命故障则停机,并且由于初始化过程还没完成,所以 不会出现任何提示信号;如果出现一般故障则会发出声音等提示信号,等待故障清除;若未出现故障,加电自检完成
2.系统引导 >MBR
CPU首先读取位于CMOS中的BIOS程序,按照BIOS中设定的启动次序(Boot Sequence)逐一查找可启动设备,找到可启动的设备后,去该设备的第一个扇区中读取MBR。
3.启动Kernel
Kernel是Linux系统最主要的程序,实际上,Kernel的文件很小,只保留了最基本的模块,并以压缩的文件形式存储在硬盘中,当GRUB将Kernel读进内存,内存开始解压缩内核文件。Kernel会以只读方式挂载根文件系统,当根文件系统被挂载后,开始装载第一个进程(用户空间的进程),执行/sbin/init,之后就将控制权交接给了init程序。
4.Init初始化
init是Linux系统中的第一个进程,负责启动其他所有进程,init程序就是进行OS初始化操作,实际上是根据/etc/inittab(定义了系统默认运行级别)设定的动作进行脚本的执行,第一个被执行的脚本为/etc/rc.d/rc.sysinit,
5.Runlevel指定运行级别
不同的级别会启动的服务不一样,init会根据定义的级别去执行相应目录下的脚本,Linux的启动级别分为以下几种:
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(没有NFS)
运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:X11控制台,登陆后进入图形GUI模式
运行级别6:系统正常关闭并重启
6.进程执行过程
最一般的情况:正在运行的用户态进程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
2、Linux执行过程中的几种特殊情况
(1)通过中断处理过程中的调度时机,用户态进程与内核线程之间互相切换和内核线程之间互相切换,与最一般的情况非常类似,只是内核线程运行过程中发生中断没有进程用户态和内核态的转换;
(2)内核线程主动调用schedule(),只有进程上下文的切换,没有发生中断上下文的切换,与最一般的情况略简略;
(3)创建子进程的系统调用在子进程中的执行起点及返回用户态,如fork;
(4)加载一个新的可执行程序后返回到用户态的情况,如execve;
虚拟机技术是云计算最核心的技术,而 KVM(Kernel-based Virtual Machine)是当前最主流的虚拟机技术之一。虚拟机技术主要包括 CPU 的虚拟化、内存的虚拟化和 I/O 的虚拟化,典型的虚拟机实现有传统的 QEMU 虚拟机实现和轻量化的 StratoVirt 虚拟机实现。
在虚拟化环境下,虚拟化层会拦截所有的硬件访问,并将其重定向到虚拟机中。这意味着,在启动引导程序时,虚拟化层会加载虚拟机的引导程序而非物理主机上的引导程序。
虚拟化技术
虚拟机技术主要包括 CPU 的虚拟化、内存的虚拟化和 I/O 的虚拟化,典型的虚拟机实现有传统的 QEMU 虚拟机实现和轻量化的 StratoVirt 虚拟机实现。在Linux系统中,引导加载程序(bootloader)负责加载内核和必要的初始文件系统。虚拟化层捕获并重定向所有中断相关的内容,完成虚拟化。虚拟化技术为每个虚拟机提供了强大的安全和隔离机制,确保它们之间不会相互干扰。
课程收获
通过VScode阅读linux源代码并进行跟踪,分析进程切换过程,对系统调用、进程切换的知识有更加直观的了解,课程还涵盖了Linux容器技术,包括Docker和Kubernetes等工具的底层实现原理。我学会了如何使用容器来隔离和管理应用程序,并了解了容器的部署、监控和扩展等方面的知识。