08 | 操作系统内核与编程接口
许式伟

你好,我是七牛云许式伟。
今天我们在开发软件的时候,已经处于一些基础的架构设计之中,像冯·诺依曼计算机体系,像操作系统和编程语言,这些都是我们开发一个应用程序所依赖的基础架构。
首先是冯·诺依曼计算机体系,它由 “中央处理器 + 存储 + 一系列的输入输出设备” 构成。这一层,提供了编程接口的是中央处理器(CPU),编程接口是 CPU 指令,但 CPU 指令非常难用。
为此,人们发明了编程语言来降低 CPU 指令的使用门槛。编程语言面向人类,CPU 指令面向机器,编译器负责将人类容易理解和掌握的编程语言的程序,翻译成机器能够理解的 CPU 指令序列。
其次是编程语言。虽然编程语言出现的起因是降低 CPU 指令的使用门槛,第一门编程语言汇编语言的能力也很接近 CPU 指令,但是语言的自然演化会越来越脱离 CPU 所限制的条条框框,大部分语言都会演化出很多基础的算法库。
比如,字符串算法库有:字符串连接(concat)、字符串子串(substring),字符串比较(compare)、字符串长度(length)等等。
公开
同步至部落
取消
完成
0/2000
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《许式伟的架构课》,新⼈⾸单¥68
《许式伟的架构课》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(64)
- 最新
- 精选
- Fz交叉编译不是很理解
作者回复: 其实理解清楚一个实质:编译器就是把高级语言翻译成为机器码,更抽象说,它其实就是格式转换器。目标格式是不是编译器正在运行的环境并不重要,只不过如果目标格式刚好是当前机器的CPU+操作系统,那么目标格式就可以直接执行,否则就编译出一个当前环境下无法执行的目标格式,这种情况就叫交叉编译。
554 - SuperFrankycpu不需要检查是否发生了中断,它的原理类似于开关和灯泡的关系,当开关合上,灯泡就会亮,灯泡不需要定期检查开关是否合上了
作者回复: 👍
231 - 晓凉优秀的架构设计能带来的好处可能超出架构师最初的预想,例如Linux系统的容器特性,现在成了云计算领域的重要基础技术,成就了一个领域。基于前辈大师的优秀架构,现在的信息世界才能如此生生不息。优秀的架构不仅能解决当前的实际问题,更具有理论上的优雅,像一种真理,可照亮未来。
作者回复: 我们日常所见明明有无数设计精良的例子,所以我们其实不需要一上来去设计新的例子,从这些最宏大的例子学起
25 - 云学看完有种苹果砸到脑袋上的感觉,好多问题之前总想不透,现在贯通了,许老师可以创立个品牌专门教小孩编程,以老师的功底肯定能教会
作者回复: 正在教自家小孩😊
216 - M请问一下cpu是如何检查是否有中断的。是怎么及时知道发生了中断?每执行完一条指令都去检查一次吗?
作者回复: 挺好的问题。硬件中断和软中断不一样。硬件中断你可以理解为总是会定期检查。软中断本身是一条指令,所以不存在检查这样的概念。
315 - 码农Kevin亮我重复一下我理解的交叉编译,老师帮忙看看理解对不对: 编译的目标是生成机器码指令,即对cpu有意义的01序列。当出现新的cpu指令时,本质上只是生成一个新的01序列。整个自举的过程有点像自然语言的自举,比如用原有的词汇去解释新的词汇。 是这样理解么?
作者回复: 是这样
11 - 杨寅冬老师可以谈谈最近华为要推出的“鸿蒙系统”吗,和Linux有什么关系,如果想开发一个操作系统,从哪些方面考虑。
作者回复: 做操作系统的难度不在技术,而是在:1、用户为何用你,你有何不可替代性;2、开发者为何要支持你,你用户多不多。
211 - new life老师 但是实际上常见的系统级语言(比如 C 语言)都是可以编写出不依赖任何内核的程序的。这句话是说我们编写的程序 没有操作系统也可以跑起来是吗
作者回复: 要让引导程序给你执行权才行,如果你写一个不依赖操作系统的程序,但是要让操作系统执行它是行不通的,因为操作系统接管了所有的资源,你不依赖它什么也干不了(没有权限)。所以这种写法基本上只适合写另一个操作系统。
210 - 小袋子插个题外话,以老师的经验,小孩几岁开始学编程比较合适😂
作者回复: 8-9岁
8 - 行者关于动态库,是不是可以理解为:提供动态库不是操作系统的责任(因为其他语言完全可以通过系统调用来自己实现动态库的功能),只是操作系统为了方便其他语言(减少不必要的冗余)而做的多余的事?
作者回复: 是的
28
收起评论