课程学习总结报告

要求:请您根据本课程所学内容总结梳理出一个精简的Linux系统概念模型,最大程度统摄整顿本课程及相关的知识信息,模型应该是逻辑上可以运转的、自洽的,并举例某一两个具体例子(比如读写文件、分配内存、使用I/O驱动某个硬件等)纳入模型中验证模型。谈谈您对课程的心得体会,改进建议等。

 

精简的Linux系统概念模型

精简的Linux系统概念模型:Linux系统从应用角度来看,分为内核空间和用户空间两个部分。内核空间是Linux操作系统的主要部分,但是仅有内核的操作系统是不能完成用户任务的。丰富并且功能强大的应用程序包是一个操作系统成功的必要条件。从用户空间转换到内核空间通过系统调用实现。

 

 

系统调用接口

SCI 层提供了某些机制执行从用户空间到内核的函数调用。正如前面讨论的一样,这个接口依赖于体系结构,甚至在相同的处理器家族内也是如此。SCI 实际上是一个非常有用的函数调用多路复用和多路分解服务。在 ./linux/kernel 中您可以找到 SCI 的实现,并在 ./linux/arch 中找到依赖于体系结构的部分。

进程管理

进程管理的重点是进程的执行。在内核中,这些进程称为线程,代表了单独的处理器虚拟化(线程代码、数据、堆栈和 CPU寄存器)。在用户空间,通常使用进程 这个术语,不过 Linux 实现并没有区分这两个概念(进程和线程)。内核通过 SCI 提供了一个应用程序编程接口(API)来创建一个新进程(fork、exec 或 Portable Operating System Interface [POSⅨ] 函数),停止进程(kill、exit),并在它们之间进行通信和同步(signal 或者 POSⅨ 机制)。
 
进程管理还包括处理活动进程之间共享 CPU 的需求。内核实现了一种新型的调度算法,不管有多少个线程在竞争 CPU,这种算法都可以在固定时间内进行操作。这种算法就称为 O⑴ 调度程序,这个名字就表示它调度多个线程所使用的时间和调度一个线程所使用的时间是相同的。O⑴ 调度程序也可以支持多处理器(称为对称多处理器或 SMP)。您可以在 ./linux/kernel 中找到进程管理的源代码,在 ./linux/arch 中可以找到依赖于体系结构的源代码。

内存管理

内核所管理的另外一个重要资源是内存。为了提高效率,如果由硬件管理虚拟内存,内存是按照所谓的内存页 方式进行管理的(对于大部分体系结构来说都是 4KB)。Linux 包括了管理可用内存的方式,以及物理和虚拟映射所使用的硬件机制。不过内存管理要管理的可不止 4KB缓冲区。Linux 提供了对 4KB缓冲区的抽象,例如 slab 分配器。这种内存管理模式使用 4KB缓冲区为基数,然后从中分配结构,并跟踪内存页使用情况,比如哪些内存页是满的,哪些页面没有完全使用,哪些页面为空。这样就允许该模式根据系统需要来动态调整内存使用。为了支持多个用户使用内存,有时会出现可用内存被消耗光的情况。由于这个原因,页面可以移出内存并放入磁盘中。这个过程称为交换,因为页面会被从内存交换到硬盘上。内存管理的源代码可以在 ./linux/mm 中找到。

 

 

虚拟文件系统

中断与异常

中断是CPU提供的一个重要的机制,它使得指令流可以被强制跳转。

狭义上的中断专指来自CPU外部的硬件中断,而来自CPU内部的特殊信号则称为异常。前者可进一步分为可屏蔽中断和非屏蔽中断;后者可以细分为终止,故障和陷阱。其中陷阱是由用户代码主动引发的中断,系统调用正是由此实现。

  • 如果发生了中断或异常,CPU会依次执行以下操作:

  1. 确定与中断或异常关联的向量i(0 <= i <= 255)。

  2. 读中断描述符表(IDT)中的第i项。

  3. 通过第i项中的段选择符在GDT中查找相应的段描述符。后者指定中断或异常处理程序的段基地址。

  4. 权限检查:比较CPL与段描述符的DPL;比较CPL与门描述符的DPL。

  5. 检查是否发生了特权级的变化,若CPL不同于段描述符的DPL(从用户态陷入内核态),则:

    1. 读取tr寄存器访问运行进程的TSS段。

    2. 装载TSS中的ss与sp到寄存器(指向当前线程的内核栈)。

    3. 在新栈中保存ss和sp之前值。

  6. 若发生的是故障则用引起异常的指令修改cs和sp寄存器的值,以使这条指令在异常处理结束后可以被再次执行。

  7. 在栈中保存flags,cs和ip的值。

  8. 如果异常产生一个异常操作码,则将它保存在栈中。

  9. 装载处理程序入口地址到cs和ip。

  • 从中断或异常返回时要执行iret指令,CPU会执行以下操作:

  1. cs、ip、flags依次出栈并装载到相应寄存器。若有硬件出错码,则将其出栈。

  2. 权限检查:比较CPL与处理程序权限等级,若相等,则结束;否则(从内核态返回用户态),执行下一步。

  3. 从栈中装载ss和sp寄存器(指向被中断线程的用户栈)。

  4. 检查并重置ds,es,fs,gs寄存器。

 

心得体会:

学习了此Linux课程,深入浅出,并通过结合具体例子进行原理分析,系统了解了Linux操作系统的基本原理,包括Linux的初始化过程、零号进程的创建、系统调用的原理、进程的创建与切换、中断的原理、设备驱动等等。几乎涵盖了Linux操作系统最主要的功能,但各个部分并非完全独立工作而是互有交织,通过整理归纳所学知识构造概念模型,可以更加系统的认识Linux系统。

 

posted on 2020-07-09 20:49  知其不二  阅读(153)  评论(0编辑  收藏  举报

导航