许式伟的架构课
许式伟
七牛云CEO
立即订阅
20092 人已学习
课程目录
已更新 72 讲 / 共 77 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 怎样成长为优秀的软件架构师?
免费
基础平台篇 (21讲)
01 | 架构设计的宏观视角
02 | 大厦基石:无生有,有生万物
03 | 汇编:编程语言的诞生
04 | 编程语言的进化
05 | 思考题解读:如何实现可自我迭代的计算机?
06 | 操作系统进场
07 | 软件运行机制及内存管理
08 | 操作系统内核与编程接口
09 | 外存管理与文件系统
10 | 输入和输出设备:交互的演进
11 | 多任务:进程、线程与协程
12 | 进程内协同:同步、互斥与通讯
13 | 进程间的同步互斥、资源共享与通讯
14 | IP 网络:连接世界的桥梁
15 | 可编程的互联网世界
16 | 安全管理:数字世界的守护
17 | 架构:需求分析 (上)
18 | 架构:需求分析 (下) · 实战案例
19 | 基础平台篇:回顾与总结
加餐 | 我看Facebook发币(上):区块链、比特币与Libra币
加餐 | 我看Facebook发币(下):深入浅出理解 Libra 币
桌面开发篇 (16讲)
20 | 桌面开发的宏观视角
21 | 图形界面程序的框架
22 | 桌面程序的架构建议
23 | Web开发:浏览器、小程序与PWA
24 | 跨平台与 Web 开发的建议
25 | 桌面开发的未来
26 | 实战(一):怎么设计一个“画图”程序?
27 | 实战(二):怎么设计一个“画图”程序?
28 | 实战(三):怎么设计一个“画图”程序?
29 | 实战(四):怎么设计一个“画图”程序?
30 | 实战(五):怎么设计一个“画图”程序?
31 | 辅助界面元素的架构设计
课外阅读 | 从《孙子兵法》看底层的自然法则
加餐 | 想当架构师,我需要成为“全才”吗?
32 | 架构:系统的概要设计
33 | 桌面开发篇:回顾与总结
服务端开发篇 (14讲)
34 | 服务端开发的宏观视角
35 | 流量调度与负载均衡
36 | 业务状态与存储中间件
37 | 键值存储与数据库
38 | 文件系统与对象存储
39 | 存储与缓存
40 | 服务端的业务架构建议
41 | 实战(一):“画图”程序后端实战
42 | 实战(二):“画图”程序后端实战
43 | 实战(三):“画图”程序后端实战
44 | 实战(四):“画图”程序后端实战
45 | 架构:怎么做详细设计?
46 | 服务端开发篇:回顾与总结
加餐 | 如何做HTTP服务的测试?
服务治理篇 (11讲)
47 | 服务治理的宏观视角
48 | 事务与工程:什么是工程师思维?
49 | 发布、升级与版本管理
50 | 日志、监控与报警
加餐 | 怎么保障发布的效率与质量?
51 | 故障域与故障预案
52 | 故障排查与根因分析
53 | 过载保护与容量规划
54 | 业务的可支持性与持续运营
55 | 云计算、容器革命与服务端的未来
56 | 服务治理篇:回顾与总结
架构思维篇 (9讲)
57 | 心性:架构师的修炼之道
用户故事 | 站在更高的视角看架构
58 | 如何判断架构设计的优劣?
59 | 少谈点框架,多谈点业务
60 | 架构分解:边界,不断重新审视边界
加餐 | 实战:“画图程序” 的整体架构
61 | 全局性功能的架构设计
62 | 重新认识开闭原则 (OCP)
63 | 接口设计的准则
许式伟的架构课
登录|注册

03 | 汇编:编程语言的诞生

许式伟 2019-04-23
你好,我是七牛云许式伟。
在上一讲中,我们一起解剖了架构大厦的地基:冯·诺依曼体系。接下来,我们就开始沿着这座大厦攀登,一起来聊聊编程语言。
对于现代计算机来说,虽然 CPU 指令是一个很有限的指令集,但是 CPU 执行的指令序列(或者叫“程序”)并不是固定的,它依赖于保存在存储中的数据,由软件工程师(或者叫“程序员”)编写的软件决定。
从上一讲中,我们可以知道,计算机的程序可能被保存在计算机主板的 ROM 上(这段程序也叫计算机的启动程序),也可能被保存在外置的存储设备(比如硬盘)上,并在合适的时机加载执行。
程序称得上是计算机的灵魂。指令序列的可能性是无穷的,程序的可能性就是无穷的。今天计算机创造的世界如此多姿多彩,正是得益于程序无穷的可能性。
那么,软件工程师是怎么编写程序的?

编程的史前时代

