常识都是相通的,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