课程学习总结报告

linux内核总结

一.进程管理

进程通过进程控制块TCB管理,控制块中包含进程运行所必须的结构,其结构如下;

Linux为每个进程分配一个8KB大小的内存区域,用于存 放该进程两个不同的数据结构,分别为内核栈和进程描述符如下:

以上是进程必要的数据结构,系统为每个进程创建一个控制块用来管理进程,其中包括进程状态,标识,内存空间,打开文件,调度信息,进程链接信息等。进程都是通过父进程创建生成子进程,子进程继承父进程的信息资源,内核中所有进程都有由0号进程创建。系统在进程创建后根据一定策略调度进程,进程切换时要保存进程的上下文到自己堆栈中,然后切换。进程上下文主要是进程运行时的寄存器,资源等等。在编写简单内核时这些事别要结构。

二.中断机制

内核的中断机制是必须的,进程发生中断首先由外设引起中断信号传递给中断控制器,中断控制器产生中断信号传递给cpu,cpu确定与中断或者异常关联的向量i,读idtr寄存器指向的IDT表中的第i项,从gdtr寄存器获得GDT的基地址,并在GDT中查找,以读取IDT表项中的段选择符所标识的段描述符。检查是否发生了特权级的变化,一般指是否由 用户态陷入了内核态,如果是由用户态陷入了内核态,控制单元必须开 始使用与新的特权级相关的堆栈。若发生的是故障,用引起异常的指令地址修改cs 和eip寄存器的值,以使得这条指令在异常处理结 束后能被再次执行 ,在栈中保存eflags、cs和eip的内容 ,如果异常产生一个硬件出错码,则将它保存在栈 中 ,装载cs和eip寄存器,其值分别是IDT表中第i项门 描述符的段选择符和偏移量字段。这对寄存器值 给出中断或者异常处理程序的第一条指定的逻辑地址。自此进入中断处理程序,首先保存剩余的上下文,然后进入到处理程序对中断进行处理,最后遵照上面相反的步骤恢复现场返回被中断进程。

三.系统调用

linux内核中用户想要访问内核空间都是通过系统调用来处理,例如open函数会调用sys_open系统调用打开文件,32位系统通过int 0x80触发系统调用,64位系统通过syscall触发,系统维护了一个系统调用表,表示每一个系统调用以及对应的执行的程序,利用eax寄存器传递系统调用号,edi,esi,ebx(64位)等寄存器以此来传递调用参数,内核对系统调用的处理和中断的处理差不多也是先保存上下文,然后调用处理程序,只不过处理程序会根据系统调用号在系统调用表中找到对应的处理程序,当执行完成后会返回进程。

四,文件系统

linux利用虚拟文件系统VFS来管理不同文件系统,linux支持不同类型的文件系统,不同文件系统有不同的操作,linux通过VFS统一结构,让用户利用唯一接口操作不同的文件系统,其中必要的数据结构有superblock每个挂在文件系统的超级快,用来保存文件系统所在磁盘的信息等,dentry目录结构,是系统中描述每一个目录,inode文件的控制块包含了文件的各种各样的信息,file在TCB中用来保存进程打开文件的文件打开表,vfsmount每个挂在的文件系统的描述结构,上述结构通过相互间的指针连接成文件系统。如果对一个文件系统中文件操作,则会通过inode中的f_op指针所指向的操作结构(该结构是文件自定义的操作函数)调用具体的函数处理。

 五.linux总结

上述基本是一个系统所需要的必须的结构,首先需要有进程管理结构为用户运行任务进行管理,多任务系统还需要有进程创建,调度,删除。系统还需要有中断机制,即使没有外设,也需要有时钟滴答,在每个时钟片段调用时钟中断做一些处理, 每个进程需要有自己的堆栈,用来运行程序,进程切换。同时系统还需要事件机制,比如信号量,事件队列,自旋锁等用来同步进程的通信,资源的使用的等。内存的分配机制也是必须的最简单的内存分配就是固定长度的内存分配。上面基本可以组成简单的系统。

六.自我总结

这学期的linux内核学习让我受益良多,对操作系统有了一个全新的认识,课程讲的比较细,有很多细节,老师从部分内核代码出发让我对内核的组织运行机制有了清晰的认识,老师讲课也很好孟老师从实际代码出发,结合理论让我对内核机制有很深的了解,李老师讲的东西很多,每一点也讲的很细,希望在以后的学习中能继续对linux更多的机制有更全面的了解。

posted @ 2020-07-09 22:44  1837085815  阅读(199)  评论(0编辑  收藏  举报