GitHub - rcore-os/rCore-Tutorial-v3: Let's write an OS which can run on RISC-V in Rust from scratch! (githubfast.com)
Linux学习
c库和系统函数的关系
操作系统抽象
执行环境
对于不同的层次,他们的执行环境不相同
计算机的硬件 (对于裸机硬件上 操作系统 或 直接运行在裸机硬件上的应用程序)
函数库 -> 计算机硬件 (后来多了裸机硬件上的应用程序的函数库)
函数库 -> 操作系统内核 -> 计算机硬件 (操作系统的出现)
函数库 -> Java 虚拟机 -> 操作系统内核 -> 计算机硬件 (java等语言的出现)
函数库 -> Java 虚拟机 -> 操作系统内核 -> Hypervisor/VMM -> 计算机硬件 (各种虚拟化技术兴起)
普通控制流和异常控制流
普通
它只能接触到它所在的执行环境,不会跳到其他执行环境
异常
这就是一种控制流的“突变”,即控制流脱离了其所在的执行环境,并产生 执行环境的切换
控制流上下文(执行环境的状态)
即确保下一时刻能继续 正确 执行控制流指令的物理资源内容称为控制流的 上下文 (Context) ,也可称为控制流所在执行环境的状态
如果一个控制流属于某个函数,那么这个控制流的上下文简称为函数调用上下文。
如果一个控制流属于某个应用程序,那么这个控制流的上下文简称为应用程序上下文。
如果把某 进程 看做是运行的应用程序,那么这个属于某个应用程序的控制流可简称为某进程上下文。
如果一个控制流属于操作系统,那么这个控制流的上下文简称为操作系统上下文。
如果一个控制流是属于操作系统中处理中断/异常/陷入的那段代码,那么这个控制流的上下文简称为中断/异常/陷入的上下文。
程序执行错误
不是由于程序的控制流本身的指令导致的,这就会使得接下来的程序指令执行出现偏差,并最终导致执行过程或执行结果不符合预期,这种情形称为 程序执行错误
异常控制流的上下文保存与恢复
主要是通过 CPU 和操作系统(手动编写在栈上保存与恢复寄存器的指令)来协同完成;
对于函数转移控制流的上下文保存与恢复,主要是通过编译器(自动生成在栈上保存与恢复寄存器的指令)来帮助完成的。
三类异常控制流:
外设中断 (Device Interrupt) 、
陷入 (Trap)
异常 (Exception,也称Fault Interrupt)。