课程学习总结报告
课程学习总结报告
这门课对linux做了非常详细的讲解,包括计算机系统的基本原理,进程管理,系统调用,中断和文件系统等,下面对内容做简单的总结。
一、进程管理

其中还包括:
- 进程的创建过程和执行(最终都调用内核函数_do_fork)
- 我们编写的可执行程序是如何作为⼀个进程工作的(ELF、程序的预处理、编译、汇编、链接过程)
- 进程的上下文切换
- 进程的特权模式切换(系统调用)

二、中断和异常
中断和异常是操作系统重要的特性。
除了时间片用完进行调度外。
中断信号会使cpu停下正在做的事情。切换到另一个活动。
中断控制器会监视IRQ,检测中断信号。将信号转换成具体的中断向量,传到CPU的INTR引脚。(与Linux设备关系)
CPU会在运行下一条指令之前。检查是否发生中断。
如果有中断的话CPU应答中断时会去查找对应的中断服务历程。确定其是否合法。
若合法则进行中断处理。首先在内核栈中保存以前的ss和esp值,装载新的ss和esp寄存器。
保存eflags、cs和eip的值。处理异常。
中断、异常处理完后。产生iret指令。装载cs、eip、eflags。返回到用户态。或者如果有中断嵌套的话。返回到上一个中断嵌套。
三、文件系统
在LINUX系统中有一个重要的概念:一切都是文件。把一切资源都看作是文件,包括硬件设备。把每个硬件都看成是一个文件,通常称为设备文件,这样用户就可以用读写文件的方式实现对硬件的访问。VFS层有两个接口:一个是与用户的接口;一个是与特定文件系统的接口。VFS与用户的接口将所有对文件的操作定向到相应的特定文件系统函数上。VFS与特定文件系统的接口主要是通过vfs-operations来实现的。
虚拟文件系统(Virtual File System)这一层,正是用来解决上面提出的第二个问题,试想,当我们通过mkfs.xxx系列命令创建了很多不同的文件系统,但这些文件系统都有各自的API接口,而用户想要的是,不管你是什么API,他们只关心mount/umount
,或open/close
等操作。所以,VFS就把这些不同的文件系统做一个抽象,提供统一的API访问接口,这样,用户空间就不用关心不同文件系统中不一样的API了。VFS所提供的这些统一的API,再经过System Call包装一下,用户空间就可以经过SCI的系统调用来操作不同的文件系统。
读文件大概流程如下:
- 读文件之前要先通过open函数打开文件,open会创建一个系统打开文件表;
- 进程调用库函数向内核发起读文件请求;
- 内核通过检查进程的文件描述符定位到虚拟文件系统的已打开文件列表表项;
- 调用该文件可用的系统调用函数read()。read()函数通过文件表项链接到目录项模块,根据传入的文件路径,在目录项模块中检索,找到该文件的inode;
- 在inode中,通过文件内容偏移量计算出要读取的页;
- 通过inode找到文件对应的address_space;
- 在address_space中访问该文件的页缓存树,查找对应的页缓存结点:
- 如果页缓存命中,那么直接返回文件内容;
- 如果页缓存缺失,那么产生一个页缺失异常,创建一个页缓存页,同时通过inode找到文件该页的磁盘地址,读取相应的页填充该缓存页;重新进行第6步查找页缓存;
- 文件内容读取成功。
四、心得体会
这门课学了很多linux底层知识体系和原理,从进程管理,切换,程序的一般执行过程到系统调用,中断,文件管理等,老师都是结合内核源码进行分析讲解,还有案例演示,讲的很细致,让人容易理解,老师也很认真负责,难理解的地方会多讲解几遍,直到同学理解。在这门课程中学到了很多,对以后的学习有很大的帮助。