点击蓝色“程序员cxuan ”关注我哟git
加个“星标”,欢迎来撩程序员
计算机自从 20 世纪 40 年代诞生以来,一直以前所未有的进步向前发展,若是说农业革命是第一次革命、工业革命是第二次革命的话,那么第三次革命就是 信息革命
。
web
计算机技术的进步几乎影响着社会的方方面面,硬件的进步使得程序员能够编写出各类各样优秀的应用软件。也许不久的未来虚拟现实、无人驾驶、无现金支付就会成为现实。编程

1设计模式
计算机分类 缓存
计算机从用途上来说主要分为三种:服务器
-
我的计算机(Personal Computer)
,也称为 PC,这是人们最熟知的一种计算机,我的计算机强调用户体验,价格低廉,性价比高,我的计算机虽然出现时间很短,可是却大大推进了计算机历史的进程。
-
服务器(Server)
,服务器一般借助网络访问,用于执行大负载任务,能够处理复杂的应用,服务器相比我的计算机,有着更强的计算、存储和 I/O 能力。发生故障时,服务器比我的计算机恢复代价高。微信服务器分为两种,一种用于处理简单小型的 web 服务,没有显示器和键盘。而另一种是高端服务器,高端服务器一般称为超级计算机,通常由成千上万台处理器组成,内存很是大,同时价格也很是高。网络
-
嵌入式计算机(embedded computer)
是数量最多的一类计算机,应用和性能十分普遍,通常应用于汽车、电视中的微处理器,飞机、火车、家用冰箱、洗衣机等,嵌入式计算机系统是由单一应用程序或者一组相关联的应用程序组成,用户一般意识不到本身正在使用计算机。app
技术的不断发展也让计算机在不断进步,对整个信息技术工业产生影响,自从我的计算机 PC 出现以来,计算机发展迅速,出现了一种我的移动设备(Personal Mobile Device, PMD)
,PMD 由锂电池供电,经过无线的方式访问网络,价格低廉。PMD 再也不像 PC 同样拥有显示器和鼠标,做为替代的是一块触摸屏,甚至支持语音输入,PMD 的出现表明后 PC 时代的到来,而 PMD 将在将来生活中扮演更多角色。
云计算(cloud computing)
替代了传统的服务器,它依赖于一种仓储规模计算机(Warehouse Scale Computer, WSC)
的巨型数据中心,好比 AWS ,Google 这样的顶级科技公司,经过云计算实现 软件即服务(Software as a Service, Saas)
是软件工业的使命。

