操作系统设计与原理学习
NJU:操作系统设计与实现
Berkeley :CS162使用操作系统:设计与原理
重新认识程序
在南京大学的jyy老师的口中,让我重新有了更新的视角。
以前,我们所知的程序=算法+数据结构。这很熟悉,不是吗?这仅仅只是我们从书本中记住的东西,在当时的数据结构的教材中。
听过他所讲的课第二分P后,让我有了更新的视角去看待,以前遇见的程序是怎样。
理解以前所学知识点
📗在计算机基础课程中,我们学过状态机:由一个状态经过转变条件到达另一个状态。
同理:
💡 我们看C程序:
其中的状态=堆+栈。
(堆:在Linux的虚拟内存结构可知,堆也是随用户创建并使用和释放。它可以作为执行操作的前提数据[或者说全局变量];用户栈:在计组中,每个函数调用为一个栈帧,其中保存了局部变量、函数参数、上一个栈帧使用寄存器保存值以及本函数执行结束后,返回到上一个栈帧的指令地址)
其初始状态:main()和全局变量的初始化。
迁移(状态转换条件):执行函数调用(栈帧压栈和出栈)
💡在二进制程序中:(实际是由汇编视角分析)
状态=内存M+寄存器R
初始状态是加载器
迁移是执行指令
引出操作系统的观点:
💡 在操作系统中,所有的程序其实就是由CPU执行指令(计算)->再到系统调用(syscall)->再到计算,最终是否结束由系统调用决定。
也就是说任何建立于操作系统的程序,其实都是执行syscall指令。
额外的知识点:
📘 理解编译器的原理:
我们都知道是由源代码S-->二进制代码C,这其实也是一种状态机。
但是需要注意的是:编译的正确性——源代码和二进制代码的可观测行为严格一致。解释:即源代码的状态机执行过程中,不可优化的状态,其在编译时也不可被优化(即不可被合并,省略等)。
本文作者:duuuuu17
本文链接:https://www.cnblogs.com/duuuuu17/articles/17653160.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步