NJU计算机课程基础实验 (完) 2022-09-16
虚实交错的魔法: 分时多任务
从这我越来越感受到系统复杂度上升带来的挑战,也明白了抽象的根本目的。
抽象是为了降低复杂度 ,为了系统能够更好的做大以及稳健和排错。
而且抽象能让你切换不同的“后续程序”进行测试,甚至在大概率正确的载体上进行diff查看到底是哪一层出现了问题(参考各种native)
如何相信抽象是对的?——对每一个抽象层完成后的充分测试。
善用assert是魔法!
(个人能力受限,挂在了2阶的最后pal阶段。。。其实基本也算是做完了.也许有机会能请教大佬解决一下,这样就可以做第三阶段了,很可惜,但也只能这样了。)
2022年9月16日记
上下文切换
自从有了上下文切换后,程序也就有了进程的概念。(从静止到运动的飞跃 ~~·)
假设进程A运行的过程中触发了系统调用, 陷入到内核. 根据
__am_asm_trap()
的代码, A的上下文结构(Context
)将会被保存到A的栈上. 在PA3中, 系统调用处理完毕之后,__am_asm_trap()
会根据栈上保存的上下文结构来恢复A的上下文.
如果我们先不着急恢复A的上下文, 而是先将栈顶指针切换到另一个进程B的栈上, 那会发生什么呢? 由于B的栈上存放了之前B保存的上下文结构, 接下来的操作就会根据这一结构来恢复B的上下文. 上下文切换其实就是不同进程之间的栈切换!