02 | 大厦基石:无生有,有生万物-笔记

之前的一篇专栏中,专栏作者带我们分析了如何 “构建一个而应用程序”

这一篇的笔记,我主要记录的是解剖架构的过程

话接上回,第一个问题:

我们如何分析结构设计中设计的每一个零件,也就是说设计或拆件零件时,我们会关心哪些问题?

需求

还是问题。这个零件的作用? 能做啥? 他一定不会用来做啥?

规格

零件的接口长啥样? 如何和其他零件适配?

规格是零件适配需求的抽象,可有多种方案 。然而,一旦规格某个条件不满足 (除了一点问题) 就不能适配其他零件 ,也就有无法工作(可以联想发动机)

约束:

多样化

  1. 外观
  2. 交互方式 
  3. 质量

冯诺依曼体系结构 

整个信息科技的体系像是一个无中生有的全新世界(虚拟化的世界)


计算的边界在哪里? 计算机是否能够像人类一样思考?(图灵之前的想法)

计算机是否有一天可以像人一样智能?

计算终将解决智能问题  


冯诺依曼体系的规格

三个基础零件

  1. 中央处理器
  1. 存储
  2. 输入输出

中央处理器:

  •  内置寄存器
  •  内存
  •  机械硬盘
  •  SSD
  •  光盘

从 CPU 的角度,存储可以分为:

1. 内置支持存储 例如 ROM  内存 寄存器

2. 外置存储: 输入输出谁被 不能直接读取

冯诺依曼体系中的“存储” 指的是内置支持的存储


输入输出设备

一个设备通过一个端口连接到CPU,通过端口地址,它们(CPU 和 设备)可以进行数据交互 ,数据交互的数据格式由设备定义 CPU不理解。

设备使用方可以解释接收的数据的含义 ,设备厂商一般会提供设备的驱动,隐藏交换数据的细节,设备方只需要调用相关的接口函数即可。

指令

CPU的指令大致上如下:

  1. 计算类
  2. 读写类
  3. 指令跳转类

需求是如何被满足的?

如何从0开始设计一个叫做计算机的设备,用来解决计算可以解决的问题?

1. 需求

问题是五花八门 包罗万象

如何形成稳定的且可拓展的架构来支持变化? 也就是说如何以不变应万变?

计算机的核心能力是稳定

计算机的核心能力是计算,而计算是什么?

计算是对于输入数据的处理也就是转换,之后输出成为我们想要的结果。

数学中成为 F(x) ,编程语言中成为 Function () 函数

y = F(x)

这里如果用作TS语言表达:

function F(x:any):any{

}

其中 

x,y 是数据 他们可以是你所常见的文档类型, 例如 图片 文本 视频

x,y 物理上的载体是什么?

如果数据没有载体,就不能被我们所观察到

存储就是存放计算所要操作的数据所在

具体的计算如何表达?

F(x) 这个函数式未知的 ,如何可以设计一个系统架构让用户可以表达任意复杂的函数呢?

任意复杂的自定义函数,都可以通过:

  • 内置函数
  • 循环 条件分支
  • 子函数(自定义函数)

来组合定义

对于任意的一个计算函数 我们都可以直接使用一组指令进行表达

函数 F 物理上可以放在哪?

以指令序列形式厨房在存储即可

因此 存储存放了包含计算本身在内的数据

谁才能理解并执行存储的这些数据呢?

这个执行者就是中央处理器

它要支持 包含内置函数 循环 条件分支 执行子函数



现在有了中央处理器和存储了

交互

就是输入和输出 

人: 输入为五官 触觉 、听觉 嗅觉。 输出靠语言、动作 等等

计算机: N

计算机可以被看作为:


输入输出设备从根本上解决了什么?

无限的可拓展能力

输入输出设备是黑盒子:他可以是任何电子器件、计算机? 不同架构的电脑 : GPU 量子计算机


## 架构思维我们学到了啥?

需求

稳定点

变化点

固定存储地址执行主板的ROM上的一点启动程序 BIOS

存储设备驱动

基础外部设备驱动

设备 启动配置管理 能力

位置存储执行程序能力

执行权转移到外置存储

把所有的变化点从PC的最核心配件CPU中玻璃之后 CPU的需求变得极其稳定 可以独立演进去了!

专栏作者 github 实现以及修改迭代

https://github.com/qiniu/arch/tree/master/von


极客时间版权所有  https://time.geekbang.org/column/article/91007


有疑问、勘误、请您在下方留言,谢谢合作!

感谢您阅读,这篇文章归 极客点子版权所有.
如果转载,请注明出处: 极客点子版权所有(/page/927.html) 知识共享许可协议
本网站使用 创作共用 归属 - 非商业用途 - 共享4.0国际许可协议的相同方式 许可.

关于作者:

    作者:

    reverse()

    简介:

    nodejs 全栈工程师 、作家、github 开源爱好者
    研究方向:数据分析、 深度学习、 服务器架构、 系统原理

    著作:

    最爱的编程语言:

    Javascript
    Python