原理归纳与小结
读者通过阅读本章和做实验,相信已经尝试了加载操作系统、操作系统访问外设、操作系统处理中断、用户态与内核态切换等一系列小project。这里面体现了哪些操作系统的原理和概念呢?
系统软件:在这里读者应该体会到操作系统是一个软件,采用编译器生成可执行代码,通过bootloader加载到内存中执行,可以执行所有CPU指令(包括特权指令),访问到所有硬件资源。相对于一般的应用软件,它主要完成的工作是对计算机的硬件资源管理,并给上层应用提供服务(这里还体现不够)。所以我们把操作系统看成是提供计算机系统级管理和基础共性服务的一种系统软件。
段式的内存管理:在这里读者应该体会到CPU访问的地址首先是一个虚拟地址,然后通过MMU的段式地址保护检查和变换(这要看段描述符表中的描述符是如何设置段基址和段范围的)才能把虚拟地址变换成线性地址(由于没有启动分页机制,线性地址就是物理地址),如果虚拟地址的偏移值超过了段范围值,这会出现故障中断。
中断处理:在这里读者应该体会到中断包含了外设产生的外设中断(来的时机不确定)和CPU主动产生的陷阱中断(执行特定指令就会产生),有了中断,操作系统就可以随时打断CPU正常的顺序执行,转而处理相对更加紧急的中断事件。为了能够让CPU继续正常执行,在中断处理前需要保存足够的硬件信息(主要是CPU各种寄存器的值,一般放在内核栈中),以便于中断处理完毕后,通过恢复这些硬件信息,能够回到被打断的地方继续执行。
特权级:在这里读者应该体会到在不同的特权级可以完成的事情是不一样的。操作系统需要管理整个计算机资源,所以它应该运行在CPU的最高特权级,而应用程序不必也不能使用特权指令或访问操作系统的地址空间,所以它应该运行在CPU的非特权级。如果应用程序执行特权指令或访问操作系统的的地址空间,则CPU硬件的安全检查机制会阻止应用程序的执行并尝试故障中断,把CPU控制权转给操作系统进行进一步处理。如果应用程序需要访问计算机资源,可以通过执行特定的指令,产生陷阱中断,从而完成从用户态到内核态的切换,让操作系统为应用程序提供服务。