计算机分类
计算机从用途上来讲主要分为三种:
个人计算机(Personal Computer)
,也称为 PC,这是人们最熟知的一种计算机,个人计算机强调用户体验,价格低廉,性价比高,个人计算机虽然出现时间很短,但是却大大推动了计算机历史的进程。
服务器(Server)
,服务器通常借助网络访问,用于执行大负载任务,可以处理复杂的应用,服务器相比个人计算机,有着更强的计算、存储和 I/O 能力。发生故障时,服务器比个人计算机恢复代价高。
服务器分为两种,一种用于处理简单小型的 web 服务,没有显示器和键盘。而另外一种是高端服务器,高端服务器通常称为超级计算机,一般由成千上万台处理器组成,内存非常大,同时价格也非常高。
嵌入式计算机(embedded computer)
是数量最多的一类计算机,应用和性能十分广泛,一般应用于汽车、电视中的微处理器,飞机、火车、家用冰箱、洗衣机等,嵌入式计算机系统是由单一应用程序或者一组相关联的应用程序组成,用户通常意识不到自己正在使用计算机。
技术的不断发展也让计算机在不断进步,对整个信息技术工业产生影响,自从个人计算机 PC 出现以来,计算机发展迅速,出现了一种个人移动设备(Personal Mobile Device, PMD)
,PMD 由锂电池供电,通过无线的方式访问网络,价格低廉。PMD 不再像 PC 一样拥有显示器和鼠标,作为替代的是一块触摸屏,甚至支持语音输入,PMD 的出现代表后 PC 时代的到来,而 PMD 将在未来生活中扮演更多角色。
云计算(cloud computing)
替代了传统的服务器,它依赖于一种仓储规模计算机(Warehouse Scale Computer, WSC)
的巨型数据中心,比如 AWS ,Google 这样的顶级科技公司,通过云计算实现 软件即服务(Software as a Service, Saas)
是软件工业的使命。
八个伟大设计思想
计算机世界的快速发展,离不开几个关键思想的影响,这些思想深刻影响着计算机设计人员
使用抽象简化设计
抽象真是一个牛逼的词汇,提高硬件和软件生产率的主要技术之一就是使用抽象(abstraction)
来表示不同的设计层次,对高层次隐藏内部的实现细节,使其只看到一个大致简化版的模型。
摩尔定律
计算机设计者一个永恒的问题就是 摩尔定律(Moore's Law)
驱动的快速变化,它是由英特尔的创始人 摩尔
提出的,它的主要内容是:当价格不变时,集成电路上可容纳的元器件的数目,约每隔 18 - 24 个月便会增加一倍,性能也将提升一倍,这一定律揭示了信息进步的速度。
通过并行提高性能
并行处理是计算机的一大进步,并行指的是计算机系统中能同时执行两个或多个处理的一种计算方法,并行处理的主要目的是提高效率,缩短工作时间,但是会带来更大的复杂性。
通过流水线提高性能
在计算机结构设计中,一个特殊的并行场景是使用流水线,流水线也是一种硬件并行的设计。你一定见过大型车间或者制造厂中的流水线工业设计。
加速大概率事件
加速大概率事件要比优化小概率事件更能提高性能,大概率事件通常比小概率事件简单,大概率事件规则意味着设计者需要知道什么事件是经常发生的。
通过预测提高性能
古人通常讲一句话是 未雨绸缪
,表明要做一件事情需要提前做好准备,才能更好的完成工作。预测也是一种提前做好准备的思想,通过预测的方式提前开始某些操作,会比等到确切知道这些操作启动时要快,通过另一方面提高系统性能。
存储器层次
存储器层次我在之前的文章中多次提到了,这是金字塔的层次设计模型,如下图所示
在存储器层次结构中,速度最快,容量最小的并且价格最昂贵的位于顶层,而速度最慢、容量最大而且价格便宜的位于底层。
通过冗余提高可靠性
计算机不仅要保证工作的速度、还要保证工作的可靠。由于任何一个物理器件都有可能会失效,因此可以通过使用冗余部件的方式提高系统的可靠性(dependable)
,冗余部件可以替代失效部件并且可以帮助其检测错误。
计算机程序
一个应用程序可能由数千万行代码组成,我们知道,计算机中的硬件只能提供最简单的低级指令,从复杂的应用程序到简单的指令需要经过软件的几个层次来逐步解释和翻译。下图展示了软件结构的几个层次
最外层是应用软件,最核心是硬件
,系统软件(systems software)
位于两者之间。
系统软件:通常提供服务性质的软件,包括操作系统、编译程序等。
操作系统和编译程序是对于所有计算机来说都是必须的,这两个系统软件是非常重要的,操作系统是计算机硬件和软件之间的接口;为用户提供各种调用和协调服务,操作系统主要的功能如下
- 处理用户输入和输出
- 协调内存和 CPU
- 为各种应用软件提供服务
而编译程序是完成另一项重要功能的程序:它把高级语言例如 C、Java、C++ 编写的程序翻译成为机器指令,这个翻译过程是非常复杂的。
编译程序
在计算机世界中,它能识别的只有两个信号:0 和 1,所以我们认为计算机只能识别二进制数。每个字母就代表计算机中的二进制位(binary digit)
或者 一位(bit)
。八个二进制位成为一个字节(byte)
,字节是最小的寻址单元,一连串的二进制位构成了计算机术语中的 指令(instruction)
,即 01010101110110 等等。。。。。。
第一代程序员是直接使用二进制数与计算机通信的,这是一项非常乏味的工作,所以为了改善这种枯燥无聊的编写方式,程序员很快发明了助记符
,最初助记符是通过手工翻译成为二进制的,这种转换过程过于浮躁无聊和繁琐,为了改善这种情况,程序员发明了一种 汇编程序(assembler)
的软件,可以将助记符自动转换为对应的二进制。比如我们使用助记符 add A,B
,这段代码就会自动的被二进制 0101011011
。该指令告诉计算机将使用 A 和 B 进行相加操作。这种助记符使用的语言就是汇编语言(assembly language)
。而机器可以理解的二进制语言称为 机器语言(machine language)
。
- 汇编程序:将指令由助记符形式翻译成二进制形式的程序
- 汇编语言:以助记符形式表示的语言
- 机器语言:以二进制元形式表示的机器指令
然而,随着时代的发展,汇编语言也慢慢面的枯燥乏味,所以出现了像是 C、Java 这样的高级语言,也就是我们开发所使用的语言,高级语言的出现,大大提高了编程效率,但是,万变不离其宗,高级语言也要经过
这一个转换过程。高级编程语言和编译程序大大提高了软件的生产率。
使用高级语言有以下几个好处:
其一,可以让程序员使用更自然的语言来思考
其二,高级语言提高了程序员的生产率,加速程序的开发过程
其三,采用高级语言编写程序提高了程序对于计算机的独立性