计算机有"三大法宝",分别是存储程序计算机,函数调用堆栈和中断.
存储程序计算机:
冯·诺依曼(VonNeumann)体系结构,它是?乎所有计算机平台的基础,现代计算机?乎都是基于冯·诺依曼体系结构。
存储程序计算机的主要思想是将程序存放在计算机存储器中,然后按存储器中的存储程序的?地址,执?程序的第?条指令,以后就按照该程序中编写好的指令执?,直?程序执?结束。
我们可以把CPU看成一个循环,一直不断从内存?取下?条指令来执?。内存保存指令和数据,CPU负责解释执?指令,它们通过总线连接起来。
函数调用堆栈:
函数调用指令call执行时,堆栈指针esp递减4个字节(32位),并且调用后的指令地址(返回地址)被写入现在由esp引用的存储器位置,即返回地址被压入栈。然后将eip设置为指定为要调用的操作数的地址,并从该地址继续执行。
调用函数执行完毕,函数返回指令ret执行(不占用任何操作数),处理器首先从esp中包含的内存地址中读取值,然后将esp增加4个字节,从堆栈中弹出返回地址。eip设置为此值,并从该地址继续执行。返回调用前上下文。
中断:
为了处理是处理硬件外设I/O,有了中断机制这个东西。
中断分外部中断(硬件中断)和内部中断(软件中断)。内部中断?称为异常(Exception),异常?分为故障(fault)和陷阱(trap)。中断(广义)会改变处理器执行指令的顺序,通常与CPU芯片内部或外部硬件电路产生的电信号相对应。中断是异步的:由硬件随机产生,在程序执行的任何时候可能出现;异常是同步的:在(特殊的或出错的)指令执行时由CPU控制单元产生。
系统调用作为一种特殊的中断,就是利?陷阱(trap)这种软件中断?式主动从?户态进?内核态的。
此时就不得不牵扯到操作系统的“两把宝剑”进程上下文和中断上下?。
进程上下文是把系统提供给进程的处于动态变化的运行环境总和。
中断上下文它是一个内核控制路径,代表了中断发生时正在运行的进程执行。
中断的处理过程:
进程的切换:
一个进程的上下文(context)包括进程的状态、有关变量和数据结构的值、机器寄存器的值和PCB以及有关程序、数据等。
一个进程的执行是在进程的上下文中执行。
当正在执行的进程由于某种原因要让出处理机时,系统要做进程上下文切换,以使另一个进程得以执行。
当进行上下文切换时系统要首先检查是否允许做上下文切换(在有些情况下,上下文切换是不允许的,例如系统正在执行某个不允许中断的原语时)。然后,系统要保留有关被切换进程的足够信息,以便以后切换回该进程时,顺利恢复该进程的执行。在系统保留了CPU现场之后,调度程序选择一个新的处于就绪状态的进程、并装配该进程的上下文,使CPU的控制权掌握在被选中进程手中。
系统调用的过程:
VFS虚拟文件系统:
虚拟文件系统(Virtual File System, 简称 VFS), 是 Linux 内核中的一个软件层,用于给用户空间的程序提供文件系统接口;同时,它也提供了内核中的一个 抽象功能,允许不同的文件系统共存。系统中所有的文件系统不但依赖 VFS 共存,而且也依靠 VFS 协同工作。
为了能够支持各种实际文件系统,VFS 定义了所有文件系统都支持的基本的、概念上的接口和数据 结构;同时实际文件系统也提供 VFS 所期望的抽象接口和数据结构,将自身的诸如文件、目录等概念在形式 上与VFS的定义保持一致。换句话说,一个实际的文件系统想要被 Linux 支持,就必须提供一个符合VFS标准 的接口,才能与 VFS 协同工作。实际文件系统在统一的接口和数据结构下隐藏了具体的实现细节,所以在VFS 层和内核的其他部分看来,所有文件系统都是相同的。
课程感受:
建议倒是不敢说,感受还是有一些的,首先非常感谢孟老师和李老师的认真教导,都是很负责的老师,疫情上网课对老师和同学都是不小的考验,上课时候老师一遍遍问同学听明白了吗真的很感动,没想到读研老师还可以这么认真负责,linux操作系统虽然后有意思,但是linux内核的确比较枯燥和困难,老师想讲的引人入胜也是非常困难的,个人也是能力有限,只能学懂里面的一部分。
整体来讲,俩位老师讲解内容搭配还是很适合同学的,理解linux系统内核对一个优秀软件工程的学生几乎是必须的,以后有机会,应该继续深入钻研。
最后,再次两位老师的教导和助教老师背后的帮助。
原文:https://www.cnblogs.com/smyhrps/p/13257175.html