课程总结报告

Linux系统从应用角度来看,分为内核空间和用户空间两个部分。内核空间是Linux操作系统的主要部分,但是仅有内核的操作系统是不能完成用户任务的。丰富并且功能强大的应用程序包是一个操作系统成功的必要条件。
从用户空间转换到内核空间通过系统调用实现。从功能上来说,作为一个操作系统,他必须完成的功能主要有内存管理、文件管理、进程管理等核心功能。

 

 

 

 

中断和异常

  为了处理是处理硬件外设I/O,处理用户状态转换。引入中断机制。

  中断分外部中断(硬件中断)和内部中断(软件中断)。内部中断⼜称为异常(Exception),异常⼜分为故障(fault)和陷阱(trap)。

  系统调用作为一种特殊的中断,就是利⽤陷阱(trap)这种软件中断⽅式主动从⽤户态进⼊内核态的。此时就不得不牵扯到操作系统的“两把宝剑”进程上下文中断上下

  进程上下文是把系统提供给进程的处于动态变化的运行环境总和。

  中断上下文它是一个内核控制路径,代表了中断发生时正在运行的进程执行。

  进入中断后,计算机暂时停止了当前任务,执行更加重要的任务,中断的引入,为CPU提高利用率提供了可能。

 

 

中断的处理过程:

  1. 确定中断向量。
  2. 利用中断向量在IDT中找到对应中断门,在中断门中得到段选择符从而可以从GDT中找到中断服务例程的段基址。
  3. 确定中断发生的特权级合法(linux只有内核态和用户态两种特权级,此步用来检查中断程序的特权是否低于引起中断的程序的特权,低优先级程序不能引起高优先级程序)
  4. 检查是否发生特权级变化(用户态陷入内核态,这时候需要设置内核的堆栈),如果发生读取当前程序的tss段(通过tr寄存器读取)来选择新特权级的ss和esp指针,然后保存旧的ss和esp指针。
  5. 若发生的是故障,用引起异常的指令地址修改cs和eip寄存器的值,以使得这条指令在异常处理结束后能被再次执行。
  6. 在栈中保存eflags、cs和eip的内容。
  7. 如果异常产生一个硬件出错码,则将它保存在栈中。
  8. 装载cs和eip寄存器,其值分别是IDT表中第i项门描述符的段选择符和偏移量字段。这对寄存器值给出中断或者异常处理程序的第一条指定的逻辑地址。 

中断是提高计算机并发能力,增加实时性的基础。为了提高系统的并发能力,还引入了进程,在LINUX中的进程切换调用。 

进程

一个进程的上下文(context)包括进程的状态、有关变量和数据结构的值、机器寄存器的值和PCB以及有关程序、数据等。一个进程的执行是在进程的上下文中执行。

当正在执行的进程由于某种原因要让出处理机时,系统要做进程上下文切换,以使另一个进程得以执行。此时就涉及到如何选择一个合适的进程来进行调度的问题。

 

 在linux中进程都是通过链表的形式保存的,实际上如果实现优先级队列的形式更好。每次进程调度都会从里面抽取出一个节点。

 

 

 

VFS虚拟文件系统

虚拟文件系统(Virtual File System, 简称 VFS), 是 Linux 内核中的一个软件层,用于给用户空间的程序提供文件系统接口;同时,它也提供了内核中的一个 抽象功能,允许不同的文件系统共存。系统中所有的文件系统不但依赖 VFS 共存,而且也依靠 VFS 协同工作。

这种思想在当代软件开发中经常看到。接口的定义绝对是降低系统耦合度,提升系统便捷度的一大利器。

为了能够支持各种实际文件系统,VFS 定义了所有文件系统都支持的基本的、概念上的接口和数据 结构;同时实际文件系统也提供 VFS 所期望的抽象接口和数据结构,将自身的诸如文件、目录等概念在形式 上与VFS的定义保持一致。换句话说,一个实际的文件系统想要被 Linux 支持,就必须提供一个符合VFS标准 的接口,才能与 VFS 协同工作。实际文件系统在统一的接口和数据结构下隐藏了具体的实现细节,所以在VFS 层和内核的其他部分看来,所有文件系统都是相同的。

 

 心得体会

从前学过的计算机操作系统总是感觉如空中楼阁一样,可望而不可触及,通过本次课程,确确实实的接触到了一些源码。收获颇丰,对于操作系统的敬畏之感不减反增,我们就是站在前人的肩膀上一步步迭代代码,迭代思路,才有了现在的操作系统。

对于学习方面,感觉在将代码的时候,能通过流程图的方式总结一下就更好了,每次只看代码实际上还是有些晦涩的。非常感谢两位老师的教导,带我们走进linux源码世界。

posted on 2020-07-09 14:26  znping  阅读(257)  评论(0)    收藏  举报

导航