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