2
八个伟大设计思想
计算机世界的快速发展,离不开几个关键思想的影响,这些思想深入影响着计算机设计人员
使用抽象简化设计
抽象真是一个牛逼的词汇,提升硬件和软件生产率的主要技术之一就是使用抽象(abstraction)
来表示不一样的设计层次,对高层次隐藏内部的实现细节,使其只看到一个大体简化版的模型。
摩尔定律
计算机设计者一个永恒的问题就是 摩尔定律(Moore's Law)
驱动的快速变化,它是由英特尔的创始人 摩尔
提出的,它的主要内容是:当价格不变时,集成电路上可容纳的元器件的数目,约每隔 18 - 24 个月便会增长一倍,性能也将提高一倍,这必定律揭示了信息进步的速度。
经过并行提升性能
并行处理是计算机的一大进步,并行指的是计算机系统中能同时执行两个或多个处理的一种计算方法,并行处理的主要目的是提升效率,缩短工做时间,可是会带来更大的复杂性。
经过流水线提升性能
在计算机结构设计中,一个特殊的并行场景是使用流水线,流水线也是一种硬件并行的设计。你必定见过大型车间或者制造厂中的流水线工业设计。
加速大几率事件
加速大几率事件要比优化小几率事件更能提升性能,大几率事件一般比小几率事件简单,大几率事件规则意味着设计者须要知道什么事件是常常发生的。
经过预测提升性能
古人一般讲一句话是 未雨绸缪
,代表要作一件事情须要提早作好准备,才能更好的完成工做。预测也是一种提早作好准备的思想,经过预测的方式提早开始某些操做,会比等到确切知道这些操做启动时要快,经过另外一方面提升系统性能。
存储器层次
存储器层次我在以前的文章中屡次提到了,这是金字塔的层次设计模型,以下图所示
在存储器层次结构中,速度最快,容量最小的而且价格最昂贵的位于顶层,而速度最慢、容量最大并且价格便宜的位于底层。
经过冗余提升可靠性
计算机不只要保证工做的速度、还要保证工做的可靠。因为任何一个物理器件都有可能会失效,所以能够经过使用冗余部件的方式提升系统的可靠性(dependable)
,冗余部件能够替代失效部件而且能够帮助其检测错误。

3
计算机程序
一个应用程序可能由数千万行代码组成,咱们知道,计算机中的硬件只能提供最简单的低级指令,从复杂的应用程序到简单的指令须要通过软件的几个层次来逐步解释和翻译。下图展现了软件结构的几个层次
最外层是应用软件,最核心是硬件
,系统软件(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 这样的高级语言,也就是咱们开发所使用的语言,高级语言的出现,大大提升了编程效率,可是,万变不离其宗,高级语言也要通过
这一个转换过程。高级编程语言和编译程序大大提升了软件的生产率。
使用高级语言有如下几个好处:
其一,可让程序员使用更天然的语言来思考
其二,高级语言提升了程序员的生产率,加速程序的开发过程
其三,采用高级语言编写程序提升了程序对于计算机的独立性

4
硬件入门
看到这里你可能会有疑问,为何要学硬件呢?换个角度来说,凭什么培训三个月出来的程序员可以和科班学习四年的程序员一块儿竞争找工做?想过这个问题没有?
那是由于,培训机构不会为你的长远考虑,短时间找到工做可以交差便可。把一个程序员的素养等价为找到工做便可,这原本就是这个行业的污点所在,CRUD 程序员不须要专业的程序素养,完成工做便可。为何程序总有填不完的坑,不考虑程序健壮性、可拓展性、设计模式,写代码只为了本身,而不是以工程化的标准来要求本身就是培训班和科班的素养和差距。这也是我为何最近在研究计算机基础的缘由,由于我不够有素质
。
为何学硬件?就是可以让你从计算机的角度思考问题。好了很少说了,说多了该被培训班 diss 了。
任何一台计算机的基础硬件都须要完成最基本的功能:输入数据、输出数据、处理数据、存储数据。咱们讨论的主题就是描述这些功能是怎样完成的。
下面咱们就要探讨一下这些硬件
显示器
显示器是一个很是吸引人的输出设备,大多数我的移动设备都用 液晶显示(Liquid Crystal Display, LCD)
来得到轻巧、低功耗的显示效果。LCD 可以控制光的传输。今天,大多数 LCD 显示器都采用 动态矩阵显示(active matrix display)
技术,其每一个像素(pixel)
都由一个晶体管精确的控制电流,从而使图像更加清晰。在彩色动态矩阵 LCD 中,还有一个 红 - 绿 - 蓝屏决定三种颜色份量的强度,每一个点须要三个晶体管开关。
-
液晶显示,这是一种显示技术,用液体聚合物薄层的带电或者不带电来传输或者阻止光线的传输 -
动态矩阵显示,一种液态显示技术,使用晶体管控制单个像素上光线的传输 -
像素,图像元素的最小单位,屏幕由成千上万的像素来组成
图像由像素矩阵组成,能够表示成二进制位的矩阵,称为 位图(bit map)
。不一样分辨率所可以支持的矩阵大小不一样,彩色显示器使用 8 位来表示每一个三原色(红、绿和蓝),每一个像素用 24 位表示,能够显示百万种不一样的颜色。
计算机硬件使用光栅刷新缓冲区(又称为帧缓冲区)来保存位图以支持图像。
图中的 X0 Y0 ,X1 Y1 都表示像素
触摸屏
后 PC 时代,移动设备的高速发展,使触摸屏成为一种趋势,触摸屏有两种实现
电阻式触摸屏(Resistive touchscreens)
:电阻式触摸屏基于施加到屏幕上的压力来工做。电阻屏由许多层组成。当按下屏幕时,外部的后面板将被推到下一层,下一层会感受到施加了压力并记录了输入。电阻式触摸屏用途普遍,能够用手指,指甲,手写笔或任何其余物体进行操做。
电容式触摸屏(capacitive touchscreen)
:电容式触摸屏经过感应物体(一般是指尖上的皮肤)的导电特性来工做。手机或智能手机上的电容屏一般具备玻璃表面,而且不依赖压力。当涉及到手势(如滑动和捏合)时,它比电阻式屏幕更具响应性。电容式触摸屏只能用手指触摸,而不能用普通的手写笔,手套或大多数其余物体来响应。
机箱
下面是一个 ipad2
的剖面图
这里面包括集成电路,也称为芯片(chip)
、CPU、前置摄像头、后置摄像头、麦克风、耳机插孔、扬声器、加速计、陀螺仪、Wi-Fi 网络和蓝牙网络等。
为了进一步理解硬件,下面展现了一款苹果 A5 微处理器的实现细节,处理器从逻辑上包括两个主要部件:数据通路和控制器
数据通路主要用来执行算数运算
控制器主要负责指导数据通路、存储器和 I/O 设备按照正确的指令进行执行
除此以外,上述剖面图还包括 GPIO
,通用型之输入输出的简称。
DDR SDRM 接口是内存条接口,经过提供多个隔行扫描的内存访问,从而提升内存带宽
内存是程序运行的存储空间,它同时用于保存程序运行时所使用的数据,内存由 DRAM 芯片组成。DRAM(Dynamic random access memory)
是动态随机访问存储器的缩写。在处理器内部使用的是另一种存储器 - 缓存(cache memory)
,这是一种小而快的存储器,通常做为 DRAM 的缓冲。cache 使用的是 静态访问存储器(Static Random Access Memory, SRAM)
,它的速度要比 DRAM 更快,价格也更加昂贵。
咱们上面探讨了影响计算机的几大设计思想,其中很是重要的一个思想就是 抽象
,计算机硬件和软件的接口就是一种抽象,这种抽象又被叫作 指令集体系结构(instruction set architecture)
,或者简称为 体系结构(architecture)
。提供给应用程序员基本指令集和操做系统接口称为 应用二进制接口(Application Binary Interface)
。
这种抽象的好处是让程序员可以单独的实现应用程序,而不用考虑其内部的硬件,内部硬件和系统应用程序只提供对用户的服务。对程序员隐藏内部实现细节。
与其余计算机通讯
上面咱们已经基本介绍到了输入、输出、控制器、存储器,可是对于计算机,还有一项很是重要的功能咱们没有介绍 - 计算机网络
,经过计算机联网,能够实现与其余计算机通讯,任何计算机都不能成为信息的 孤岛
,计算机通讯能为咱们带来下面这些好处
-
信息交互:在联网的两台计算机之间实现信息交互 -
资源共享:有些 I/O 设备能够由网络上的计算机共享 -
远距离访问:用户能够经过远距离操做计算机
随着传输速度以及通讯传输的距离,通讯代价也在随之增加,网络的传输是多种多样的,最多见的就是 以太网
,以太网是一种链接局域网的传统技术,它可以使设备经过协议(一组规则或通用网络语言)相互通讯,以太网的接入设备能够相互识别对方,以太网中的一个例子就是 局域网(Local Area Network, LAN)
,局域网经过交换机进行组网。还有一种距离更远的网络是 广域网
,广域网可支持万维网(World Wide Web)
。
-
局域网:一种在必定的地理区域使用的传输数据的网络 -
广域网:一种可将区域扩展到几百几公里范围的网络
随着计算机的不断发展,通讯速度和性能也在不断提高。
处理器和存储器制造技术
处理器和存储器在高速发展,计算机最初使用的是晶体管,而后后面慢慢出现了集成电路、超大规模集成电路。下表展现了这个演变过程
时间 | 计算机构造 |
---|---|
1951 | 真空管 |
1965 | 晶体管 |
1975 | 集成电路 |
1995 | 超大规模集成电路 |
2013 | 更大规模集成电路 |
晶体管(transistor)
是一种固体半导体器件,具备多种功能。晶体管做为一种可变电流开关,可以基于输入电压控制输出电流。集成电路(IC)
由成千上万的晶体管组成。后面不断的发展为更多晶体管组成的 超大规模集成电路(VLSL)
。
性能
计算机的性能是很难评判的,咱们将从如下几个方便来展开探讨
性能的定义
我的计算机用户比较感兴趣的就是 响应时间(response time)
,响应时间就是指一个任务从开始到完成所须要的时间,又称为执行时间。而数据中心感兴趣的经常是 吞吐率(throughput)
。
-
响应时间:也叫 执行时间(execution time)
,是计算机完成某项任务所须要的总时间,包括硬盘访问、内存访问、I/O 活动、操做系统开销和 CPU 的执行时间等。 -
吞吐率:也叫 带宽(bandwidth)
,性能的另外一种度量参数,表示单位时间内完成的任务数量。
性能的度量
若是使用时间来度量计算机,那么完成一样的任务,须要时间最少的计算机是最快的。程序的执行时间通常以秒
为单位。咱们可使用 CPU 执行时间
来表示在 CPU 上花费的时间,而不包括其余 I/O 或应用程序的时间。CPU 时间能够进一步分为用于用户程序的时间和操做系统为用户服务花去的 CPU 时间,前者称为 CPU 时间,后者称为系统 CPU 时间。
-
CPU 执行时间:简称 CPU 时间,执行某一任务在 CPU 上花费的时间 -
用户 CPU 时间:为用户服务所花费的时间 -
系统 CPU 时间:为执行程序花费在操做系统上的时间。
为了一致性,咱们使用 CPU 性能表示用户 CPU 时间,用系统性能表示系统空运行的响应时间。
几乎全部的计算机都会使用时钟来驱动硬件中的各类事件。时钟间隔的时间称为 时钟周期(clock cycle)
。也能够用它的倒数来描述,称为 时钟频率(clock rate)
。
CPU 性能及其因素
咱们通常使用下面的公式来表示 CPU 的性能
CPU 执行程序的时间 = 程序 CPU 时钟周期数 * 时钟周期时间
因为时钟频率和时钟周期互为倒数的关系,因此也能够用
CPU 执行程序的时间 = 程序 CPU 时钟周期数 / 时钟频率
有了公式后,咱们能够对各个指标进行描述,在时钟周期时间内,程序 CPU 时钟周期数越低,CPU 性能越高。在周期数相同的状况下,时钟频率越高,CPU 性能越高。
指令的性能
CPU 最终是要执行指令的,一个考虑指令执行时间的方法是:执行时间等于执行的指令 * 每条指令的平均时间。因此,一个程序须要的时钟周期数为
CPU 时钟周期数 = 程序指令数 * 每条指令的平均执行周期
咱们通常使用 CPI(clock cycle per instruction)
表示执行每条指令所需的时钟周期的平均值。不一样指令执行的周期可能不一样,因此 CPI 表示的是一个平均值。
因此咱们可使用 CPU 时间 = 指令数 * CPI * 时钟周期时间
或者 CPU 时间 = 指令数 * CPI / 时钟频率

5
总结
本篇文章咱们主要介绍了 计算应用分类、计算机发展的八大思想、计算机结构层次、基本硬件入门,还有计算机通讯、处理器发展、性能的定义。
往期精彩回顾

本文分享自微信公众号 - 程序员cxuan(cxuangoodjob)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。