zoukankan      html  css  js  c++  java
  • 课程学习总结报告

    计算机有"三大法宝",分别是存储程序计算机,函数调用堆栈中断.

    存储程序计算机:

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

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

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

     

      

    函数调用堆栈:

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

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

     

      

    中断:

    为了处理是处理硬件外设I/O,有了中断机制这个东西。

    中断分外部中断(硬件中断)和内部中断(软件中断)。内部中断⼜称为异常(Exception),异常⼜分为故障(fault)和陷阱(trap)。中断(广义)会改变处理器执行指令的顺序,通常与CPU芯片内部或外部硬件电路产生的电信号相对应。中断是异步的:由硬件随机产生,在程序执行的任何时候可能出现;异常是同步的:在(特殊的或出错的)指令执行时由CPU控制单元产生。

    系统调用作为一种特殊的中断,就是利⽤陷阱(trap)这种软件中断⽅式主动从⽤户态进⼊内核态的。

    此时就不得不牵扯到操作系统的“两把宝剑”进程上下文中断上下

    进程上下文是把系统提供给进程的处于动态变化的运行环境总和。

    中断上下文它是一个内核控制路径,代表了中断发生时正在运行的进程执行。

    中断的处理过程:

    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项门描述符的段选择符和偏移量字段。这对寄存器值给出中断或者异常处理程序的第一条指定的逻辑地址。

     

      

     进程的切换:

    一个进程的上下文(context)包括进程的状态、有关变量和数据结构的值、机器寄存器的值和PCB以及有关程序、数据等。

    一个进程的执行是在进程的上下文中执行。

    当正在执行的进程由于某种原因要让出处理机时,系统要做进程上下文切换,以使另一个进程得以执行。

    当进行上下文切换时系统要首先检查是否允许做上下文切换(在有些情况下,上下文切换是不允许的,例如系统正在执行某个不允许中断的原语时)。然后,系统要保留有关被切换进程的足够信息,以便以后切换回该进程时,顺利恢复该进程的执行。在系统保留了CPU现场之后,调度程序选择一个新的处于就绪状态的进程、并装配该进程的上下文,使CPU的控制权掌握在被选中进程手中。

    系统调用的过程:

     

      

    1. 应用程序 代码调用系统调用( xyz ),该函数是一个包装系统调用的 库函数
    2. 库函数 ( xyz )负责准备向内核传递的参数,并触发 软中断 以切换到内核;
    3. CPU 被 软中断 打断后,执行 中断处理函数 ,即 系统调用处理函数 ( system_call);
    4. 系统调用处理函数 调用 系统调用服务例程 ( sys_xyz ),真正开始处理该系统调用。

    VFS虚拟文件系统:

    虚拟文件系统(Virtual File System, 简称 VFS), 是 Linux 内核中的一个软件层,用于给用户空间的程序提供文件系统接口;同时,它也提供了内核中的一个 抽象功能,允许不同的文件系统共存。系统中所有的文件系统不但依赖 VFS 共存,而且也依靠 VFS 协同工作。

    为了能够支持各种实际文件系统,VFS 定义了所有文件系统都支持的基本的、概念上的接口和数据 结构;同时实际文件系统也提供 VFS 所期望的抽象接口和数据结构,将自身的诸如文件、目录等概念在形式 上与VFS的定义保持一致。换句话说,一个实际的文件系统想要被 Linux 支持,就必须提供一个符合VFS标准 的接口,才能与 VFS 协同工作。实际文件系统在统一的接口和数据结构下隐藏了具体的实现细节,所以在VFS 层和内核的其他部分看来,所有文件系统都是相同的。

    课程感受:

    建议倒是不敢说,感受还是有一些的,首先非常感谢孟老师和李老师的认真教导,都是很负责的老师,疫情上网课对老师和同学都是不小的考验,上课时候老师一遍遍问同学听明白了吗真的很感动,没想到读研老师还可以这么认真负责,linux操作系统虽然后有意思,但是linux内核的确比较枯燥和困难,老师想讲的引人入胜也是非常困难的,个人也是能力有限,只能学懂里面的一部分。

    整体来讲,俩位老师讲解内容搭配还是很适合同学的,理解linux系统内核对一个优秀软件工程的学生几乎是必须的,以后有机会,应该继续深入钻研。

    最后,再次两位老师的教导和助教老师背后的帮助。

  • 相关阅读:
    汉斯·季默:布拉格现场
    天使在美国第二部:重建
    欢迎访问我的独立博客 tracefact.net (2019.1.30)
    Kafka 分布式消息系统
    Webpack入门
    《.NET之美》消息及勘误
    MacBook笔记本微信视频聊天没有声音怎么办?
    libnuma.so.1()(64bit) is needed by mysql-community-server-5.7.9-1.el6.x86_64
    List stream 对象 属性去重
    JS遍历对象的方式
  • 原文地址:https://www.cnblogs.com/smyhrps/p/13257175.html
Copyright © 2011-2022 走看看