一、虚拟化技术下linux的一般执行过程
-
虚拟机启动:在虚拟化平台(VMware,KVM)中启动虚拟机实例。
-
虚拟机硬件模拟:虚拟化平台负责模拟虚拟机的硬件环境,包括CPU、内存、磁盘、网络接口等。
-
引导过程:虚拟机启动后,它会加载引导程序。引导程序从虚拟磁盘中读取配置文件,确定要加载的内核映像和启动参数。
-
内核加载和初始化:引导程序加载Linux内核映像到虚拟机的内存中。内核映像包含Linux内核和初始的文件系统,它是一个压缩的可执行文件。内核映像被解压缩到内存,并执行内核初始化过程。
-
内核初始化:Linux内核进行一系列的初始化操作,包括:
- 设置系统环境、初始化设备驱动程序、建立内核数据结构等。
- 检测和加载虚拟机中的硬件设备,并为其分配资源。
- 建立初始init进程。
-
用户空间初始化:
init
进程启动后,它负责启动其他系统服务和应用程序。init
进程读取配置文件(如/etc/inittab
或/etc/init.d
目录下的启动脚本),确定需要启动的服务和应用程序。init
进程按照配置文件的要求逐个启动各个系统服务和应用程序。
-
用户登录和交互:一旦系统服务和应用程序启动完成,用户可以通过终端或图形界面与虚拟机进行交互
-
Shell启动:登录成功后,系统会为用户启动一个Shell(命令解释器),如Bash(Bourne Again SHell)。
-
用户命令执行:用户可以在Shell中输入各种命令来执行任务、管理文件和目录,以及与系统进行交互。
-
命令解析和执行:当用户在Shell中输入命令后,Shell会对命令进行解析并确定要执行的操作。Shell会解析命令行中的命令和参数,执行相应的系统调用或启动相应的可执行程序。如果命令是Shell内建命令(如cd、ls、mkdir等),则Shell会直接执行该命令。如果命令是外部命令(如/usr/bin/ls),则Shell会搜索路径(如$PATH环境变量)找到对应的可执行文件并执行。
-
系统调用执行:当Shell需要执行系统级任务时(如读写文件、创建进程),它会调用相应的系统调用。
- 系统调用是操作系统提供的接口,允许应用程序和用户空间与内核交互。
- Shell通过系统调用来请求操作系统执行特定的操作,如打开文件、读取数据、创建子进程等。
-
内核执行:当系统调用发生时,控制权会传递给Linux内核,内核会执行相应的操作。内核负责管理进程调度、内存管理、文件系统访问、设备驱动程序等任务。内核执行所需的操作,包括访问硬件设备、分配内存、调度进程等。
-
命令输出和交互:当命令执行完成后,Shell将输出结果返回给用户,并等待用户输入下一个命令。
- 命令的输出可以显示在终端上,或者被重定向到文件或其他程序中。
- 用户可以根据需要输入更多的命令,与系统进行交互。
二、课程收获
通过学习linux操作系统分析这门课程,我对linux操作系统有了更加深刻的认识。由于我是跨考生,我之前对于操作系统的认识仅仅局限于书本上的文字概念,对于操作系统代码级别的实现没有概念。通过这几次实验使用linux操作系统,使用vsccode,gdb调试汇编程序和linux系统调用、linux系统内核,我对linux的进程切换和调度代码层面的实现有了更加深刻的理解。
总的来说学习操作系统和计算机组成原理对于软件工程师的发展至关重要,其中的很多思想在很多软件设计方面都有应用,这对于我未来的学习和工作有很大帮助。