课程学习总结报告

linux课程学习总结报告

根据本课程所学内容总结梳理出一个精简的Linux系统概念模型,最大程度统摄整顿本课程及相关的知识信息,模型应该是逻辑上可以运转的、自洽的。因此在这里主要结合之前的实验心得来谈一谈linux的进程管理和中断机制。

一、 linux基础结构

1.1 用户态和内核态

linux可以分为用户态和内核态。
用户态:通常是上层应用程序的活动空间,应用程序的执行需要通过借助内核提供的资源,包括CPU资源、存储资源、I/O资源等。在该状态下代码可以访问的资源存在一定限制。
内核态:当需要执行一些特权指令时从用户态变换为内核态,在该状态下所有的指令包括特权指令都可以执⾏。
例如在内核态时,CS:EIP 的值可以是任意的地址,在 32 位 Linux 系统上有 4GB 的进程地址空间,内核态下的这 4GB 的地址空间全都可以访问。在⽤户态时,只能访问 0x00000000~0xbfffffff 的地址空间,0xc0000000 以上的地址空间只能在内核态下访问。

1.2 计算机体系机构

在目前的冯·诺依曼体系结构计算机中,计算机分为五个部分:运算器、控制器、存储器、输入设备和输出设备,各个部分之间由总线相互连接。存储器负责存储计算所需的数据和程序指令,因为指令和数据都可以以二进制形式存储。该体系结构的工作流程是,程序和操作数通过输入设备从外界接收并存于存储器内。当计算机工作时,控制器和存储器之间通过一个名为程序计数器(PC)的寄存器而相互关联,该寄存器内存储将要执行的下一条指令的存储地址,控制器以次为依据通过总线与存储器交互,获取所需的指令内容,后解析指令,得知执行指令所需的操作数,再通过多种寻址策略从存储器中取得所需的操作数,交给运算器执行。最后根据指令的含义,将执行结果进行适当的处理,PC自增,执行下一条指令,循环此过程即可实现计算机自动执行大量指令。

1.3 linux操作系统

为了能够在上述计算机体系结构下完成我们日常使用的应用程序,那么就需要一个落于底层硬件上层,但是位于其他应用程序下层,负责和底层硬件进行多种交互的应用程序,也就是操作系统。操作系统提供的功能包括:进程管理、内存管理、文件管理、I/O设备管理等。
(1)进程管理:保证各个进程能够合理地利用CPU资源完成自身任务。
(2)内存管理:管理内存资源,使得内存被进程安全使用。
(3)文件管理:通过文件系统来组织和管理在计算机中所存储的大量程序和数据。
(4)I/O设备管理:将鼠标、键盘等外设抽象为虚拟文件,Linux内核提供诸如open、write、read等接口函数对其统一管理。
其中Linux内核实现了操作系统的三⼤核⼼功能,即进程管理、内存管理和⽂件系统。

二、 linux进程管理

2.1 进程相关概念

进程是系统进行资源分配和调度的一个独立单位。
(1)进程控制块:进程控制块PCB是名字为task_struct的数据结构,它称为任务结构体。当一个进程被创建时,系统就为该进程建立一个 task_struct任务结构体。当进程运行结束时,系统撤消该进程的任务结构体。进程的任务结构体是进程存在的唯一标志。
(2)进程上下文:把系统提供给进程的处于动态变化的运行环境总和称为进程上下文。
(3)进程栈:linux系统为每个用户进程分配了两个栈:用户栈和内核栈。内核进程只有内核栈,没有用户栈。
(4)进程链表:为了对给定类型的进程进行有效的搜索,内核维护了几个进程链表。一般进程链表是双向链表。
(5)进程的状态:运行态、可运行态、等待态、暂停态、僵死态。

2.2 进程的创建

首先,任何进程都是源于开机后构建的0号进程,它是所有进程的祖先。开机时构建0号进程的过程成为初始化。除此之外,所有其他进程的初始化都是通过do_fork复制⽗进程的⽅式初始化的。1号和2号进程的创建是start_kernel初始化到最后由rest_ init通过kernel_thread创建了两个内核线程:⼀个是kernel_init,最终把⽤户态的进程init给启动起来,是所有⽤户进程的祖先;另⼀个是kthreadd内核线程,kthreadd内核线程是所有内核线程的祖先,负责管理所有内核线程。_do_fork的大体执行过程是把当前进程的描述符等相关进程资源复制⼀份,从⽽产⽣⼀个⼦进程,并根据⼦进程的需要对复制的进程描述符做⼀些修改,然后把创建好的⼦进程放⼊运⾏队列。

2.3 进程的切换和调度

进程的切换主要通过切换页全局目录以安装一个新的地址空间,然后切换改变内核态堆栈和硬件上下文。
进程调度主要发生在以下的情况下:
(1)进程状态发生变化
(2)当前进程时间片用完
(3)进程从系统调用返回到用户态
(4)中断处理后,进程返回到用户态

三、 linux中断机制

3.1 中断的类型

中断分外部中断(硬件中断)和内部中断(软件中断),内部中断⼜称为异常(Exception),由CPU执行指令时探测到一个反常条件时产生,如溢出、除0错等。异常⼜分为故障(fault)和陷阱(trap)。系统调⽤就是利⽤陷阱(trap)这种软件中断⽅式主动从⽤户态进⼊内核态的。⼀般来说,从⽤户态进⼊内核态是由中断触发的,可能是硬件中断,在⽤户态进程执⾏时,硬件中断信号到来,进⼊内核态,就会执⾏这个中断对应的中断服务例程。也可能是⽤户态程序执⾏过程中,调⽤了⼀个系统调⽤,陷⼊了内核态,叫作陷阱(trap)。所以,系统调⽤也是特殊的中断。

3.2 中断的执行过程

首先根据中断向量找到异常处理程序,任何中断事件发生,CPU都会得到一个对应的中断向量,接下来转去中断处理程序。中断/异常处理完后,相应的处理程序会执行一条iret汇编指令,这条汇编指令让CPU控制单元做如下事情。首先用保存在栈中的值装载cs、eip和eflags寄存器,然后检查处理程序的特权级是否等于cs中最低两位的值(这意味着进程在被中断的时候是运行在内核态还是用户态)。若是表明依然在内核态,处理中断嵌套,iret终止执行;否则,从栈中装载ss和esp寄存器。最后检查ds、es、fs和gs段寄存器的内容,防止恶意用户程序利用这些寄存器访问内核空间。

四、 总结

最后,经过半个学期的linux课程学习,我通过结合老师上课的内容以及课后的动手实验,对于linux有了一个更加清晰深刻的认识。在这里要感谢孟宁老师和李春杰老师的认真教导。最后希望老师们可以对于课后的实验有一个比较详细的讲解,这样可以使得课程内容和实验更好的结合。最后衷心祝愿这门课越办越好!

你可能感兴趣的:(课程学习总结报告)