Administrator
发布于 2023-09-28 / 4 阅读 / 0 评论 / 0 点赞

9月28日

Linux学习

c库和系统函数的关系

操作系统抽象

执行环境

对于不同的层次,他们的执行环境不相同

计算机的硬件 (对于裸机硬件上 操作系统 或 直接运行在裸机硬件上的应用程序

函数库 -> 计算机硬件 (后来多了裸机硬件上的应用程序的函数库

函数库 -> 操作系统内核 -> 计算机硬件 (操作系统的出现

函数库 -> Java 虚拟机 -> 操作系统内核 -> 计算机硬件 (java等语言的出现)

函数库 -> Java 虚拟机 -> 操作系统内核 -> Hypervisor/VMM -> 计算机硬件 (各种虚拟化技术兴起)

../_images/complex-EE.png普通控制流和异常控制流

普通

它只能接触到它所在的执行环境,不会跳到其他执行环境

异常

这就是一种控制流的“突变”,即控制流脱离了其所在的执行环境,并产生 执行环境的切换

控制流上下文(执行环境的状态)

即确保下一时刻能继续 正确 执行控制流指令的物理资源内容称为控制流的 上下文 (Context) ,也可称为控制流所在执行环境的状态

  • 如果一个控制流属于某个函数,那么这个控制流的上下文简称为函数调用上下文

  • 如果一个控制流属于某个应用程序,那么这个控制流的上下文简称为应用程序上下文

  • 如果把某 进程 看做是运行的应用程序,那么这个属于某个应用程序的控制流可简称为某进程上下文

  • 如果一个控制流属于操作系统,那么这个控制流的上下文简称为操作系统上下文

  • 如果一个控制流是属于操作系统中处理中断/异常/陷入的那段代码,那么这个控制流的上下文简称为中断/异常/陷入的上下文

程序执行错误

不是由于程序的控制流本身的指令导致的,这就会使得接下来的程序指令执行出现偏差,并最终导致执行过程或执行结果不符合预期,这种情形称为 程序执行错误

异常控制流的上下文保存与恢复

主要是通过 CPU 和操作系统(手动编写在栈上保存与恢复寄存器的指令)来协同完成;

对于函数转移控制流上下文保存与恢复,主要是通过编译器(自动生成在栈上保存与恢复寄存器的指令)来帮助完成的。

三类异常控制流:
  • 外设中断 (Device Interrupt) 、

  • 陷入 (Trap)

  • 异常 (Exception,也称Fault Interrupt)。


评论