ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

课程总结报告

2020-07-09 14:40:50  阅读:285  来源: 互联网

标签:调用 总结报告 中断 文件系统 课程 进程 上下文 VFS


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

存储程序计算机:

冯·诺依曼(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 层和内核的其他部分看来,所有文件系统都是相同的。

标签:调用,总结报告,中断,文件系统,课程,进程,上下文,VFS
来源: https://www.cnblogs.com/BottleBattle/p/13273404.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有