课程学习总结报告

        在学习了linux操作系统这门课后,收获颇深,老师的要求是不得引用任何资料,这里我将上课内容和课后复习内容做一下总结。

        计算机系统的基本工作原理总结起来就是计算机有3大法宝和操作系统有两把宝剑,计算机的三大法宝:存储程序计算机,函数调用堆栈,中断。操作系统的两把宝剑就是中断上下文和进程上下文,下面依据课程内容来排布。

  • 三大法宝
  1. 存储程序计算机

          冯·诺依曼(VonNeumann)体系结构,它是⼏乎所有计算机平台的基础,现代计算机⼏乎都是基于冯·诺依曼体系结构。

          存储程序计算机的主要思想是将程序存放在计算机存储器中,然后按存储器中的存储程序的⾸地址,执⾏程序的第⼀条指令,以后就按照该程序中编写好的指令              执⾏,直⾄程序执⾏结束。

          我们可以把CPU看成一个循环,一直不断从内存⾥取下⼀条指令来执⾏。内存保存指令和数据,CPU负责解释执⾏指令,它们通过总线连接起来。

          2.函数调用堆栈

          堆栈寄存器和堆栈框架的形成:

          函数调用指令call执行时,堆栈指针esp递减4个字节(32位),并且调用后的指令地址(返回地址)被写入现在由esp引用的存储器位置,即返回地址被压                      入栈。然后将eip设置为指定为要调用的操作数的地址,并从该地址继续执行。

          调用函数执行完毕,函数返回指令ret执行(不占用任何操作数),处理器首先从esp中包含的内存地址中读取值,然后将esp增加4个字节,从堆栈中弹出返                       回地址。eip设置为此值,并从该地址继续执行。返回调用前上下文。

           3.中断

           中断是指在CPU正常运行期间,由于内外部事件或由程序预先安排的事件引起的CPU暂时停止正在运行的程序,转而为该内部或外部事件或预先安排的事件                     服务的程序中去,服务完毕后再返回去继续运行被暂时中断的程序。

                3.1中断类型

               同步中断由CPU本身产生,又称为内部中断。这里同步是指中断请求信号与代码指令之间的同步执行,在一条指令执行完毕后,CPU才能进行中断,不能在执                 行期间。所以也称为异常(exception)。

               异步中断是由外部硬件设备产生,又称为外部中断,与同步中断相反,异步中断可在任何时间产生,包括指令执行期间,所以也被称为中断(interrupt)。

               异常又可分为可屏蔽中断(Maskable interrupt)和非屏蔽中断(Nomaskable interrupt)。而中断可分为故障(fault)、陷阱(trap)、终止(abort)三类。
               3.2中断处理流程

               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系统中,除了系统启动之后的第一个进程由系统来创建,其余的进程都必须由已存在的进程来创建,新创建的进程叫做子进程,而创建子进程的进程叫做父进程。那个在系统启动及完成初始化之后,Linux自动创建的进程叫做根进程。根进程是Linux中所有进程的祖宗,其余进程都是根进程的子孙。具有同一个父进程的进程叫做兄弟进程。系统中所有进程都是由init系统调用fork创建的。

       进程调度:

       linux进程调度机制包括以下几种:先到先服务算法、最短作业优先调度、优先级调度、 轮转法调度、多级队列调度、多级队列反馈调度等。一个进程的上下文(context)包括进程的状态、有关变量和数据结构的值、机器寄存器的值和PCB以及有关程序、数据等。一个进程的执行是在进程的上下文中执行。当正在执行的进程由于某种原因要让出处理机时,系统要做进程上下文切换,以使另一个进程得以执行。当进行上下文切换时系统要首先检查是否允许做上下文切换(在有些情况下,上下文切换是不允许的,例如系统正在执行某个不允许中断的原语时)。然后,系统要保留有关被切换进程的足够信息,以便以后切换回该进程时,顺利恢复该进程的执行。

  •        文件系统:

       在linux系统下一切皆文件,在学习过程中我认为有两个概念必须搞清楚,一是文件控制块,fcb是系统为管理文件而设置的一个数据结构,fcb是文件存在的唯一标志,记录了系统为管理文件所需的全部信息,包括文件名,大小,地址和类型属性还有一个就是文件描述符,文件描述符是内核为了高效管理已经打开的文件所创建的索引,它是一个非负整数,所有执行io操作的系统调用都是通过fd实现的。

       进行在打开一个文件时会与三个表发生关联他们分别是文件描述表,文件打开表和inode节点,其中文件描述符记录进程打开的文件,它的表项中有一个指针,指向存放在内核空间的文件打开表中的一个表项,使得用户能方便的访问一个文件表,文件打开表中存放了进行对该文件访问的偏移量和存取权限,inode则是每个设备文件都有一个相应的inode节点与之对应。

 

学习心得:

       通过linux操作系统的学习,让我对linux操作系统的整体架构有了一个较为宏观的认识,包括linux系统调用,进程管理,中断处理,文件系统等等

       还有就是通过linux操作系统的实验让我对linux系统的基本命令,gdb跟踪调试以及汇编语言的基础有了一定的掌握与理解,总之在两位老师的悉心教导下还是有很大的提高,今后我将继续努力学习巩固linux操作系统的相关内容。

 

 

          

          

          

          

          

posted on 2020-07-09 16:48  mmm123  阅读(184)  评论(0编辑  收藏  举报

导航