0.1 电脑:辅助人脑的好工具
0.1.1 计算机硬件的五大单元
中央处理器 (Central Processing Unit, CPU),CPU 为一个具有特定功能的芯片, 里头含有微指令集,如果你想要让主机进行什么特异的功能,就得要参考这颗 CPU 是否有相关内置的微指令集才可以。
由于 CPU 的工作主要在于管理与运算,因此在 CPU 内又可分为两个主要的单元,分别是: 算数逻辑单元与控制单元。其中算数逻辑单元主要负责程序运算与逻辑判断,控制单元则主要在协调各周边元件与各单元间的工作。
既然 CPU 的重点是在进行运算与判断,那么要被运算与判断的数据是从哪里来的? CPU 读 取的数据都是从内存来的! 内存内的数据则是从输入单元所传输进来!而 CPU 处理完毕的 数据也必须要先写回内存中,最后数据才从内存传输到输出单元。
电脑是由五个单元所组成的:输入单元、 输出单元、 CPU 内部的控制单元、算数逻辑单元与内存
上面图示中的“系统单元”其实指的就是电脑机箱内的主要元件,而重点在于 CPU 与内存。 特 别要看的是实线部分的传输方向,基本上数据都是流经过内存再转出去的! 至于数据会流进/ 流出内存则是 CPU 所发布的控制命令!而 CPU 实际要处理的数据则完全来自于内存 (不管 是程序还是一般文件数据)。这也是为什么当你的内存不足时,系统的性能就很糟糕!
所有的单元都是由 CPU 内部的控制单元来负责协调的,因此 CPU 是整个电脑系统的最重要部分!
0.1.2 一切设计的起点: CPU 的架构
CPU 其实内部已经含有一些微指令,我们所使用的软件都要经过 CPU 内部 的微指令集来达成才行。 那这些指令集的设计主要又被分为两种设计理念,这就是目前世界 上常见到的两种主要 CPU 架构, 分别是:精简指令集 (RISC) 与复杂指令集 (CISC) 系 统。
-
精简指令集 (Reduced Instruction Set Computer, RISC)
-
如甲骨文 (Oracle) 公司的 SPARC 系列
-
IBM 公司的 Power Architecture (包括 PowerPC) 系列
-
安谋公司 (ARM Holdings) 的 ARM CPU 系列
-
-
复杂指令集(Complex Instruction Set Computer, CISC)
- 有AMD、 Intel、VIA等的x86架构的CPU
0.1.3 其他单元的设备
在主机机箱内的设备大多是通过主板 (main board) 连接在一块,主板上面有个链接沟通所有设备的芯片组,这个芯片组可以将 所有单元的设备链接起来, 好让 CPU 可以对这些设备下达命令
其他单元的重要设备主要 有:
-
系统单元
-
存储单元
-
输入、输出单元
0.1.4 运行流程
假设电脑是一个人体,那么每个元件对应到那个地方呢?
-
CPU=脑袋瓜子
-
内存=脑袋中放置正在被思考的数据的区块
-
硬盘=脑袋中放置回忆的记忆区块
-
主板=神经系统
-
各项周边设备=人体与外界沟通的手、脚、皮肤、眼睛等
-
显卡=脑袋中的影像
-
电源供应器 (Power)=心脏
0.1.5 电脑按用途分类
-
超级计算机(Supercomputer)
- 国防军事、气象预测、太空科技、仿真
-
大型计算机(Mainframe Computer)
- 大型企业的主机、全国性的证券交易所
-
迷你电脑(Minicomputer)
- 科学研究、工程分析与工厂的流程管理
-
工作站(Workstation)
- 学术研究与工程分析
-
微电脑(Microcomputer)
- 个人电脑
0.1.6 电脑上面常用的计算单位 (容量、速度等)
容量单位
电脑对数据的判断主要依据有没有通电来记录信息,所以理论上对于每一个纪录单位而言, 它只认识 0 与 1 而已。0/1 这个二进制的的单位我们称为 bit。
但 bit 实在太小了,所以在储 存数据时每份简单的数据都会使用到 8 个 bits 的大小来记录,因此定义出 Byte 这个单位
\[1 Byte = 8 bits \]常见的单位与进位制对应:
进位制 | Kilo | Mega | Giga | Tera | Peta | Exa | Zetta |
---|---|---|---|---|---|---|---|
二进制 | 1024 | 1024K | 1024M | 1024G | 1024T | 1024P | 1024E |
十进制 | 1000 | 1000K | 1000M | 1000G | 1000T | 1000P | 1000E |
一般来说,文件大小使用的是二进制的方式,所以 1GBytes 的文件大小实际上为: 1024x1024x1024Bytes 这么大!
速度单位则常使用十进制,例如 1GHz 就是 1000x1000x1000Hz 的意思。
速度单位
CPU的运算速度常使用 MHz 或者是 GHz 之类的单位,这个 Hz 其实就是秒分之一。
网络常使用的单位为 Mbps 是 Mbits per second,亦即是每秒多少 Mbit。
20M/5M 光世代传输速度,如果转 成文件大小的 Byte 时,其实理论最大传输值为:每秒 2.5MByte/ 每秒625KByte的下载/上传 速度喔!
500GB的硬盘一颗,但是格式化完毕后却只剩下460GB左右的容 量,这是什么原因?
因为一般硬盘制造商会使用十进制的单位,所以500GByte代表为 \(500*1000*1000*1000Byte\) 之意。 转成文件的容量单位时使用二进制(1024为底),所以就成为466GB左右的容量了。
硬盘厂商并非要骗人,只是因为硬盘的最小物理量为512Bytes,最小的组成单位为扇区 (sector), 通常硬盘容量的计算采用“多少个sector”,所以才会使用十进制来处理的。
0.2 个人电脑架构与相关设备元件
一般消费者常说的电脑通常指的就是x86的个人电脑架构
Linux最早在发展的时候,就是依据个人电脑的架构来发展的
早期两大主流x86开发商(Intel, AMD)的CPU架构与设计理念 都有些许差异。不过互相学习对方长处的结果,就是两者间的架构已经比较类似了
Intel芯片架构:
早期的芯片组通常分为两个桥接器来控制各元件的沟通, 分别是:
-
北桥:负责链接速度较快的CPU、内存与显卡接口等元件;
-
南桥:负责连接速度 较慢的设备接口, 包括硬盘、USB、网卡等等。
由于北桥最重要的就是 CPU 与内存之间的桥接,因此目前的主流架构中, 大多将北桥内存控制器整合到 CPU 封装当中了
们以华硕公司出的主板,型号:Asus Z97-AR 作为一个说明的范例,主板上面设计的插槽主要有 CPU (Intel LGA 1150 Socket)、内存 (DDR3 3200 support)、显卡接口 (PCIe3.0)、SATA 磁盘插槽 (SATA express)等等
0.2.1 执行脑袋运算与判断的 CPU
由于CPU负责大量运算,因此 CPU通常是具有相当高发热量的元件。所以如果你曾经拆开过主板, 应该就会看到CPU上头 通常会安插一颗风扇来主动散热的。
x86个人电脑的CPU主要供应商为Intel与AMD,目前(2015)主流的CPU都是双核以上的架 构了! 原本的单核心CPU仅有一个运算单元,所谓的多核心则是在一颗CPU封装当中嵌入了 两个以上的运算核心, 简单的说,就是一个实体的CPU外壳中,含有两个以上的CPU单元就 是了。
不同的CPU型号大多具有不同的脚位(CPU上面的插脚),能够搭配的主板芯片组也不同
不同的微指令集会导致CPU工作效率的优劣。除了这 点之外, CPU性能的比较还有什么呢?那就是CPU的频率了!
不同的CPU之间不能单纯的以频率来判断运算性能喔!这是因为每颗CPU的微指 令集不相同,架构也不见得一样,可使用的第二层高速缓存及其计算机制可能也不同, 加上 每次频率能够进行的工作指令数也不同!所以,频率目前仅能用来比较同款CPU的速度!
CPU的工作频率:外频与倍频
前端总线 (FSB)
因为 CPU 的运算速度比其他的设备都要来的快,又为了要满足 FSB 的频率,因此厂商就在 CPU 内部再进行加速, 于是就有所谓的外频与倍频了。
超频
新的 CPU 设计中, 已经将内存控制器整合到 CPU 内部, 而链接 CPU 与内存、显卡的控制器的设计,在Intel部份使用 QPI (Quick Path Interconnect) 与 DMI 技术,而 AMD 部份则使用 Hyper Transport 了,这些技术都可以让 CPU 直接与内存、显卡等设备分别进行沟通,而不需要通过外部的链接芯片了。
因为现在没有所谓的北桥了 (整合到 CPU 内),因此,CPU 的频率设计就无须考虑得要同 步的外频,只需要考虑整体的频率即可。
32位与64位的CPU与总线“宽度”
与 CPU 的频率类似的,内存也是有其工作的频率,这个频率限制还是来自于 CPU 内的内存 控制器所决定的。
与总线宽度相似的,CPU每次能够处理的数据量称为字组大小(word size), 字组大小依据 CPU的设计而有32位与64位。我们现在所称的电脑是32或64位主要是依据这个 CPU解析的 字组大小而来的!
现在所称的电脑是32或64位主要是依据这个 CPU解析的 字组大小而来的!早期的32位CPU中,因为CPU每次能够解析的数据量有限, 因此由内存传 来的数据量就有所限制了。这也导致32位的CPU最多只能支持最大到4GBytes的内存。
CPU等级
由于x86架构的CPU在Intel的Pentium系列(1993年)后就有不统一的脚位与设计,为了将不 同种类的CPU规范等级, 所以就有i386,i586,i686等名词出现了。
基本上,在Intel Pentium MMX与AMD K6年代的CPU称为i586等级, 而Intel Celeron与AMD Athlon(K7)年代之后的32位CPU就称为i686等级。 至于目前的64位CPU则统称为x86_64等级。
向下相容:在x86_64的硬件下倒是可以安装386的软件
超线程 (Hyper-Threading, HT)
CPU 的超线程 (Hyper-Threading) 功能
0.2.2 内存
个人电脑的内存主要元件为动态随机存取内存 (Dynamic Random Access Memory, DRAM), 随机存取内存只有在通电时才能记录与使 用,断电后数据就消失了。因此我们也称这种RAM为挥发性内存。
DRAM根据技术的更新又分好几代,而使用上较广泛的有所谓的SDRAM与DDR SDRAM两 种。
DDR是所谓的双倍数据传送 速度(Double Data Rate),传输频率方面比SDRAM还要好
DDR SDRAM又依据技术的发展,有DDR, DDR2, DDR3, DDR4等等,其中,DDR2 的频率 倍数则是 4 倍而DDR3 则是 8 倍喔!
为了节省更多的电力,新的制程中降低了内存的操作电压,因此 DDR3 标 准电压为 1.5V,但 DDR3L 则仅须 1.35V
多通道设计
传统的总线 宽度一般大约仅达64位,为了要加大这个宽度,因此芯片组厂商就将两个内存汇整在一起, 如果一支内存可达64位,两支内存就可以达到128位了,这就是双通道的设计理念
除了双通道之外,中阶服务器也经常提供三信道,甚 至四信道的内存环境
DRAM与SRAM
CPU内的第二层高速缓存内存
因为第二层高速缓存(L2 cache)整合到CPU内部,因此这个L2内存的速度必须要CPU频率 相同。
使用DRAM是无法达到这个频率速度的,此时就需要静态随机存取内存(Static Random Access Memory, SRAM)
只读存储器(ROM)
主板上头的一个称为CMOS的芯片上,这个芯片需要借着额外的电源来发挥记录功能
CMOS内的数据如何读取与更新呢?BIOS(Basic Input Output System)是一套程序,这套程序是写 死到主板上面的一个内存芯片中, 这个内存芯片在没有通电时也能够将数据记录下来,那就 是只读存储器(Read Only Memory, ROM)。
ROM是一种非挥发性的内存。
BIOS是系统在开机的时候首先会去读取的一个小程序
固件(firmware)很多也是使用ROM来进行软件的写入的。 固件像软件一样也是 一个被电脑所执行的程序,然而他是对于硬件内部而言更加重要的部分。例如BIOS就是一个 固件, BIOS虽然对于我们日常操作电脑系统没有什么太大的关系,但是他却控制着开机时各 项硬件参数的取得! 所以我们会知道很多的硬件上头都会有ROM来写入固件这个软件。
固件就是绑在硬件上面的控制软件!
0.2.3 显卡
显卡又称为VGA(Video Graphics Array),用于图形影像的显示
一 般对于图形影像的显示重点在于分辨率与色彩深度,因为每个图像显示的颜色会占用掉内 存, 因此显卡上面会有一个内存的容量,这个显存容量将会影响到你的屏幕分辨率与色彩深 度的喔!
除了显存之外,现在由于三度空间游戏(3D game)与一些3D动画的流行,因此显卡的“运算 能力”越来越重要。一些3D的运算早期是交给CPU去运行的,但是CPU并非完全针对这些3D 来进行设计的,而且CPU平时已经非常忙碌了呢! 所以后来显卡厂商直接在显卡上面嵌入一 个3D加速的芯片,这就是所谓的GPU称谓的由来。
0.2.4 硬盘与储存设备
电脑系统上面的储存设备包括有:硬盘、软盘、MO、CD、 DVD、磁带机、U盘(闪存)、还有新一代的蓝光光驱等, 乃至于大型机器的区域网络储存 设备(SAN, NAS)等等,都是可以用来储存数据的。而其中最常见的应该就是硬盘
硬盘的物理组成
在硬盘盒里面其实是由许许多多的圆形盘片、机械手 臂、 磁头与主轴马达所组成的
实际的数据都是写在具有磁性物质的盘片上头,而读写主要是通过在机械手臂上的磁头 (head)来达成。 实际运行时, 主轴马达让盘片转动,然后机械手臂可伸展让磁头在盘片上 头进行读写的动作。 另外,由于单一盘片的容量有限,因此有的硬盘内部会有两个以上的盘 片喔!
盘片上的数据
扇区 (sector)
磁道(track)
柱面 (cylinder)
通常数据的读写会由外圈开始往内写的
传输接口
-
SATA接口
-
SAS接口
-
USB接口
固态硬盘 (Solid State Disk, SSD)
厂商拿闪存去制作成大容量的设备
虽然 这类的设备已经不能称为是磁盘 (因为没有磁头与盘片啊!都是内存!)。但是为了方便大 家称呼,所以还是称为磁盘!只是跟传统磁盘 (Hard Disk Drive, HDD) 不同, 就称为固态 硬盘 (Solid State Disk 或 Solid State Driver, SSD)
每秒读写操作次数 (Input/Output Operations Per Second, IOPS)!这个数值越大,代表可操作次数较高,当 然性能好的很
选购与运行须知
-
可接受的插槽接口 (SATA/SAS)
-
HDD 或 SSD
-
容量
-
缓冲内存
-
转速
-
运行须知
- 使用操作系统的正常关机方式会让硬盘的机械手臂归回原位
0.2.5 扩展卡与接口
常见整合到 主板的元件包括声卡、网卡、USB控制卡、显卡、磁盘阵列卡
0.2.6 主板
-
发挥扩展卡性能须考虑的插槽位置
-
设备I/O位址与IRQ中断信道
-
CMOS与BIOS
-
连接周边设备的接口
0.2.7 电源供应器
CPU/RAM/主板/硬盘等等都需要用电
因为Power的用料不同,电源供应的稳定性也会差很多
能源转换率:输出的功率/输入的功率
电源供应器本身也会吃掉一部份的电力的
0.2.8 选购须知
如果你的 公司需要一部服务器的话,建议不要自行组装,买品牌电脑的服务器比较好! 这是因为自行 组装的电脑虽然比较便宜,但是每项设备之间的适合性是否完美则有待自行检测。
在性能方面并非仅考虑CPU的能力而已,速度的快慢与“整体系统的最慢的那个设备有 关!”
系统不稳定的可能原因:
-
系统超频
-
电源供应器不稳
-
内存无法负荷
-
系统过热
0.3 数据表示方式
数值与文字的编码系统
0.3.1 数字系统
二进制 binary
0.3.2 文字编码系统
所谓的“编码系统”可以想成是一个“字码对照表”
0.4 软件程序运行
目前的电脑系统将软件分为两大类,一个是系统软件,一个是应用程序
0.4.1 机器程序与编译程序
我们前面谈到电脑只认识0与1而已,而且电脑最重要的运算与逻辑判断是在CPU内部, 而 CPU其实是具有微指令集的。因此,我们需要CPU帮忙工作时,就得要参考微指令集的内 容, 然后撰写让CPU读的懂的指令码给CPU执行,这样就能够让CPU运行了。
这样的流程有几个很麻烦的地方
-
需要了解机器语言
-
需要了解所有硬件的相关功能函数
-
程序不具有可携性
-
程序具有专一性
为了解决这个问题,电脑科学家设计出一种让人类看的懂得程序语言, 然后 创造一种“编译器”来将这些人类能够写的程序语言转译成为机器能看懂得机器码
目前常见的编译器有C, C++, Java, Fortran等等
在这样的环境下面我们还是得要考虑整体的硬件系统来设计程序。举例来说,当你需要将运行的数据写入内存中,你就得要自行分配一个内存区块出来让自己 的数据能够填上去, 所以你还得要了解到内存的位址是如何定位的。
为了要克服硬件方面老是需要重复撰写控制码的问题,所以就有操作系统(Operating System, OS)的出现了
0.4.2 操作系统
操作系统能够将所有的硬件都驱动, 并且提供一个发展软件的参考接口来给工程师开发软件
操作系统核心(Kernel)
操作系统(Operating System, OS)其实也是一组程序, 这组程序的重点在于管理电脑的所 有活动以及驱动系统中的所有硬件。
硬件的所有动作都必须要通过这个操作系统来达成
核心程序所放置到内存当中的区块是受保护的! 并且开机后就一直常驻在内 存当中
系统调用(System Call)
操作系统通常会提供一整组的开发接口给工程师来开发软件!工程师只 要遵守该开发接口那就很容易开发软件了!举例来说,我们学习C程序语言只要参考C程序语 言的函数即可, 不需要再去考虑其他核心的相关功能,因为核心的系统调用接口会主动的将 C程序语言的相关语法转成核心可以了解的任务函数, 那核心自然就能够顺利运行该程序 了!
操作系统其实就是核心与其提供的接口工具,不过就如同上面讲的,因为最简单的核心缺乏了 与使用者沟通的友好接口, 所以在目前,一般我们提到的“操作系统”都会包含核心与相关的 使用者应用软件呢!
-
操作系统的核心层直接参考硬件规格写成, 所以同一个操作系统程序不能够在不一样的 硬件架构下运行
-
操作系统只是在管理整个硬件资源,包括CPU、内存、输入输出设备及文件系统文件。
-
应用程序的开发都是参考操作系统提供的开发接口, 所以该应用程序只能在该操作系统 上面运行而已,不可以在其他操作系统上面运行的
核心功能
-
系统调用接口(System call interface)
-
程序管理(Process control)
-
内存管理(Memory management)
-
文件系统管理(Filesystem management)
-
设备的驱动(Device drivers)
操作系统与驱动程序
-
操作系统必须要能够驱动硬件,如此应用程序才能够使用该硬件功能;
-
一般来说,操作系统会提供开发接口,让开发商制作他们的驱动程序;
-
要使用新硬件功能,必须要安装厂商提供的驱动程序才行;
-
驱动程序是由厂商提供的,与操作系统开发者无关。
0.4.3 应用程序
应用程序是参考操作系统提供的开发接口所开发出来软件
0.5 重点回顾
0.6 本章习题
想了解你的主机内部各元件的信息:如果使用的是Windows操作系统,可使用CPU-Z(http://www.cpuid.com/cpuz.php)这套软件,如果是Linux环境下,可以使用 cat /proc/cpuinfo
及使用 lspci
来查阅各项元件的型号