课程学习总结报告
要求:请您根据本课程所学内容总结梳理出一个精简的Linux系统概念模型,最大程度统摄整顿本课程及相关的知识信息,模型应该是逻辑上可以运转的、自洽的,并举例某一两个具体例子(比如读写文件、分配内存、使用I/O驱动某个硬件等)纳入模型中验证模型。谈谈您对课程的心得体会,改进建议等。
精简的Linux系统概念模型
精简的Linux系统概念模型:Linux系统从应用角度来看,分为内核空间和用户空间两个部分。内核空间是Linux操作系统的主要部分,但是仅有内核的操作系统是不能完成用户任务的。丰富并且功能强大的应用程序包是一个操作系统成功的必要条件。从用户空间转换到内核空间通过系统调用实现。
系统调用接口
SCI 层提供了某些机制执行从用户空间到内核的函数调用。正如前面讨论的一样,这个接口依赖于体系结构,甚至在相同的处理器家族内也是如此。SCI 实际上是一个非常有用的函数调用多路复用和多路分解服务。在 ./linux/kernel 中您可以找到 SCI 的实现,并在 ./linux/arch 中找到依赖于体系结构的部分。
进程管理
内存管理
内核所管理的另外一个重要资源是内存。为了提高效率,如果由硬件管理虚拟内存,内存是按照所谓的内存页 方式进行管理的(对于大部分体系结构来说都是 4KB)。Linux 包括了管理可用内存的方式,以及物理和虚拟映射所使用的硬件机制。不过内存管理要管理的可不止 4KB缓冲区。Linux 提供了对 4KB缓冲区的抽象,例如 slab 分配器。这种内存管理模式使用 4KB缓冲区为基数,然后从中分配结构,并跟踪内存页使用情况,比如哪些内存页是满的,哪些页面没有完全使用,哪些页面为空。这样就允许该模式根据系统需要来动态调整内存使用。为了支持多个用户使用内存,有时会出现可用内存被消耗光的情况。由于这个原因,页面可以移出内存并放入磁盘中。这个过程称为交换,因为页面会被从内存交换到硬盘上。内存管理的源代码可以在 ./linux/mm 中找到。
虚拟文件系统
中断与异常
中断是CPU提供的一个重要的机制,它使得指令流可以被强制跳转。
狭义上的中断专指来自CPU外部的硬件中断,而来自CPU内部的特殊信号则称为异常。前者可进一步分为可屏蔽中断和非屏蔽中断;后者可以细分为终止,故障和陷阱。其中陷阱是由用户代码主动引发的中断,系统调用正是由此实现。
-
如果发生了中断或异常,CPU会依次执行以下操作:
-
确定与中断或异常关联的向量i(0 <= i <= 255)。
-
读中断描述符表(IDT)中的第i项。
-
通过第i项中的段选择符在GDT中查找相应的段描述符。后者指定中断或异常处理程序的段基地址。
-
权限检查:比较CPL与段描述符的DPL;比较CPL与门描述符的DPL。
-
检查是否发生了特权级的变化,若CPL不同于段描述符的DPL(从用户态陷入内核态),则:
-
读取tr寄存器访问运行进程的TSS段。
-
装载TSS中的ss与sp到寄存器(指向当前线程的内核栈)。
-
在新栈中保存ss和sp之前值。
-
-
若发生的是故障则用引起异常的指令修改cs和sp寄存器的值,以使这条指令在异常处理结束后可以被再次执行。
-
在栈中保存flags,cs和ip的值。
-
如果异常产生一个异常操作码,则将它保存在栈中。
-
装载处理程序入口地址到cs和ip。
-
从中断或异常返回时要执行iret指令,CPU会执行以下操作:
-
cs、ip、flags依次出栈并装载到相应寄存器。若有硬件出错码,则将其出栈。
-
权限检查:比较CPL与处理程序权限等级,若相等,则结束;否则(从内核态返回用户态),执行下一步。
-
从栈中装载ss和sp寄存器(指向被中断线程的用户栈)。
-
检查并重置ds,es,fs,gs寄存器。
心得体会:
学习了此Linux课程,深入浅出,并通过结合具体例子进行原理分析,系统了解了Linux操作系统的基本原理,包括Linux的初始化过程、零号进程的创建、系统调用的原理、进程的创建与切换、中断的原理、设备驱动等等。几乎涵盖了Linux操作系统最主要的功能,但各个部分并非完全独立工作而是互有交织,通过整理归纳所学知识构造概念模型,可以更加系统的认识Linux系统。