welcome!~,This i|

duuuuu17

园龄:1年11个月粉丝:0关注:0

操作系统设计与原理学习

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 中国大陆许可协议进行许可。

posted @   duuuuu17  阅读(6)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起