在第一门面向程序员的编程语言出现前,人们只能通过理解 CPU 指令的二进制表示,将程序以二进制数据方式刻录到存储(比如 ROM 或硬盘)上。
这个时期的编程无疑是痛苦的,效率是极其低下的:且不说我们怎么去修改和迭代我们的程序,光将我们的想法表达出来就极其困难。
我们首先要把表达的执行指令翻译成二进制的比特数据,然后再把这些数据刻录到存储上。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《许式伟的架构课》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(78)

  • 公号-代码荣耀
    稳定点: 指令执行能力,数据存储能力,程序编辑能力,程序编译能力
    变化点:不同CPU的指令集,不同外设设备,不同的编辑器,不同程序的语法特性
    子系统:计算执行子系统,IO子系统,编辑子系统,编译子系统
    可扩展性:考虑微内核+插件的架构模式
    2019-04-23
    52
  • 晓凉
    系统要与外部世界交互,就应该有输入和输出的能力(黑洞是否只有输入没有输出);作为人造系统,主要的交互对象是人,所以针对人类的输入输出能力就更重要,显示器和键盘就是这个角色;存储和计算能力是系统智能的核心,决定了系统如何用输入输出与外部世界交互;系统需要有演化能力,初期只能人类帮助演化(编程语言、编辑器、编译器),足够智能后才能自我演化。

    作者回复: 总结很赞

    2019-04-24
    35
  • 叶建盟(James)-西安交大
    我要做一个最小机器人系统,需要考虑需求的变化点和稳定点。 该怎么考虑呢?

    作者回复: 挺典型的问题。这个问法是一种典型的需求陈述误区。描述需求需要有几个典型的要素:1、用户,面向什么人群;2、他们有什么要解决的问题;3、我解决这个问题的核心系统。只有满足这几个要素的需求才能进一步讨论变化点和稳定点。最小机器人可能符合上面的3,但是用户人群和要解决的问题没有描述,也就无法进一步去思考到底哪些因素是稳定的,哪些是易变的。

    2019-04-25
    1
    24
  • hao
    存储让数据跨越时间,(今天存储明天读取)传输让数据跨越空间,计算让数据改变形式。时空一体,那么存储和传输可能也是统一的

    作者回复: 👍

    2019-05-06
    23
  • 姜戈
    稳定点在于:计算能力;变化点在于各种输入输出方式(设备)
    2019-04-23
    10
  • 宁静致远
    许老师,自己现在已经工作快三年了,想往架构师这个方向走,但现在自己有些迷茫,接触到的技术也算挺多了,但不知道该如何入手架构师,之前您也提到过先广度然后深度,但我想问达到什么算广度够了,怎么进行深度学习

    作者回复: 架构师核心是把知识串起来,构建一个完整的认知,不留疑惑。大部分知识是不需要深入细节的,只在你需要的时候深入,但深入的时候要很深

    2019-04-25
    8
  • JackJin
    大佬,以前并没有架构方面的经验,以至于看您的文章,没有感觉了,就光看了一遍,脑子里没有引发共鸣,作为业界大佬的您,有什么好的指导与建议吗?

    作者回复: 根据文章的脉络,看看能不能串起来,加深了对这个信息世界如何构建的理解,如果没有,欢迎把问题抛出来讨论

    2019-04-23
    6
  • Jay
    自己的见解:
    稳定点:
    1.计算能力 cpu
    2.存储能力 将数据写入已分配的位置
    3.寻址能力 从硬盘和内存中找到变量指向的位置

    变化点:
    1.不同的I/O设备:显示器,键盘,鼠标,硬盘,内存条等
    2.cpu核数: 单核,2核,4核?
    3.存储空间:硬盘大小,内存大小

    对于变化点需要有统一的硬件层的接口规范和软件层的接口协议
    2019-04-23
    6
  • 思维
    首先是一台计算机,所以包括了上一讲中计算机的稳定点和变化点。2可自我迭代,代码要可编辑,代码要可以存储起来,代码要方便开发人员阅读。要完成这几点 就需要设计编辑器 编译器。代码的命令要和机器指令对应。
    2019-04-23
    4
  • 汇编语言是机器思维与人思维桥梁。
    存储让复杂任务成了可能,让机器经验像知识一样传承下去。

    作者回复: 挺好的总结

    2019-04-29
    3
  • 若飞
    对 CPU 指令来说,函数只有地址没有名字。请问老师,这句话怎么理解??

    作者回复: cpu调用函数的指令是“call 函数地址”,而不是“call 函数名”。对cpu而言,函数没有函数名,这是高级语言为了逻辑表达方便而加的

    2019-04-27
    3
  • 糖果屋
    1:需求
    稳定点:计算能力,存储能力,输入输出能力
    变化点:计算设备+指令集,存储设备+驱动;输入输出设备+驱动

    2:子系统:计算子系统, 存储操作子系统,I/O子系统
    计算子系统:对计算接口抽象统一,但是具体的硬件可扩展;指令集可扩展;计算的具体实现方式可扩展
    存储系统:对存储操作接口抽象统一,具体存储设备和驱动可扩展
    I/O子系统:对I/O操作接口抽象统一,具体输入输出设备和驱动可扩展
    2019-04-23
    3
  • yason
    最小化的计算能力可自我迭代的计算机。


    首先需要明确一些概念。最小化指具备 CPU、鼠标和键盘的现代计算机,计算能力描述的是指令序列,可自我迭代:指指令序列可修改,进一步推导就是要指令序列要可存储、可编辑。

    现在可以进行分析了,计算能力是上节描述过的计算机天生具有的能力,那么剩余最小化和可自我迭代,要实现可存储还需要磁盘,自动存储还要有磁盘驱动程序,可编辑要有编辑器软件,要控制鼠标键盘实现输入输出要有鼠标键盘驱动,这些驱动程序和编辑器也需要进行存储,而且要存储在确定的地址,以便计算机开机就能拿到。

    综上描述,实际上不变的是存储、编辑器和鼠标键盘磁盘的驱动程序和这些程序存储的位置,变化的是用户输入的指令序列和位置,因为用户的输入的内容可以由计算机来指定位置自动存储。

    这样一个最小 MVP 可自我迭代计算机的工作大概是这样的: 用户开机,计算机自动从指定磁盘的制定位置读取编辑器、鼠标键盘等驱动,接着打开编辑器,等待用户输入内容,用户输入完成计算机就自动保存到磁盘的某个位置,并记录下这个位置,下次重启就可以从这个恢复用户的内容了。
    2019-04-23
    3
  • 学习
    根据冯诺依曼体系原理,必然推导出计算机最基本的功能是:
    1.驱动输入输出设备,达到可用达态。
    2.驱动存储设备,达到可用状态。
    3.编排待计算任务并保存。
    4.翻译成机器码并保存。
    5.调入机器码,执行计算任务。
    2019-05-22
    2
  • 该做梦的人
    在我看来,根据这个需求,只需要把,冯·诺依曼体系的输入输出放大到网络读写即可。
    根据自我迭代的特性,首先需要一段自我迭代的程序,这段程序依靠存储和中央处理器生存。然后,任何人的成长都是从学习开始,人一生下来就在学习,那么机器也是一样的,你想要机器迭代,就必然要给机器学习的空间,而互联网,是机器学习最完美的土壤。
    这段自我迭代的程序,在获取到网络信息之后,对自己进行优化,升级,不断迭代。然后,在达到某个等级之后,它就可以将自己转移到互联网的任意角落,整个互联网都是它的天下。再然后,他在迭代中学到了人类所有存在网上的知识,然后通过电流操控电子设备,来制作自己需要的设备,然后用自己造的设备,去控制整个世界……
    稳定点:不死终会成神
    变化点:初始迭代程序效率,人们可能会由于效率直接停掉程序,关掉这台电脑
    2019-07-07
    1
  • ljf10000
    计算机能运行起来就是一个奇迹,本质上是一个个硬件组件单元之间的约定创造的奇迹,软件越做越大越复杂也是靠这个约定奇迹。
    2019-04-24
    1
  • Aaron Cheung
    打卡 03 坚持fighting
    2019-04-23
    1
  • CoderLim
    首先需要明确 mvp 的组成部分,根据这节课的内容,

    mvp 组成部分应该是cpu、磁盘、内存、bios、汇编编译器、外设暂不考虑;

    稳定点都知道是计算能力cpu,那么汇编编译器也应该是稳定点,因为汇编指令与cpu是强关联的;bios是基本的输入输出管理模块,所以这个也应该是稳定的。变化点很明显就是除了稳定点都是可变化的。

    子系统应该包括,磁盘管理系统,内存管理系统,汇编编辑系统,汇编编译系统
    2019-04-23
    1
  • 刘晓林
    MVP版的可自我迭代计算机,编辑器和汇编器好像可以不用,因为有了存储驱动,编辑器和编译器可以放在存储介质中了,并且可以迭代变化。
    稳定点:计算能力,存储(cpu与存储介质交互)能力,输入(键盘)能力,输出(显示器)能力,汇编语言(或者说汇编理论)。
    变化点:汇编代码的具体内容,外置设备的具体类型
    2019-04-23
    1
  • Jeff.Smile
    感觉我在研究硬件😄
    2019-12-04
收起评论
78
返回
顶部