本文来自OpenHarmony啃论文俱乐部11组PIMF
团队,《伟大的计算原理》一书由俱乐部欧建深教练推荐阅读,纯干货无推广。
笔者将《伟大的计算原理》一书中提到的“计算原理框架”比喻为武林秘籍“六脉神剑”,计算原理框架内的六项计算原理分为该武功的六门招式。
- 修炼六脉神剑将成为武林高手,用该武功的六门招式能更好地去理解计算机相关的某项领域。
该系列往期回顾:
PIMF《伟大的计算原理》“六脉神剑”认识OpenHarmony技术路线
欲练此功,必先知此。
- 六脉神剑的精髓从《伟大的计算原理》继承。《伟大的计算原理》一书提供了一个面向整个计算机科学的普适性方法,采用关于计算重要原理的框架去提供一种有效的方式去分析特定技术所涉及的基本原理。
- 此书是以一种新的视角切入观察计算相关的技术。它把计算看作是一门有基本原理的科学,所有计算机相关技术都可以用计算的基本原理描述出来。 它将计算原理分为6个类别:$\color{#F00}{通信}$、$\color{#F00}{计算}$、$\color{#F00}{协作}$、$\color{#F00}{记忆(存储)}$、$\color{#F00}{评估}$和$\color{#F00}{设计}$。
- 该书的原理框架不是重新定义计算的核心知识,而是提供了一种看待所有计算领域并降低其表面复杂性的新方式。
- 该门武林秘籍关于基本计算原理的讨论一定会使各位开发者侠客们对“计算之道”有更为深入的理解和掌握。
- “六脉神剑”构建一个关于计算的全景视角(技术地图),而更深层次的知识则需要各位侠客自己不断去发现,吸收,并将它们归纳起来去融入自己的血脉。
六门招式
笔者将《伟大的计算原理》一书中提到的“计算原理框架”比喻为武林秘籍“六脉神剑”,计算原理框架内的六项计算基本原理为该武功的六门招式。
每一类基本原理都是观察计算领域知识空间的一扇窗口。这六类基本原理不是完全不相交。
多数计算技术都涉及到这6类基本原理。这些基本原理类别表现了人们对计算的某种认知视角。这种划分框架能一定程度上扩展人们对计算本质的认知。
- 举个例子,互联网既可以从通信系统的角度理解,也可以从协作系统或者记忆系统的角度理解。
理解原理框架比技术框架更容易
该门武林绝学建立在“对于学习者来说,理解计算原理框架比计算技术框架更容易”的认识上。
展示一下(以信息安全领域为例)
基本原理框架 | 信息安全领域的技术框架 |
---|---|
通信 | 保密,身份验证,加密系统等 |
计算 | 哈希算法,形式验证化等 |
记忆 | 错误限制,多级安全存储等 |
协作 | 秘钥分配,零知识证明,签名协议等 |
评估 | 安全系统准则等 |
设计 | 端到端设计,虚拟机,最小特权等 |
对于初学者,理解计算原理框架远远比理解技术框架更容易,我们用原理框架去涵盖一个计算领域的技术框架,我们就能很轻易地获得该领域的全知视角。
如果在此基础上我们增加3个方面的关注点形成该领域的4个因素:
- 涉及哪些人;
- 关注什么问题;
- 涉及哪些计算基本原理;
- 如何为计算和所在领域带来新的基本原理。
就可以涵盖该领域更为广阔的内容:
人 | 角色 | 网民,网络工程师,企业等 |
内容 | 问题,关注点 | ,存储保护,文件保护,访问控制,信息流,可信系统,加密通信等 |
通信 | 保密,身份验证,加密系统等 | |
计算 | 哈希算法,形式验证化等 | |
记忆 | 错误限制,多级安全存储等 | |
计算基本原理 | 协作 | 秘钥分配,零知识证明,签名协议等 |
评估 | 安全系统准则等 | |
设计 | 端到端设计,虚拟机,最小特权等 | |
来源于其他领域的基本原理 | 信息安全实践,取证规则,入侵检测,生物特征等 |
模板
“通信”——第一招少泽剑
按照香农信息论的定义:
- 信息是事物运动状态或存在方式的不确定性的描述。
- 通信过程是一种消除不确定性的过程。
- 通信的结果是消除或部分消除不确定性从而获得信息。
通信系统在形式上传输的是消息,实质上传输的是信息。消息只是表达信息的工具。信号是消息的载体,是消息的一种表现形式。广义的讲,信号是带有信息的随时间变化的物理量或物理现象。在通信系统中,信号是传递各种消息的工具,是通信传输的客观对象。即,通信的实质是传输信息,形式上是传输消息,客观上是传输信号。
“计算”——第二招少冲剑
可以先看下维基百科上对计算的介绍:
- A calculation is a deliberate process that transforms one or more inputs into one or more results, with variable change.——计算是一个经过深思熟虑的过程,它将一个或多个输入转换成一个或多个结果,并带有可变的变化。
- Computation is any type of calculation that follows a well-defined model understood and expressed as, for example, an algorithm.——计算是任何类型的计算,它遵循定义良好的模型理解并表示为,例如,算法 。
计算是基于给定的基本规则进行演化的过程。计算其实是在探索事物之间的等价关系,或者说同一性。计算的本质是什么?对一台图灵机来说,那就是无限长的纸带和能够自如移动的读写头,但这太抽象了。我们今天尝试换一种方式去理解计算:计算的本质是通过有限的步骤,读入数据,将一串序列,转换为另外一串序列,再将其输出。
计算与编程语言的关系:计算与编程语言的关系可以从两个方面探讨。
- 其一为计算理论,即关于计算能做什么、如何进行计算的研究。
- 其二为计算的物理实现。
编程语言可以理解为一套符号系统,用于描述计算模型。但是,我们现在的大多数计算机都是基于冯若依曼模型,考虑到计算能力的限制,编程语言会做一些折衷,从而更充分的利用计算资源。理解一门编程语言可以先从它的语义开始,语义体现了编程语言中包含的计算模型。
(在此期待仓颉编程语言,并希望cangjie和OpenHarmony将会碰撞出绚烂的火花)
“协作”——第三招关冲剑
并行计算(Parallel Computing)是高性能计算下的一个细分领域,其主要思想是将复杂问题分解成若干个部分,将每一个部分交给独立的处理器(计算资源)进行计算,以提高效率;针对不同的问题,并行计算需要专用的并行架构,架构既可以是专门设计的,含有多个处理器的单一硬件或超级计算机,也可以是以某种方式互连的若干台的独立计算机构成的集群;并没有一个统一的并行计算架构适用于每一个问题,如果使用了错误的架构,并行计算甚至会导致性能下降。
排队论是一套数学理论与模型。通过不同的模型衍生,该理论力图模拟各种常见的队列等待模型。该理论常见的有趣结论:平均等待时间,平均队列顾客数量,银行/医院开设新服务窗口的经济有效性等等。
一个排队系统可以分为五个方面去研究,分别是顾客抵达时间,服务台服务时间,服务规则,服务台数量,系统容量五个角度。
而通常我们默认服务规则为先到先服务(FCFS:First come first service),系统容量为无限制即为无穷。
“记忆(存储)”——第四招中冲剑
存储系统就是计算机存储程序和数据的系统,由各种存储设备和控制部件及管理信息调度的硬件和软件组成,具有存入和取出两大功能。
现代的计算机需要满足大容量,高速度和低成本三项要求。但是,大容量的便宜运算速慢。运算速度快的储存元件运算速度快但是价格大,存储内容小。于是为了满足现代计算机的要求,采用了分层存储体系。把各种不同存储容量,不同存取速度,不同价格的存储器组合在一起。发挥它们最大的优势。
它们之间的信息调度是由辅助硬件或者软件直接完成的。能发挥整个存储系统的最大效能,有最佳的性价比。当然最主要的是它的工作原理:cpu先访问运行速度最快的存储器,如果找到了返回,没有则通过管理软件或者辅助硬件向下一级运算速度较慢存储器中寻找。找到则返回内容,如果还没有则到运算速度更慢的存储器中寻找比如硬盘,直到找到。没有找到的化,则返回失败。找到了,则把内容逐渐上调。
“评估”——第五招商阳剑 和“设计”——第六招少商剑
设计指的是程序设计。评估和设计其实是密不可分的。程序是对算法的表达,并可以在一台计算机上运行。程序设计语言是一种人造语言,具有其自身的用于表达程序的语法规则。其实说明白了程序设计是一种编写在计算机上运行的指令序列的实践活动。
程序设计语言,是用来告诉计算机,怎么去解决一个问题。第一步做什么,第二步做什么,……,最后做什么。
计算机能够直接理解的语言,称为机器语言。后来人们为了便于使用机器语言,用符号来简单代替机器语言中的命令,这个符合代替后的语言,被称为汇编语言。但是汇编语言还是很难去编写大型软件,既不方便编写,又不方便理解、修改。于是高级语言出现了。
高级语言,就是用接近人的自然语言的方式编写代码,编写程序。然而,高级语言,计算机是理解不了的。高级语言的优点,就是方便程序设计人员,编写、理解、修改程序。对于计算机来说,高级语言写的东西,就是一堆理解不了的乱码。
计算机只是理解,编写正确的“0”& “1”字符串。计算机的世界里面就只有0和1。所以任何想让计算机理解的问题,都必须翻译成0 和1 组成的字符串序列。高级语言也必须翻译成0 和1 的字符串,也就是机器语言。
这个翻译软件,我们通常称之为:编译软件( 编译器 )或者解释软件( 解释器 )。世界上的计算机语言无非就是通过这两者来把它们翻译成机器语言。
我们使用高级语言编写的程序、软件,使用编译器或者解释器,翻译成机器语言,最后形成可以执行的程序,被称为软件。
在设计计算系统和软件的实践中,人们探索出5种有效的设计模式:
- 层级式聚合(体现在抽象、分解、模块化、信息隐藏中)
- 封装
- 级别
- 虚拟机
- 对象
这些模式被实践在语言、应用程序、操作系统的结构中。
文章篇幅限制,只叙述了很小的一部分。不能对计算基本原理框架的6门招式有更多具体的介绍。更深层次的知识则需要各位侠客自己不断去发现,吸收。
由于本人水平有限以及知识面的狭隘,文章中有疏漏和不足之处敬请各位老师和读者批评指正。