1.Linux系统的一般执行过程可以分为以下几个步骤:
-
加载BIOS和Boot Loader:计算机开机时,首先会加载BIOS,然后BIOS会加载Boot Loader,如GRUB或LILO。
-
加载内核:Boot Loader会加载内核,将控制权转交给内核。
-
初始化系统:内核会对硬件进行初始化,并启动系统服务和用户空间程序。
-
用户空间程序执行:一旦系统初始化完成,用户空间程序就可以开始执行。这些程序包括Shell、GUI和其他应用程序。
-
虚拟化技术执行:如果使用虚拟化技术,虚拟化层会在内核和用户空间程序之间插入一个虚拟化层,以便管理虚拟机和宿主机之间的资源共享和隔离。
-
执行应用程序:最终,用户可以在Linux系统上运行各种应用程序,如Web浏览器、文本编辑器、数据库等。
总的来说,Linux系统的执行过程是一个复杂的过程,但虚拟化技术可以帮助简化其中的一些方面,并提高系统的灵活性和可管理性。
2.课程总结
本学期,在linux操作系统分析这门课中,老师首先详细的从多个方面为我们展现了Linux操作系统中的方方面面。李春杰老师主要讲解了进程管理、文件系统管理、中断与异常发生的始终等几个方面。让整个Linux更加完整而清晰的展现在了我们的面前。
这其中给我印象最深刻的部分便是中断异常的处理了。这一部分在408中曾经粗浅的学习过一些,但是在这门课上,李春杰老师从不同的角度进行了更加深入的分析,使我对于这部分知识有了更加深刻的了解。从前我认为中断只是进行了简单的设备和CPU之间的通信,在学完了这门课后我认识到了我知识的不完整。
首先是中断的产生部分,中断控制器监视IRQ线,接受引发信号;将信号转换为对应的中断向量(一个数),通过INTR引脚发送,产生中断,并维持电压等待CPU的应答。这是CPU将会得到中断向量,读IDTR寄存器都确定指向IDT表的第i项,读GDTR寄存器获得GDT的基地址,找到IDT表项中的段选择符标识的段描述符,在判断中断合法后进行下一步操作。CPU将会检查进入中断的进程当前状态,根据内核态和用户态的不同来进行操作。如果是从用户态进入的,将会开启新的内核态堆栈,保存相关寄存器的值,在这之后开始真正的处理中断。在处理程序执行完成后,会再此根据进入时的特权级进行不同的操作,来还原中断前的上下文,返回原来的特权等级。
不同于李春杰老师着重于对底层代码的梳理,孟宁老师更加着重与整个Linux运行的原理。孟宁老师从目前的操作系统生态环境入手,为我们展示了操作系统的发展历程,带我们看到了不同架构、不同时代的操作系统运行的差别,通过实际的代码为了们展示了ISA寄存器、操作系统寻址方式以及一些常用的指令。从较为宏观的角度出发,引领我们形成对Linux操作系统整体上的认识。
孟宁老师对于Linux系统中出现的函数调用情况的讲解,给我留下了深刻的印象。老师通过清晰明了的图像,为我们展现了函数调用时内存堆栈发生的变化。当发生函数调用时,首先系统会将新函数所调用的函数实参反向压栈,然后为恢复环境做准备,将当前的环境中存在的变量全部保存压栈。接下来保存函数的返回地址,当新函数执行完毕后程序将回到这个位置继续执行。然后用堆栈帧指针,多数情况下是ebp指向这里,接下来为新的函数预分配地址空间,使用栈顶指针指向新函数地址空间的最小值开始执行。对Linux系统函数调用的讲解,不仅帮助我更好的理解了Linux系统执行的原理,也帮助我更好的学习了其他课程。