硬件入门
看到这里你可能会有疑问,为什么要学硬件呢?换个角度来讲,凭什么培训三个月出来的程序员能够和科班学习四年的程序员一起竞争找工作?想过这个问题没有?
那是因为,培训机构不会为你的长远考虑,短期找到工作能够交差即可。把一个程序员的素养等价为找到工作即可,这本来就是这个行业的污点所在,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 / 时钟频率
总结
本篇文章我们主要介绍了 计算应用分类、计算机发展的八大思想、计算机结构层次、基本硬件入门,还有计算机通信、处理器发展、性能的定义。