关于操作系统:2022OS2程序状态机视角

7次阅读

共计 724 个字符,预计需要花费 2 分钟才能阅读完成。

常识都是相通的,nio,内存,离不开操作系统的调度。都能在 OS 这门课里找到答案。

状态机

从状态机的视角了解程序,很形象,文字描述不能齐全辅助你在大脑里设想出这个过程。最好去看老师的视频来本人充沛的了解。

状态迁徙

拿函数调用举例,来看程序在执行过程中的状态扭转

这里是一个用手动实现栈帧构造,而后用栈存储显式的模仿函数调用时入栈,出栈的操作。

这里讲到函数调用和栈帧的关系,那么什么是栈帧?简略叙述:
栈帧算是栈里的元素的一种叫法,而这时栈里每个元素寄存的不再只是繁多的一个值,例如上图的构造

type struct{
    int pc,n;
    char from ,to , via;
 }Frame;

栈帧真正的构造

外面保留着:

  • 函数的返回地址和参数
  • 长期变量: 包含函数的非动态局部变量以及编译器主动生成的其余长期变量
  • 函数调用的上下文

应用 gdb 来 debug 一个递归的汉诺塔程序

橘色和蓝色别离是两次调用办法时执行的时堆栈变动,留神尽管这里看似是执行了两条语句,但别忘了这个程序是递归的,其实这是嵌套执行的函数执行。

frame at xxxxx:代表以后栈帧的地址
ArgList at xxxxx:是寄存长期变量的地址
called by frame at xxxx:示意上一个栈帧的地址
sp is xxxx:返回本人的地址,如下面那个栈帧结构图所写的 Return Address

看到这里是不是发现有点头绪了,第二次 called by 的是第一次的 frame at,这不就是一个嵌套调用的过程吗

当我学到这里是对栈帧有了大抵的了解,在看《深刻 Java 虚拟机》的 2.2.2 那段话时对栈帧这个词就没有感到生疏了 hh。

参考:
https://jyywiki.cn/OS/2022/sl…
http://t.csdn.cn/PWjUG

正文完
 0