课程学习总结报告

一、Linux系统

操作系统主要完成两个目标:  与硬件交互,为应用程序提供执行环境;

为了防止用户程序直接和硬件交互,将CPU分为两种执行模式,  称用户态和内核态;

Linux是一个多用户多任务的操作系统,一般主要有4个部分:  用户进程,系统调用接口,Linux内核,硬件;

本课程的重点主要是中断和进程管理;

                  

1.1 用户进程

  用户应用程序运行在整个系统的最高层,当他在系统上运行的时候,就会成为操作系统的一个进程;

1.2 系统调用接口

  在应用程序中,通过系统调用来调用操作系统内核中特定的过程,实现特定的服务。

1.3 Linux内核

  linux内核是整个系统的核心,  负责启动并运行程序,磁盘上文件管理,内存管理等。

  Linux内核主要由以下5个子系统组成,可以看出主要包含内存管理,进程管理,设备驱动管理,文件系统,网络管理等功能模块。

 

1.4 硬件

  包括了linux安装需要的所有可能的物理设备,如CPU,内存,硬盘等。

  

二、 中断

  中断是一种由软件或硬件产生的、向CPU发出的事件。

  例如,当用户按下某个键,外部设备会发出一个中断请求,产生一个中断信号,信号通过设备控制器的IRQ线发送给中断控制,

  而中断控制器与CPU相连, CPU收到该信号后,会响应该中断。

  

   从按下键盘到CPU响应中断的大致过程:

   0. 外设产生信号,并传送到I/O接口上,接口通过设备驱动程序向中断控制器发送中断请求

   1.  中断控制器将中断信号转换为中断向量给CPU读取

   2.  CPU通过中断向量号,到中断描述符表IDT中找到对应的中断描述符

   3.  通过中断描述符,从全局描述表中找到对应的段描述符,获得中断处理程序的入口地址

    4. 确定中断的发生源和优先级, 判断特权级是否发生变化

   6.  进入中断处理程序, 中断处理程序会先在内核态的堆栈中保存一些寄存器的值,也就是保存现场

   7.  处理程序给PIC发送应答,允许其进一步发出中断

   8.  执行设备对应的中断服务例程ISP

    ISP解析键盘命令,获得对应数据,送入内存等

    9.  ISP执行结束,恢复现场,中断返回,返回被中断进程下一条指令处继续执行

   

  以上是I/O中断处理过程,除了硬中断,还有软中断,

  比如户进程执行一个fork()函数,会触发系统调用, 系统调用就是由软中断实现的

  以系统调用看中断上下文切换:

  1. C库函数执行,将系统调用号传给eax寄存器,之后通过int $0x80产生中断向量为128的编程异常(trap)

  2. 切换到内核态后,通过系统调用号找到对应的系统调用处理程序的入口地址

  3. 之后由硬件先自动保存一些寄存器的值入内核栈,包括ss,esp,eflags, cs, ip(保存CPU执行的上下文)

  4.  执行系统调用服务例程,先保存现场,在执行

  5.  执行完后,恢复现场中断返回

  

 三、进程管理

  3.1 进程

  当用户程序在系统上运行的时候,就是进程,

  一个程序可以对应多个进程

  进程主要是动态的,存在生命周期,是暂时的

  进程实体 = 进程控制块PCB + 程序段 + 相关数据段

   每个进程有自己独立的地址空间

 

  3.1 PCB

    PCB实际上是一个task_struct的数据结构, 它是进程存在的唯一标识

    该结构在进程被创建的时候由系统为其创建,在进程运行结束时候,系统撤销PCB

    task_struct中保存了与进程相关信息,如state进程状态,fs是可执行映像的文件系统,

    thread_info与进程描述符关联等。

     

  3.2 进程状态

    进程状态有可运行,等待,暂停,僵死,状态之间也会进行相互转换

    就绪和运行都属于可运行状态,通过双向循环链表将可运行态进程连接组成运行队列

    每个CPU都有运行队列,通过运行队列,可以加快进程的调度

    

  3.3 进程栈和进程切换

    linux系统为每个用户进程分配了两个栈:  用户栈,内核栈

    进程运行在用户模式下就是使用的用户栈,内核模式下就是使用的内核栈

    当进程切换到另一个进程时候,就会产生进行上下文的切换

       进程切换包含两步:  

      1) 切换页全局目录安装新的地址空间;

      2) 切换内核态堆栈和硬件上下文;

    在上面系统调用中,在中断处理程序执行完返回之前,可能调用schedule()函数调用其它进程 

    从而发生进程上下文的切换, 即进程的上下文切换通常嵌套在中断上下文切换中

    调用关系:  schedule() --> context_swtich() --> switch_to --> __switch_to()

    context_swtich()完成切换第一步,switch_to和__switch_to完成第二步

    硬件上下文:

      进程恢复执行前必须装入寄存器的一组数据称为硬件上下文切换

      硬件上下文提供了内核执行新进程前所需要的所有信息

        在切换的时候,会保存prev进程的上下文,并用next硬件上下文代替prev

五、课程的体会

  通过linux操作系统分析这们课程,更深入理解了linux操作系统的运作机制;

  结合对内核源码的解读以及实验,理解了中断和进程切换,明白进程切换和中断上下文切换的不同;

    从硬件到内核编码实现,对于linux系统的整体理解更体系、更深入,也很感谢老师的耐心教导。 

 

posted @ 2020-07-09 03:46  zhouzwt  阅读(180)  评论(0编辑  收藏  举报