许式伟的架构课
许式伟
七牛云 CEO
84945 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 89 讲
许式伟的架构课
15
15
1.0x
00:00/00:00
登录|注册

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

字符串算法库
隔离性、安全性和执行性能
操作系统的系统调用机制
操作系统的自举
编程语言的自举
先有编程语言还是先有操作系统
业务逻辑的封装
导出函数表
浮动地址
C 语言和 Go 语言的标准库
原始调用方式
系统调用的工作原理
操作系统内核的执行权限等级
CPU 的代码执行权限等级
中断的设计初衷
操作系统的编程接口
基础的算法库
编程语言的自然演化
降低 CPU 指令的使用门槛
输入输出设备
存储
中央处理器(CPU)
结语
操作系统与编程语言
动态库
编程接口
系统调用
编程语言
冯·诺依曼计算机体系
操作系统内核与编程接口

该思维导图由 AI 生成,仅供参考

你好,我是七牛云许式伟。
今天我们在开发软件的时候,已经处于一些基础的架构设计之中,像冯·诺依曼计算机体系,像操作系统和编程语言,这些都是我们开发一个应用程序所依赖的基础架构。
在上一讲“07 | 软件运行机制及内存管理” 中,我们着重介绍了软件是如何被运行起来的。今天,我们着重聊一聊软件如何利用它所依赖的基础架构。
首先是冯·诺依曼计算机体系它由 “中央处理器 + 存储 + 一系列的输入输出设备” 构成。这一层,提供了编程接口的是中央处理器(CPU),编程接口是 CPU 指令,但 CPU 指令非常难用。
为此,人们发明了编程语言来降低 CPU 指令的使用门槛。编程语言面向人类,CPU 指令面向机器,编译器负责将人类容易理解和掌握的编程语言的程序,翻译成机器能够理解的 CPU 指令序列。
其次是编程语言。虽然编程语言出现的起因是降低 CPU 指令的使用门槛,第一门编程语言汇编语言的能力也很接近 CPU 指令,但是语言的自然演化会越来越脱离 CPU 所限制的条条框框,大部分语言都会演化出很多基础的算法库。
比如,字符串算法库有:字符串连接(concat)、字符串子串(substring),字符串比较(compare)、字符串长度(length)等等。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了操作系统内核与编程接口在软件开发中的重要性和基本原理。首先介绍了冯·诺依曼计算机体系、操作系统和编程语言的关系,以及它们如何提供编程接口。其次,讨论了编程语言的发展和系统调用的重要性,系统调用是软件进程使用操作系统能力的基础,包括进程间通讯的机制。文章还解释了CPU的代码执行权限等级和操作系统内核的执行权限等级。另外,介绍了动态库的原理和操作系统与编程语言的关系。最后,总结了中央处理器、编程语言和操作系统对应用软件开放的编程接口,强调了系统调用机制实现了操作系统和应用软件的隔离性和安全性,同时保证了执行性能。整体而言,本文对于想要深入了解软件开发基础架构的读者来说,是一篇值得阅读的文章。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《许式伟的架构课》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(64)

  • 最新
  • 精选
  • Fz
    交叉编译不是很理解

    作者回复: 其实理解清楚一个实质:编译器就是把高级语言翻译成为机器码,更抽象说,它其实就是格式转换器。目标格式是不是编译器正在运行的环境并不重要,只不过如果目标格式刚好是当前机器的CPU+操作系统,那么目标格式就可以直接执行,否则就编译出一个当前环境下无法执行的目标格式,这种情况就叫交叉编译。

    2019-05-10
    5
    55
  • SuperFranky
    cpu不需要检查是否发生了中断,它的原理类似于开关和灯泡的关系,当开关合上,灯泡就会亮,灯泡不需要定期检查开关是否合上了

    作者回复: 👍

    2019-05-11
    2
    33
  • 晓凉
    优秀的架构设计能带来的好处可能超出架构师最初的预想,例如Linux系统的容器特性,现在成了云计算领域的重要基础技术,成就了一个领域。基于前辈大师的优秀架构,现在的信息世界才能如此生生不息。优秀的架构不仅能解决当前的实际问题,更具有理论上的优雅,像一种真理,可照亮未来。

    作者回复: 我们日常所见明明有无数设计精良的例子,所以我们其实不需要一上来去设计新的例子,从这些最宏大的例子学起

    2019-05-12
    27
  • 云学
    看完有种苹果砸到脑袋上的感觉,好多问题之前总想不透,现在贯通了,许老师可以创立个品牌专门教小孩编程,以老师的功底肯定能教会

    作者回复: 正在教自家小孩😊

    2019-05-12
    2
    17
  • M
    请问一下cpu是如何检查是否有中断的。是怎么及时知道发生了中断?每执行完一条指令都去检查一次吗?

    作者回复: 挺好的问题。硬件中断和软中断不一样。硬件中断你可以理解为总是会定期检查。软中断本身是一条指令,所以不存在检查这样的概念。

    2019-05-10
    3
    15
  • 码农Kevin亮
    我重复一下我理解的交叉编译,老师帮忙看看理解对不对: 编译的目标是生成机器码指令,即对cpu有意义的01序列。当出现新的cpu指令时,本质上只是生成一个新的01序列。整个自举的过程有点像自然语言的自举,比如用原有的词汇去解释新的词汇。 是这样理解么?

    作者回复: 是这样

    2019-10-03
    11
  • 杨寅冬
    老师可以谈谈最近华为要推出的“鸿蒙系统”吗,和Linux有什么关系,如果想开发一个操作系统,从哪些方面考虑。

    作者回复: 做操作系统的难度不在技术,而是在:1、用户为何用你,你有何不可替代性;2、开发者为何要支持你,你用户多不多。

    2019-06-17
    2
    11
  • new life
    老师 但是实际上常见的系统级语言(比如 C 语言)都是可以编写出不依赖任何内核的程序的。这句话是说我们编写的程序 没有操作系统也可以跑起来是吗

    作者回复: 要让引导程序给你执行权才行,如果你写一个不依赖操作系统的程序,但是要让操作系统执行它是行不通的,因为操作系统接管了所有的资源,你不依赖它什么也干不了(没有权限)。所以这种写法基本上只适合写另一个操作系统。

    2019-05-11
    2
    10
  • 小袋子
    插个题外话,以老师的经验,小孩几岁开始学编程比较合适😂

    作者回复: 8-9岁

    2019-06-23
    9
  • 行者
    关于动态库,是不是可以理解为:提供动态库不是操作系统的责任(因为其他语言完全可以通过系统调用来自己实现动态库的功能),只是操作系统为了方便其他语言(减少不必要的冗余)而做的多余的事?

    作者回复: 是的

    2019-05-13
    2
    8
收起评论
显示
设置
留言
64
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部