第0章 计算机概论

逵刼廐鹻啁彜娧垄妃寂佗斵仢,垄斵寂盠缫髨争吭琌,疍仪展Linux来凐跿盠杧吧忤奶呋腙廒鞺暋诽篳枖乯乶剖輇,圼毀展仪诽篳枖磈佒否诽篳枖昕鞾盠槞恑乩燻。熒聨攩侸絗缻踻磈佒来睔徯穧异盠减肰悃,抜佁姞柸乩仢訿乜乧诽篳枖槞谖,觝忤恇垌仢訿Linux盠槞恑暋来焕霚异盠。圼毀,鹻啁岍艆侸胆晪垌昌壺仢乜屫笼柁豤豤诽篳枖槞谖!圼亖鹻啁亻乩暋睔减寂稭剖輇,抜佁凵忳乩姙盠垌昕逴豓妃尒奶奶捣斵。

0.1 计算机:辅助人脑的好工具

进入 21 世纪,没有用过计算机的朋友应该算很少了吧?但是,你了解计算机是什么吗?计算机的机壳里面含有什么组件?不同的计算机可以作什么事情?你生活周围都有哪些电器用品内部是含有计算机相关组件的?下面我们就来介绍一下吧!

计算机其实是:接收用户输入指令与数据,经过中央处理器的数据与逻辑单元运算处理后,以产生或存储成有用的信息。因此,只要有输入设备(不管是键盘还是触摸式屏幕)及输出设备(屏幕或直接打印出来),让你可以输入数据使该机器产生信息的,那就是一台计算机了,如图0-1所示。

figure_0017_0001

图0-1 计算机的功能

根据这个定义你知道哪些东西是计算机了吗?包括一般商店用的简易型加减乘除计算机、打电话用的手机、开车用的卫星定位系统(GPS)、提款用的提款机(ATM)、你常使用的桌面型计算机、可携带的笔记本电脑,还有近年来很红火的 Eee PC(或称为 netbook、上网本)等,这些都是计算机!

那么计算机主要的组成部件是什么呢?下面我们以常见的个人计算机来作说明。

0.1.1 计算机硬件的五大单元

关于计算机的组成部分,其实你可以观察你的桌面型计算机分析一下,依外观来说,计算机主要分为三部分。

输入单元:包括键盘、鼠标、卡片阅读机、扫描仪、手写板、触摸屏幕等。

中央处理器(CPU):含有算术逻辑、控制、记忆等单元。

输出单元:例如屏幕、打印机等。

我们主要通过输入设备(如鼠标与键盘)来将一些数据输入到主机里面,然后再由主机的功能处理成为图表或文章等信息后,将结果传输到输出设备,如屏幕或打印机上面。重点在于主机,里面含有什么组件呢?如果你曾经拆开过计算机机箱,会发现其实主机里面最重要的就是一块主板,上面安插了中央处理器(CPU)以及内存,还有一些适配卡而已。

整台主机的重点在于中央处理器(Central Processing Unit, CPU),CPU 为一个具有特定功能的芯片,里头含有微指令集,如果你想要让主机进行什么特异的功能,就得要参考CPU是否有相关内置的微指令集才可以。由于CPU的工作主要在于管理与运算,因此在CPU内又可分为两个主要的单元,分别是算术逻辑单元与控制单元 [1]。其中算术逻辑单元主要负责程序运算与逻辑判断,控制单元则主要协调各组件与各单元间的工作。

既然CPU的重点是进行运算与判断,那么要被运算与判断的数据是从哪里来的?CPU读取的数据都是从内存读取来的。内存内的数据则是从输入单元传输进来的。而CPU处理完毕的数据也必须要先写回内存中,最后数据才从内存传输到输出单元。

综合上面所说的,我们会知道其实计算机是由几个单元所组成的,包括输入单元、输出单元、CPU内部的控制单元、算术逻辑单元与内存五大部分。相关性如图0-2所示。

figure_0018_0002

图0-2 计算机的五大单元

图0-2中的系统单元其实指的就是计算机主机内的主要组件,而重点在于CPU与内存。特别要看的是实线部分的传输方向,基本上数据都是流经过内存再转出去。至于数据会流进/流出内存,则是CPU所发布的控制命令。而CPU实际要处理的数据则完全来自于内存,这是个很重要的概念。

而由上面的图示我们也能知道,所有的单元都是由CPU内部的控制单元来负责协调的,因此CPU是整个计算机系统的最重要部分。那么目前世界上有哪些主流的CPU呢?是否刚刚我们谈到的硬件内全部都是相同的CPU种类呢?下面我们就来谈一谈。

0.1.2 CPU的种类

如前面说过的,其实CPU内部已经含有一些小指令集,我们所使用的软件都要经过CPU内部的微指令集来完成才行。这些指令集的设计主要又被分为两种设计理念,这就是目前世界上常见到的两种主要CPU种类,分别是精简指令集(RISC)与复杂指令集(CISC)系统。下面我们就来谈谈这两种不同CPU种类的区别。

精简指令集(Reduced Instruction Set Computing, RISC) [2]

这种CPU的设计中,微指令集较为精简,每个指令的执行时间都很短,完成的操作也很单纯,指令的执行性能较佳;但是若要做复杂的事情,就要由多个指令来完成。常见的RISC微指令集CPU主要有Sun公司的SPARC系列、IBM公司的Power Architecture(包括PowerPC)系列与ARM系列等。

在应用方面,SPARC 架构的计算机常用于学术领域的大型工作站中,包括银行金融体系的主要服务器也都有这类的计算机架构;至于 PowerPC架构的应用上,例如 Sony公司出产的 Play Station 3(PS3)就是使用 PowerPC 架构的 Cell 处理器;那 ARM 呢?你常使用的各品牌手机、PDA、导航系统、网络设备(交换机、路由器)等,几乎都是使用ARM架构的CPU。老实说,目前世界上使用范围最广的CPU可能就是ARM呢 [3]

复杂指令集(Complex Instruction Set Computer, CISC) [4]

与RISC不同的,在CISC的微指令集中,每个小指令可以执行一些较低阶的硬件操作,指令数目多而且复杂,每条指令的长度并不相同。因为指令执行较为复杂,所以每条指令花费的时间较长,但每条个别指令可以处理的工作较为丰富。常见的CISC微指令集CPU主要有AMD、Intel、VIA等x86架构的CPU。

由于 AMD、Intel、VIA 所开发出来的 x86 架构 CPU 被大量使用于个人计算机(Personal Computer)用途上面,因此,个人计算机常被称为x86架构的计算机。那为何称为x86架构 [5]呢?这是因为最早的那个 Intel 发展出来的 CPU 代号称为 8086,后来依此架构又开发出 80286, 80386 等,因此这种架构的 CPU 就被称为 x86 架构了。

在2003年以前由Intel所开发的x86架构CPU由8位升级到16、32位,后来AMD依此架构修改新一代的CPU为64位,为了区别两者的不同,因此64位的个人计算机CPU又被统称为x86_64的架构!

那么不同的 x86架构的CPU有什么区别呢?除了CPU的整体结构(如第二层缓存、每次运作可执行的指令数等)之外,主要是在于微指令集的不同。新的x86的CPU大多含有很先进的微指令集,这些微指令集可以加速多媒体程序的运行,也能够加强虚拟化的性能,而且某些微指令集更能够增加能源效率,让CPU耗电量降低。由于电费越来越高,购买计算机时,除了整体的性能之外,节能省电的CPU特色也可以考虑。

figure_0019_0003

最新的Intel/AMD的x86架构中,请查询出多媒体、虚拟化、省电功能各有哪些重要的微指令集(仅供参考)。

答:多媒体微指令集:MMX, SSE, SSE2, SSE3, SSE4, AMD-3DNow!

虚拟化微指令集:Intel-VT, AMD-SVM

省电功能:Intel-SpeedStep, AMD-PowerNow!

64/32 位兼容技术:AMD-AMD64, Intel-EM64T

0.1.3 接口设备

单有CPU也无法运作计算机的,所以计算机还需要其他的接口设备才能够实际运行。除了前面稍微提到的输入/输出设备以及 CPU 与内存之外,还有什么接口设备呢?其实最重要的接口设备是主板!因为主板负责将所有的设备连接在一起,让所有的设备能够进行协调与通信。而主板上面最重要的组件就是主板芯片组!这个芯片组可以将所有的设备汇集在一起!其他重要的设备还有。

存储设备:包括硬盘、软盘、光盘、磁带等。

显示设备:显卡对于玩3D游戏来说是非常重要的,它与显示的精度、色彩与分辨率都有关系。

网络设备:没有网络就活不下去,所以网卡对于计算机来说也是相当重要。

更详细的各项周边设备我们将在下个小节进行介绍。在这里我们先来了解一下各组件的关系!那就是计算机是如何运行的呢?

0.1.4 运作流程

如果不是很了解计算机的运行流程,鸟哥拿个简单的想法来思考好了。假设计算机是一个人体,那么每个组件对应哪个地方呢?可以这样思考。

CPU=大脑:每个人会做事情都不一样(微指令集的区别),但主要都是通过大脑来进行判断与控制身体各部分的活动。

内存=大脑中的记录区块:在实际活动过程中,我们的大脑能够将外界的互动暂时记录起来,提供CPU来进行判断。

硬盘=大脑中的记忆区块:将重要的数据记录起来,以便未来再次使用这些重要的经验。

主板=神经系统:好像人类的神经一样,将所有重要的组件连接起来,包括手脚的活动都是大脑发布命令后,通过神经(主板)传输给手脚来进行活动。

各项接口设备=人体与外界通信的手、脚、皮肤、眼睛等:就好像手脚一般,是人体与外界互动的关键部位。

显卡=脑袋中的影像:将来自眼睛的刺激转成影响后在脑袋中呈现,所以显卡所产生的数据来源也是CPU控制的。

电源(Power)=心脏:所有的组件要能运作,得要有足够的电力供给才行。这电力供给就好像心脏一样,如果心脏不够强,那么全身也就无法动弹的!心脏不稳定呢?那你的身体当然可能断断续续地不稳定!

在图0-3所示的关系图当中,我们知道整个活动中最重要的就是大脑。而大脑当中与现在正在进行的工作有关的就是CPU与内存。任何外界的接触都必须要由大脑中的内存记录下来,然后由大脑中的CPU依据这些数据进行判断后,再发送命令给各个接口设备。如果需要用到过去的经验,就得由过去的经验(硬盘)当中读取了。

figure_0020_0004

图0-3 各组件运行图

也就是说,整个人体最重要的地方就是大脑,同样,整台主机当中最重要的就是CPU与内存,而CPU的数据通通来自于内存,如果要由过去的经验来判断事情时,也要将经验(硬盘)挪到目前的记忆(内存)当中,再交由CPU来判断,这一点得要再次强调。下个章节当中,我们就对目前常见的个人计算机各个组件来进行说明。

0.1.5 计算机分类

知道了计算机的基本组成与周边设备,也知道其实计算机的CPU种类非常多,再来我们想要了解的是计算机如何分类。计算机的分类非常多,如果以计算机的复杂度与运算能力进行分类的话,主要可以分为以下几类。

超级计算机(Supercomputer)

超级计算机是运行速度最快的计算机,但是它的维护、操作费用也最高。主要是用于需要有高速计算的项目中。例如国防军事、气象预测、太空科技,用在模拟的领域较多。至于全世界最快速的前500台超级计算机,则请参考:http://www.top500.org。

大型计算机(Mainframe Computer)

大型计算机通常也具有数个高速的 CPU,功能上虽不及超级计算机,但也可用来处理大量数据与复杂的运算。例如大型企业的主机、全国性的证券交易所等每天需要处理数百万笔数据的企业机构,或者是大型企业的数据库服务器等。

迷你计算机(Minicomputer)

迷你计算机仍保有大型计算机同时支持多用户的特性,但是主机可以放在一般作业场所,不像前两个大型计算机需要特殊的空调场所。通常用来作为科学研究、工程分析与工厂的流程管理等。

工作站(Workstation)

工作站的价格又比迷你计算机便宜许多,是针对特殊用途而设计的计算机。在个人计算机的性能还没有提升到目前的状况之前,工作站计算机的性能/价格比是所有计算机当中较佳的,因此在学术研究与工程分析方面相当常见。

微电脑(Microcomputer)

微电脑又可以称为个人计算机,也是我们这里主要探讨的目标。它体积小,价格低,但功能还是五脏俱全的。大致又可分为桌上型电脑、笔记本电脑等。

若光以性能来说,目前的个人计算机性能已经够快了,甚至比工作站等级以上的计算机运算速度还要快。但是工作站计算机强调的是稳定不死机,并且运算过程要完全正确,因此工作站以上等级的计算机在设计时的考虑与个人计算机并不相同!这也是为何工作站等级以上的个人计算机售价较贵的原因。

0.1.6 计算机上面常用的计算单位(大小、速度等)

计算机的运算能力是由速度来决定的,而存放在计算机存储设备当中的数据大小也是有单位的。

大小单位

计算机依据有没有通电来记录信息,所以理论上它只认识0与1而已。0/1的单位我们称为bit。但bit实在太小了,并且在存储数据时每份简单的数据都会使用到8个bit的大小来记录,因此定义出Byte这个单位,它们的关系为:

1Byte = 8bit

不过同样地,Byte还是太小了,在较大的容量情况下,使用Byte相当不容易判断数据的大小,举例来说,1000000B这样的显示方式你能够看得出有几个零吗?所以后来就有一些常见的简化单位表示法,例如K代表1024,M代表1024K等。而这些单位在不同的进位制下有不同的数值表示,下面就列出常见的单位与进位制对应表,如表0-1所示。

表0-1

figure_0021_0005

一般来说,文件大小使用的是二进制的方式,所以1GB的文件大小实际上为:1024x1024x1024B这么大。速度单位则常使用十进制,例如1GHz就是1000x1000x1000Hz的意思。

速度单位

CPU的运算速度常使用MHz或者是GHz之类的单位,这个Hz其实就是秒分之一。而在网络传输方面,由于网络使用的是 bit 为单位,因此网络常使用的单位为 Mbit/s,即每秒多少Mbit。举例来说,大家常听到的 8M/1M ADSL 传输速度,如果转成文件容量的 Byte 时,其实理论最大传输值为:1MB/s/125KB/s的上传/下载速度。

figure_0021_0006

假设你今天购买了500GB的硬盘一个,但是格式化完毕后却只剩下460GB左右的空间,这是什么原因?

答:因为一般硬盘制造商会使用十进制的单位,所以 500GB 代表为 500 x 1000 x 1000 x 1000B之意。转成文件的大小单位时使用二进制(1024为底),所以就成为466GB左右的空间了。

硬盘厂商并非要骗人,只是因为硬盘的最小物理量为512bytes,最小的组成单位为扇区(sector),通常硬盘容量的计算采用“多少个sector”,所以才会使用十进制来处理的。相关的硬盘信息在这一章后面会提到。

0.2 个人计算机架构与接口设备

一般消费者常说的计算机通常指的就是x86的个人计算机架构,因此我们有必要来了解一下这个架构的各个组件。事实上,Linux 最早在发展的时候,就是依据个人计算机的架构来发展的,所以,真的需要了解一下。另外,因为两大主流x86开发商(Intel, AMD)的 CPU 架构并不兼容,而且设计理念也有所区别,所以两大主流 CPU 所需要的主板芯片组设计也就不太相同。目前最新的主板架构主要如图0-4所示。

figure_0022_0007

图0-4 Intel芯片架构

就如同前一节提到的,整个主板上面最重要的就是芯片组了!而芯片组通常又分为两个桥接器来控制各组件的通信,分别是:(1)北桥负责连接速度较快的CPU、内存与显卡等组件;(2)南桥负责连接速度较慢的周边接口,包括硬盘、USB、网卡等。(芯片组的南北桥与三国的大小乔没有关系。)至于AMD的芯片组架构,如图0-5所示。

它与 Intel 不同的地方在于,内存是直接与CPU通信而不通过北桥。从前面的说明我们可以知道CPU的数据主要都是来自于内存,因此AMD为了加速这两者的通信,将内存控制组件集成到CPU当中,理论上这样可以加速CPU与内存的传输速度。这是两种CPU在架构上面主要的区别。

毕竟目前世界上x86的CPU主要生产商为Intel,所以下面将以Intel的主板架构为例说明各组件!我们以技嘉公司出品的型号为 Gigabyte GA-X48-DQ6 的主板作为一个说明的范例,主板各组件如图0-6所示。

figure_0022_0008

图0-5 AMD 芯片架构

figure_0022_0009

图0-6 技嘉主板各组件

主要的组件为 CPU、内存、磁盘设备( IDE/SATA )、总线芯片组(南桥/北桥)、显卡接口(PCI-Express)与其他适配卡(PCI)。下面的各项组件在讲解时请参考Intel芯片组架构与技嘉主板各组件来印证。

0.2.1 CPU

如同图0-6所示,最上方的中央部分,那就是CPU插槽。由于CPU负责大量运算,因此CPU通常是具有相当高发热量的组件。所以如果你曾经拆过主板,应该就会看到CPU上面通常会安插一个风扇来主动散热。

x86个人计算机的CPU主要生产商为Intel与AMD,目前主流的CPU都是双核以上的架构了。原本的单核CPU仅有一个运算单元,所谓的多核则是在一个CPU封装当中嵌入了两个以上的运算内核,简单地说,就是一个实际的CPU外壳中含有两个以上的CPU单元。

不同的CPU型号大多具有不同的脚位(CPU上面的插脚),能够搭配的主板芯片组也不同,所以当你想要将你的主机升级时,不能只考虑CPU,你还得要留意你的主板上面所支持的CPU型号!不然买了最新的 CPU 也不能够安插在你的旧主板上面!目前主流的 CPU 有 Intel 的 Core 2 Duo 与AMD的 Athlon64 X2 双核 CPU,高阶产品则有 Intel的Core i7与AMD的Phenom II四内核CPU,如图0-7所示。

figure_0023_0010

图0-7 不同的 CPU 脚位

我们前面谈到CPU内部含有微指令集,不同的微指令集会导致CPU工作效率的优劣。除了这点之外,CPU 性能的比较还有什么呢?那就是CPU的频率。什么是频率呢?简单地说,频率就是CPU每秒钟可以进行的工作次数。所以频率越高表示CPU单位时间内可以做更多的事情。举例来说,Intel 的 Core 2 Duo 型号 E8400 的 CPU 频率为 3.0GHz,表示这个 CPU 在一秒内可以进行3.0x109次工作,每次工作都可以进行少数的指令运行之意。

注意,不同的CPU之间不能单纯以频率来判断运算性能。这是因为每个CPU的微指令集不相同,架构也不一样,每次频率能够进行的工作指令数也不同,所以频率目前仅能用来比较同款CPU的速度。

CPU的“外频”与“倍频”

我们可以看到图 0-9 的芯片架构图当中各个组件都是通过北桥与南桥连接在一起。但就像一群人共同在处理一个连续作业一般,如果这一群人里面有个人的动作特别快或特别慢,将导致前面或者是后面的人事情一堆处理不完!也就是说,这一群人最好能够速度一致较佳!所以CPU与外部各组件的速度理论上应该要一致才好。但是因为CPU需要较强大的运算能力,因为很多判断与数据都是在CPU内处理的,因此CPU开发商就在CPU内再加上一个加速功能,所以CPU有所谓的外频与倍频。

所谓的外频指的是CPU与外部组件进行数据传输/运算时的速度,倍频则是CPU内部用来加速工作性能的一个倍数,两者相乘才是CPU 的频率。我们以刚才的 Intel Core 2 Duo E8400 CPU 来说,它的频率是 3.0GHz,而外频是 333MHz,因此倍频就是 9 倍(3.0G=333Mx9, 其中1G=1000M)。

很多计算机硬件玩家很喜欢玩“超频”,所谓的超频指的是:将CPU的倍频或者是外频通过主板的设定功能更改成较高频率的一种方式。但因为CPU的倍频通常在出厂时已经被锁定而无法修改,因此较常被超频的为外频。

举例来说,像上述3.0GHz的CPU如果想要超频,可以将它的外频333MHz调整成为400MHz,但如此一来整个主板的各个组件的运行频率可能都会被增加成原本的 1.333 倍(4/3),虽然CPU有可能到达3.6GHz,但却因为频率并非正常速度,故可能会造成死机等问题。

32位与64位

前面谈到CPU运算的数据都是由内存提供的,内存与CPU的通信速度靠的是外部频率,那么每次工作可以传送的数据量有多大呢?那就是总线的功能了。一般主板芯片组分为北桥与南桥,北桥的总线称为系统总线,因为是内存传输的主要信道,所以速度较快;南桥就是所谓的输入输出(I/O)总线,主要用于“联系”硬盘、USB、网卡等接口设备。

目前北桥所支持的频率可高达333/400/533/800/1066/1333/1600MHz等不同频率,支持情况依芯片组功能而有所不同。北桥所支持的频率我们称为前端总线速度(Front Side Bus, FSB),而每次传送的位数则是总线宽度。那所谓的总线频宽则是“FSB x 总线宽度”,亦即每秒钟可传送的最大数据量。目前常见的总线宽度有32/64位(bit)。

而如图 0-5 图示,在该架构中前端总线最高速度可达 1600MHz。我们看到内存与北桥的频宽为12.8GB/s,即是1600MHz x 64bit = 1600MHz x 8Bytes = 12800MB/s = 12.8GB/s

与总线宽度相似,CPU每次能够处理的数据量称为字组大小(word size),字组大小依据CPU的设计而有32位与64位。我们现在所称的计算机是32位或64位主要是依据CPU解析的字组大小而来的!早期的32位CPU中,因为CPU每次能够解析的数据量有限,因此由内存传来的数据量就有所限制了。这也导致32位的CPU最多只能支持最大到4GB的内存。

字组大小与总线宽度可以不相同。举例来说,在Pentium Pro时代,该CPU是32位的处理器,但当时的芯片组可以设计出64位的总线宽度。在这样的架构下我们通常还是以CPU的字组大小来称呼该架构。个人计算机的64位CPU是到2003年出现AMD Athlon64 后才出现。

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等级。

目前很多的程序都有对CPU做最佳化的设计,如果哪天你发现一些程序是注明给686的CPU使用时,就不要将它安装在586以下等级的计算机中,否则会无法执行该软件。不过,在686的机器上可以安装386的软件。也就是说,它们具有向下兼容的能力!

0.2.2 内存

如同图0-6所示的技嘉主板示意图中,右上方的那四根插槽就是内存的插槽了。内存插槽中间通常有个突起物将整个插槽稍微切分成为两个不等长的距离,这样的设计可以让用户在安装内存时,不至于前后脚位安插错误,是一种防误操作的设计。

前面提到 CPU 所使用的数据都是来自于内存(Memory),不论是软件程序还是数据,都必须要读入内存后 CPU 才能利用。个人计算机的内存主要组件为动态随机访问内存(Dynamic Random Access Memory, DRAM),随机访问内存只有在通电时才能记录与使用,断电后数据就消失了。因此我们也称这种RAM为挥发性内存。

DRAM 根据技术的更新又分好几代,而使用上较广泛的有所谓的 SDRAM 与 DDR SDRAM 两种。这两种内存的区别除了在于引脚位与工作电压上的不同之外,DDR是双倍数据传送速度(Double Data Rate),它可以在一次工作周期中进行两次数据的传送,感觉上就是 CPU 的倍频。所以传输频率方面比SDRAM还要好。新一代的PC大多使用DDR内存了。表0-2列出了 SDRAM 与 DDR SDRAM 的型号与频率及频宽之间的关系。

表0-2

figure_0025_0011

DDR SDRAM 又依据技术的发展,有 DDR, DDRII, DDRIII 等。

内存型号的挑选与CPU及芯片组有关,所以在购买主板、CPU与内存的时候必须要考虑其相关性,并不是任何主板都可以安插DDR III 的内存呢!

内存除了频率/频宽与型号需要考虑之外,容量也是很重要的。因为所有的数据都得要加载到内存当中才能够被 CPU 读取,如果内存容量不够大的话将会导致某些大容量数据无法被完整加载,此时已存在内存当中但暂时没有被使用到的数据必须要先被释放,使得可用内存容量大于该数据,那份新数据才能够被加载。通常内存越大表示系统越快,这是因为系统不用常常释放一些内存内部的数据。对服务器而言,内存的容量有时比 CPU 的速度还重要。

双通道设计

由于所有的数据都必须要存放在内存中,所以内存的数据宽度当然是越大越好。但传统的总线宽度一般大约仅达64位,为了要加大这个宽度,因此芯片组厂商就将两个内存汇整在一起,如果一条内存可达64位,两条内存就可以达到128位了,这就是双通道的设计理念。

如上所述,要启用双信道的功能你必须要安插两支(或四条)内存,这两条内存最好型号都一模一样的比较好,这是因为启动双信道内存功能时,数据是同步写入/读出这一对内存中,如此才能够提升整体的频宽!所以当然除了容量大小要一致之外,型号也最好相同!

你有没有发现图0-6所示的技嘉主板示意图上那四根内存插槽的颜色呢?是否分为两种颜色,且两两成对?为什么要这样设计?这种颜色的设计就是为了双通道来的!要启动双信道的功能时,你必须要将两根容量相同的内存插在相同颜色的插槽当中!

CPU频率与内存的关系

理论上,CPU 与内存的外频应该要相同才好。不过,因为技术方面的提升,因此这两者的频率速度不会相同,但外频则应该是一致的较佳。举例来说,上面提到的 Intel E8400 CPU 外频为 333MHz,则应该选用 DDR II 667 这个型号,因为该内存型号的外频为 333MHz!

DRAM与SRAM

figure_0025_0012

图0-8 内存相关性

除了内存之外,事实上整台个人计算机当中还有许多的“内存”存在!最为我们所知的就是CPU内的第二层高速缓存。我们现在知道CPU的数据都是由内存提供的,但内存的数据毕竟得经由北桥送到CPU内。如果某些很常用的程序或数据可以放置到CPU内部的话,那么CPU数据的读取就不需要通过北桥了。对于性能来说不就可以大大提升了?这就是第二层缓存的设计概念。第二层缓存与内存及CPU的关系如图0-8所示。因为第二层缓存(L2 Cache)集成到CPU内部,因此这个L2内存的速度必须要与CPU频率相同。使用 DRAM 是无法达到这个频率速度的,此时就需要静态随机访问内存(Static Random Access Memory, SRAM)帮忙了。SRAM在设计上使用的晶体管数量较多,价格较高,且不易做成大容量,不过由于其速度快,因此集成到CPU内成为高速缓存以加快数据的访问是个不错的方式!新一代的CPU都有内置容量不等的L2缓存在CPU内部,以加快CPU的运行性能。

只读存储器(ROM)

主板上面的组件是非常多的,而每个组件的参数又具有可调整性。举例来说,CPU 与内存的频率是可调整的;而主板上面如果有内置的网卡或者是显卡时,该功能是否要启动与该功能的各项参数被记录到主板上面的一个称为CMOS的芯片上,这个芯片需要借着额外的电源来发挥记录功能,这也是为什么你的主板上面会有一个电池的缘故。

那CMOS内的数据如何读取与更新呢?还记得你的计算机在开机的时候可以按下[Del]按键来进入一个名为 BIOS 的界面吧?BIOS(Basic Input Output System) [6]是一套程序,这套程序是写死到主板上面的一个内存芯片中,这个内存芯片在没有通电时也能够将数据记录下来,那就是只读存储器(Read Only Memory, ROM)。ROM 是一种非挥发性的内存。另外,BIOS对于个人计算机来说是非常重要的,因为它是系统在开机的时候首先会去读取的一个小程序!

另外,固件(firmware) [7]很多也是使用 ROM 来进行软件的写入的。固件像软件一样也是一个被计算机所执行的程序,然而它是对于硬件内部而言更加重要的部分。例如 BIOS 就是一个韧体,BIOS虽然对于我们日常操作计算机系统没有什么太大的关系,但是它却控制着开机时各项硬件参数的取得!所以我们会知道很多的硬件上面都会有ROM来写入固件中。

BIOS对计算机系统来讲是非常重要的,因为它掌握了系统硬件的详细信息与开机设备的选择等。但是计算机发展的速度太快了,因此BIOS 程序代码也可能需要做适度的修改才行,所以你才会在很多主板官网找到BIOS的更新程序。但是BIOS原本使用的是无法改写的ROM,因此根本无法修正BIOS程序代码。为此,现在的BIOS通常是写入闪存(Flash Memory)或EEPROM [8]中。

0.2.3 显卡

显卡插槽如图0-6所示,是在中央较长的插槽上。图0-6所示的这块主板中提供了两个显卡插槽。

显卡又称为 VGA(Video Graphics Array),它对于图形影像的显示扮演相当关键的角色。一般对于图形影像的显示重点在于分辨率与色彩深度,因为每个图像显示的颜色会占用内存,因此显卡上面会有一个内存的容量,这个显卡内存容量将会影响到最终你的屏幕分辨率与色彩深度。

除了显卡内存之外,现在由于三度空间游戏(3D game)与一些 3D 动画的流行,因此显卡的“运算能力”越来越重要。一些 3D 的运算早期是交给CPU 去运行的,但是CPU 并非完全针对这些3D来进行设计,而且CPU平时已经非常忙碌了。所以后来显卡厂商直接在显卡上面嵌入一个3D加速的芯片,这就是GPU称谓的由来。

显卡主要也是通过北桥芯片与CPU、内存等通信。如前面提到的,对于图形影像(尤其是3D游戏)来说,显卡也是需要高速运算的一个组件,所以数据的传输也是越快越好。因此显卡的规格由早期的 PCI 导向 AGP,近期 AGP 又被 PCI-Express 规格所替代了。如图 0-6 图示当中看到的就是PCI-Express的插槽。这些插槽最大的区别就是在数据传输的频宽了,如表0-3所示。

表0-3

figure_0026_0013

罉裄

figure_0027_0014

比较特殊的是, PCIe ( PCI-Express )使用的是类似管线的概念来处理,每条管线可以具有250MB/s的频宽性能,管线越大(最大可达x32)则总频宽越高。目前显卡大多使用x16的PCIe规格,这个规格至少可以达到 4GB/s 的频宽。比起 AGP 是快很多。此外,新的 PCIe 2.0 规格也已经推出了,这个规格又可将每个管线的性能提升一倍呢!

如果你的主机是用来打3D游戏的,那么显卡的选购是非常重要的!如果你的主机是用来作为网络服务器,那么简单的入门级显卡对你的主机来说就非常够用了,因为网络服务器很少用到3D与图形影像功能。

figure_0027_0015

假设你的桌面使用1024x768分辨率,且使用全彩(每个像素占用3B的容量),请问你的显卡至少需要多少内存才能使用这样的彩度?

答:因为1024x768分辨率中会有786432个像素,每个像素占用3B,所以总共需要2.25MB以上。但如果考虑屏幕的刷新率(每秒钟屏幕的刷新次数),显卡的内存还是越大越好。

0.2.4 硬盘与存储设备

计算机总是需要记录与读取数据的,而这些数据当然不可能每次都由用户经过键盘来打字。所以就需要有存储设备了。计算机系统上面的存储设备包括硬盘、软盘、MO、CD、DVD、磁带机、U盘(闪存)等,乃至于大型机器的局域网存储设备(SAN, NAS)等,都是可以用来存储数据的。而其中最常见的就是硬盘了!

硬盘的物理组成

大家应该都看过硬盘吧。硬盘依据桌面型与笔记本又分为3.5英寸及2.5英寸的大小。我们以3.5英寸的硬盘来说明。硬盘其实是由许多的盘片、机械手臂、磁头与主轴马达所组成的,整个内部如图0-9所示。

实际的数据都是写在具有磁性物质的盘片上,而读写主要是通过在机械手臂上的读取头(Head)来完成。实际运行时,主轴马达让盘片转动,然后机械手臂可伸展让读取头在盘片上面进行读写的操作。另外由于单一盘片的容量有限,因此有的硬盘内部会有两个以上的盘片。

盘片上的数据

既然数据都是写入盘片上面,那么盘片上面的数据又是如何写入的呢?其实盘片上面的数据有点像图0-10所示。

整个盘片上面好像有多个同心圆绘制出的饼图,而由圆心以放射状的方式分割出磁盘的最小存储单位,那就是扇区(Sector),在物理组成分面,每个扇区大小为512bytes,这个值是不会改变的。而扇区组成一个圆就成为磁道(Track),如果是在多硬盘上面,在所有盘片上面的同一个磁道可以组成一个柱面(Cylinder),柱面也是一般我们分割硬盘时的最小单位了!

在计算整个硬盘的存储量时,简单的计算公式就是:header数量x每个header负责的柱面数量 x 每个柱面所含有的扇区数量 x 扇区的容量,单位换算为:header x cylinder/header x secter/cylinder x 512bytes/secter,简单的写法如下:Head x Cylinder x Sector x 512bytes。不过要注意的是,一般硬盘制造商在显示硬盘的容量时,大多是以十进制来编号,因此市售的500GB硬盘,理论上仅会有460GB左右的容量。

figure_0028_0016

图0-9 硬盘物理构造

figure_0028_0017

图0-10 盘片上的数据格式

传输接口

由于传输速度的需求提升,目前硬盘与主机系统的连接主要有几种传输接口规格,如图0-11所示。

figure_0028_0018

图0-11 两款硬盘接口(左边为IDE接口,右边为SATA 接口)

IDE接口

如同图0-6中右侧较宽的插槽所示,那就是IDE的接口插槽。IDE接口插槽所使用的排线较宽,每条排线上面可以接两个 IDE 设备,由于可以接两个设备,为了判别两个设备的主/从(Master/Slave)架构,因此这种磁盘驱动器上面需要调整跳针(Jump)成为Master或Slave才行。这种接口的最高传输速度为Ultra 133规格,即每秒理论传输速度可达133MB。

SATA接口

图0-6右下方所示为SATA硬盘的连接接口插槽。我们可以看到该插槽要比IDE接口的小很多,每条SATA连接线仅能接一个SATA设备。SATA接口除了速度较快之外,由于其排线较细小,所以有利于主机壳内部的散热与安装,如图0-12所示。目前SATA已经发展到了第二代,其速度由SATA-1的每秒150MB提升到SATA-2每秒300MB的传输速度,因此目前主流的个人计算机硬盘已经被SATA替代了。SATA的插槽示意图如图0-13所示。

figure_0028_0019

图0-12 IDE接口的排线

figure_0028_0020

图0-13 SATA接口的排线

由于SATA一条排线仅接一块硬盘,所以你不需要调整跳针。不过一块主板上面SATA插槽的数量并不是固定的,且每个插槽都有编号,在连接SATA硬盘与主板的时候,还是需要留意一下。

SCSI接口

另一种常见于工作站等级以上的硬盘传输接口为SCSI接口,这种接口的硬盘在控制器上含有一块处理器,所以除了运转速度快之外,也比较不会耗费CPU资源。在个人计算机上面这种接口的硬盘不常见。

选购

如果你想要增加一块硬盘在你的主机里头时,除了需要考虑你的主板可接受的插槽接口(IDE/SATA)之外,还有什么要注意的呢?

容量

通常首先要考虑的就是容量的问题。目前主流市场硬盘容量已经到达320GB以上,甚至有的厂商已经生产高达2TB的产品。硬盘可能可以算是一种消耗品,要注意重要数据还是得经常备份出来。

缓冲存储器

硬盘上面含有一个缓冲存储器,这个内存主要可以将硬盘内常使用的数据缓存起来,以加速系统的读取性能。通常这个缓冲存储器越大越好,因为缓冲存储器的速度要比数据从硬盘中被找出来快得多。目前主流的产品可达16MB左右的内存大小。

转速

因为硬盘主要是利用主轴马达转动盘片来访问,因此转速的快慢会影响到性能。主流的桌面型计算机硬盘为每分钟7200转,笔记本计算机则是5400转。有的厂商也推出了高达10000转的硬盘,若有高性能的数据访问需求,可以考虑购买高转速硬盘。

运转须知

由于硬盘内部机械手臂上的磁头与盘片的接触是很细微的空间,如果有抖动或者是脏污在磁头与硬盘之间,就会造成数据的损毁或者使硬盘整个损毁。因此,正确使用计算机的方式,应该是在计算机通电之后,就绝对不要移动主机,避免硬盘抖动,而导致整个硬盘数据发生问题。另外,也不要随便将插头拔掉就以为是顺利关机。因为机械手臂必须要归回原位,所以使用操作系统的正常关机方式才能够有比较好的硬盘保养,因为它会让硬盘的机械手臂归回原位。

可能因为环境的关系,计算机内部的风扇常常会卡灰尘而造成一些声响。很多朋友只要听到这种声响都是二话不说的 “用力拍几下机壳”就没有声音了。现在你知道了,这么做的后果常常就是你的硬盘容易坏掉。下次千万不要再这样做嗌!

0.2.5 PCI 适配卡

PCI适配卡的插槽参见图0-6中左下方那个白色的插槽,这种PCI插槽通常会提供多个给用户,如果用户有额外需要的功能卡,就能够安插在这种PCI接口插槽上。

我们在前面显卡的部分稍微谈过PCI接口,事实上有相当多的组件是使用PCI接口传输的,例如网卡、声卡、特殊功能卡等。但由于 PCI Express 规格的发展,很多制造商都往 PCIe 接口开发硬件了。不过还是有很多硬件使用PCI接口,例如大卖场上面常见的网卡就是一个。

目前在个人计算机上面常见到的网卡是一种称为以太网(Ethernet)的规格,目前以太网卡速度轻轻松松就能到达10/100/1000 Mbit/s的速度,但同样速度的以太网卡所支持的标准可能不太一样,因此造成的价差是非常大的。如果想要在服务器主机上面安装新的网卡时,要特别注意标准的区别。

由于各组件的价格一直下降,现在主板上面通常已经集成了相当多的设备组件了。常见集成到主板的组件包括声卡、网卡、USB控制卡、显卡、磁盘阵列卡等。你可以在主板上面发现很多方形的芯片,那通常是一些个别的设备芯片。由于主板已经集成了很多常用的功能芯片,所以现在的主板上面所安插的PCI适配卡就少很多。

0.2.6 主板

主板可以说是整台主机相当重要的一个部分,因为上面我们所谈到的所有组件都是安插在主板上面的。而主板上面负责通信各个组件的就是芯片组,如同图0-4所示,图中我们也可以发现芯片组一般分为北桥与南桥。北桥负责CPU/RAM/VGA等的连接,南桥则负责PCI接口与速度较慢的I/O设备。

由于芯片组负责所有设备的通信,所以事实上芯片组(尤其是北桥)也是一个可能会散发出高热量的组件。因此在主板上面常会发现一些外接的小风扇或者是散热片在这组芯片上面。在图0-6中,技嘉使用较高散热能力的热导管技术,因此你可以发现图中的南桥与北桥上面覆盖着黄铜色的散热片,且连接着数根圆形导管,主要就是为了散热。

芯片组功能

所有的芯片组几乎都是参考CPU的能力去规划的,而CPU能够接受的内存规格也不相同,因此在新购买或升级主机时,CPU、主板、内存与相关的接口设备都需要同时考虑才行。此外,每一种芯片组的功能可能都不太相同,有的芯片组强调的是全功能,因此连显卡、音效、网络等都集成了,在这样的集成型芯片中,你几乎只要购买 CPU、主板、内存再加上硬盘,就能够组装成一台主机了。不过集成型芯片的性能通常比较弱,对于爱玩3D游戏的玩家以及强调高性能运算的主机来说,就不是这么适合了。

至于独立型芯片组虽然可能具有较高的性能,不过你可能必须要额外负担接口设备的花费。例如显卡、网卡、声卡等。但独立型芯片组也有一定程度的好处,那就是你可以随时换接口设备。

设备I/O地址与IRQ中断信道

主板是负责各个计算机组件之间的通信,但是计算机组件实在太多了,有I/O设备及不同的存储设备等,主板芯片组怎么知道如何负责通信呢?这个时候就需要用到所谓的I/O地址与IRQ。

I/O地址有点类似每个设备的门牌号码,每个设备都有它自己的地址,一般来说,不能有两个设备使用同一个I/O地址,否则系统就会不知道该如何运行这两个设备了。而除了I/O地址之外,还有个IRQ中断(Interrupt)。

如果将I/O地址想成是各设备的门牌号码的话,那么IRQ就可以想成是各个门牌连接到邮件中心(CPU)的专门路径。各设备可以通过IRQ中断信道来告知CPU该设备的工作情况,以方便CPU进行工作分配的任务。老式的主板芯片组IRQ只有15个,如果你的周边接口太多时可能就会不够用,这个时候你可以选择将一些没有用到的周边接口关掉,以空出一些 IRQ来给真正需要使用的接口。当然,也有所谓的 sharing IRQ(中断共享)的技术。

CMOS与BIOS

前面内存的地方我们有提过CMOS与BIOS的功能,在这里我们再来强调一下:CMOS主要的功能为记录主板上面的重要参数,包括系统时间、CPU电压与频率、各项设备的I/O地址与IRQ等,由于这些数据的记录要花费电力,因此主板上面才有电池。BIOS 为写入到主板上某一块闪存或EEPROM的程序,它可以在开机的时候执行,以加载CMOS当中的参数,并尝试调用存储设备中的开机程序,进一步进入操作系统当中。BIOS程序也可以修改CMOS中的数据,每种主板调用BIOS设定程序的按键都不同,一般桌上型计算机常见的是使用[Del]按键进入BIOS设置界面。

连接接口设备

主板与各项输出/输入设备的连接主要都是在主机箱的后方,主要有:

PS/2接口:这是常见的键盘与鼠标的接口,不过渐渐有被USB接口替代的趋势。

USB 接口:目前相当流行的一个接口,支持即插即用。主流的 USB 版本为 USB 2.0,这个规格的速度可达 480Mb/s,相对之下的 USB 1.1 仅达 12Mb/s,区别很大,购买接口设备要注意。不然复制一些数据到USB硬盘时,会吐血⋯⋯

声音输出、输入与麦克风:这个是一些圆形的插孔,当你的主板上面有内置音效芯片时,才会有这三个东西。

RJ-45接口:如果有内置网络芯片的话,那么就会有这种接头出现。这种接头有点类似电话接头,不过内部有八根线。接上网线后在这个接头上会有信号灯亮起才对。

其他过时接口:包括早期的用来连接鼠标的九针串行端口(com1),以及接连打印机的25针并列端口(LPT1)等。

我们以技嘉主板的连接接口来看的话,主要有以下这些,如图0-14所示。

figure_0031_0021

图0-14 连接周边接口

0.2.7 电源

除了上面这些组件之外,其实还有一个很重要的组件也要来谈一谈,那就是电源(Power)。在你的机箱内,有个大的铁盒子,上面有很多电源线,那就是电源了。我们的CPU/RAM/主板/硬盘等都需要用电,而近来的计算机组件耗电量越来越高,以前很古老的230W电源已经不够用了,有的系统甚至得要有500W以上的电源才能够运行。

电源的价差非常大。贵一点的300W可以到2000元,便宜一点的300W只要250元不到!怎么差这么多?因为电源的材料不同,供应的稳定度也会差很多。如前所述,电源相当于你的心脏,心脏差的话,活动力就会不足了。所以,稳定度差的电源供应器甚至是造成计算机不稳定的元凶呢。因此,尽量不要使用太差的电源。

能源转换率

电源本身也会吃掉一部分的电力。如果你的主机系统需要 300W 的电力时,因为电源本身也会消耗掉一部分的电力,因此你最好要挑选 400W 以上的电源。电源出厂前会有一些测试数据,最好挑选高转换率的电源。所谓的高转换率指的是输出的功率与输入的功率的比值。意思是说,假如你的主板用电量为250W,但是电源其实已经使用掉320W的电力,则转换率为:250/320=0.78。这个数值越高表示被电源“玩掉”的电力越少,那就符合能源效益了。

连接接口

目前主板与电源供应器的连接接口主要有 20pin 与 24pin 两种规格,购买时也需要考虑你的主板所需要的规格。

0.2.8 选购须知

在购买主机时应该需要进行整体的考虑,很难依照某一项标准来选购的。老实说,如果你的公司需要一台服务器的话,建议不要自行组装,买品牌计算机的服务器比较好。这是因为自行组装的计算机虽然比较便宜,但是每项设备之间的适合性是否完美则有待自行检测。

另外,在性能方面并非仅考虑 CPU 的能力而已,速度的快慢与整体系统的最慢的那个设备有关,如果你是使用最快速的Intel Core 2 Duo,加上最快的DDR II内存,但是配上一个慢慢的过时显卡,那么整体的3D 速度性能将会卡在那个显卡上面。所以,在购买整套系统时,请特别留意需要将全部的接口都考虑进去。尤其是当你想要升级时,要特别注意这个问题,并非所有的旧的设备都适合继续使用的。

系统不稳定的可能原因

除此之外,到底哪个组件特别容易造成系统的不稳定呢?有以下几个常见的系统不稳定的状态。

系统超频:这个行为很不好。不要这么做!

电源不稳:这也是个很严重的问题,当你测试完所有的组件都没有啥大问题时,记得测试一下电源的稳定度。

内存无法负荷:现在的内存质量相差很多,差一点的内存,可能会造成你的主机在忙碌的工作时产生不稳定或死机的现象。

系统过热:“热”是造成电子零件运行不良的主因之一,如果你的主机在夏天容易死机,冬天却还好,那么考虑一下加几个风扇,有助于机箱内的散热,系统会比较稳定。这个问题也是很常见的系统死机的元凶。(鸟哥之前的一台服务器老是容易死机,后来拆开机箱研究后才发现原来是北桥上面的小风扇坏掉了,导致北桥温度太高。后来换掉风扇就稳定多了。)

事实上,要了解每个硬件的详细架构与构造是很难的!这里鸟哥仅是列出一些比较基本的概念而已。另外,要知道某个硬件的制造商是哪个公司时,可以看该硬件上面的信息。举例来说,主板上面都会列出这个主板的开发商与主板的型号,知道这两个信息就可以找到驱动程序了。另外,显卡上面有个小的芯片,上面也会列出显卡厂商与芯片信息。

0.3 数据表示方式

事实上我们的计算机只认识0与1,记录的数据也是只能记录0与1而已,所以计算机常用的数据是二进制的。但是我们人类常用的数值运算是十进制,文字方面则有非常多的语言,常用的语言就有英文、中文(又分繁体与简体中文)、日文等。那么计算机如何记录与显示这些数值/文字呢?就得要通过一系列的转换才可以啦!下面我们就来谈谈数值与文字的编码系统。

0.3.1 数字系统

早期的计算机使用的是利用通电与否的特性的真空管,如果通电就是 1,没有通电就是 0,后来沿用至今,我们称这种只有0/1的环境为二进制,英文称为Binary。所谓的十进制指的是逢十进一位,因此在个位数归为零而十位数写成1。所以所谓的二进制,就是逢二就进一位的意思。

那二进制怎么用呢?我们先以十进制来解释好了。如果以十进制来说,3456的意义为:

figure_0032_0022

特别注意:任何数值的零次方为1,所以100的结果就是1。同样,将这个原理带入二进制的环境中,我们来解释一下1101010的数值转为十进制的话,结果如下:

figure_0032_0023

这样你了解二进制的意义了吗?二进制是计算机基础中的基础。了解了二进制后,八进位、十六进制就依此类推。那么知道二进制转成十进制后,如果有十进制数值转为二进制的环境时,该如何计算?刚才是乘法,现在则是除法就对了。我们同样使用十进制的106转成二进制来测试一下,如图0-15所示。

figure_0032_0024

图0-15 十进制转二进制的方法

最后的写法就如同上面的箭头所示,由最后的数字向上写,因此可得到1101010的数字。这些数字的转换系统是非常重要的,因为计算机的加减乘除都是使用这些机制来处理。有兴趣的朋友可以再参考一下其他计算机概论的书籍中关于1的补码/2的补码等运算方式。

0.3.2 文字编码系统

既然计算机都只有记录0/1而已,甚至记录的数据都是使用byte/bit等单位来记录的,那么文字该如何记录啊?事实上文本文件也是被记录为0与1而已,而这个文件的内容要被取出来查阅时,必须要经过一个编码系统的处理才行。所谓的“编码系统”可以想成是一个“字码对照表”,它的概念如图0-16所示。

figure_0033_0025

图0-16 数据参考编码表的示意图

当我们要写入文件的文字数据时,该文字数据会由编码对照表将该文字转成数字后,再存入文件当中。同样,当我们要将文件内容的数据读出时,也会经过编码对照表将该数字转成对应的文字后再显示到屏幕上。现在你知道为何浏览器上面如果编码写错时会出现乱码了吗?这是因为编码对照表写错,导致对照的文字产生误差之故。

常用的英文编码表为ASCII系统,这个编码系统中,每个符号(英文、数字或符号等)都会占用1B的记录,因此总共会有28=256种变化。至于中文当中的编码系统,目前最常用的就是big5(简体则是gb2312)这个编码表了。每个中文字会占用2B,理论上最多可以有216=65536,即最多可达6万多个中文字。但是因为big5编码系统并非将所有的位都拿来运用成为对照,所以并非可显示这么多的中文字码的。目前big5仅定义了一万三千多个中文字,很多繁体中文利用big5是无法成功显示的,所以才会有造字程序之说。

big5码的中文编码对于某些数据库系统来说是很有问题的,某些字码例如“许、盖、功”等字,由于这几个字的内部编码会被误判为单/双引号,写入时还不成问题,在读出数据的对照表时,经常就会变成乱码。不只中文字,其他非英语系国家也常常会有这样的问题出现。

为了解决这个问题,由国际组织 ISO/IEC 制订了所谓的 Unicode 编码系统,即我们常常称呼的UTF8 或统一码。因为这个编码系统打破了所有国家的不同编码,因此目前应用较多所以各位亲爱的朋友,记得将你的编码系统修订一下。

0.4 软件程序运行

鸟哥在上课时经常会开玩笑地问:“我们知道没有插电的计算机是一堆废铁,那么插了电的计算机是什么?”答案是“一堆会电人的废铁。”这是因为没有软件的运行,计算机的功能就无从发挥了。就好像没有了灵魂的躯体也不过就是行尸走肉,重点在于软件/灵魂。所以下面咱们就得要了解一下“软件”是什么。

一般来说,目前的计算机系统将软件分为两大类,一个是系统软件,一个是应用程序。但鸟哥认为我们还是得要了解一下什么是程序,尤其是机器程序,了解了之后再来探讨一下为什么现今的计算机系统需要“操作系统”。

0.4.1 机器程序与编译程序

我们前面谈到计算机只认识0与1而已,而且计算机最重要的运算与逻辑判断是在CPU内部,而CPU其实是具有微指令集的。因此,我们需要CPU帮忙工作时,就得要参考微指令集的内容,然后编写让CPU读得懂的指令码给CPU执行,这样就能够让CPU运行了。

不过这样的流程有几个很麻烦的地方,包括。

需要了解机器语言:机器只认识0与1,因此你必须要学习直接写给机器看的语言。这个地方相当的难呢!

需要了解所有硬件的相关功能函数:因为你的程序必须要写给机器看,当然你就得要参考机器本身的功能,然后针对该功能去编写程序代码。例如,你要让 DVD 影片能够放映,那就得要参考DVD光驱的硬件信息才行。万一你的系统有比较冷门的硬件,光是参考技术手册可能就会昏倒。

程序不具有可移植性:每个CPU都有独特的微指令集,同样,每个硬件都有其功能函数。因此,你为A计算机写的程序,理论上是没有办法在B计算机上面运行。而且程序代码的修改非常困难。因为是机器码,并不是人类看得懂的程序语言。

程序具有专一性:因为这样的程序必须要针对硬件功能函数来编写,如果已经开发了一支浏览器程序,想要再开发文件管理程序时,还是得从头再参考硬件的功能函数来继续编写,每天都在和“硬件”挑战。为了解决这个问题,计算机科学家设计出一种让人类看得懂的程序语言,然后创造一种“编译器”来将这些人类能够写的程序语言转译成为机器能看懂得机器码,如此一来我们修改与编写程序就变得容易多了!目前常见的编译器有C, C++, Java, Fortran等。机器语言与高级程序语言的差别如图0-17所示。

figure_0034_0026

图0-17 编译器的角色

从上面的图示我们可以看到高级程序语言的程序代码是很容易查看的。鸟哥已将经程序代码(英文)写成中文,这样比较好理解啦!所以这样已经将程序的修改问题处理完毕了。问题是,在这样的环境下面我们还得要考虑整体的硬件系统来设计程序。

举例来说,当你需要将运行的数据写入内存中,你就得要自行分配一个内存块出来让自己的数据能够填上去,所以你还得要了解到内存的地址是如何定位的。

为了要克服硬件方面老是需要重复编写句柄的问题,所以就有操作系统(Operating System, OS)了!什么是操作系统呢?下面就来谈一谈先。

0.4.2 操作系统

如同前面提到的,在早期想要让计算机执行程序就得要参考一堆硬件功能函数,并且要学习机器语言才能够编写程序。同时每次写程序时都必须要重新改写,因为硬件与软件功能不见得都一致。那如果我能够将所有的硬件都驱动,并且提供一个开发软件的参考接口来给工程师开发软件的话,那开发软件不就变得非常简单了?那就是操作系统。

操作系统内核(Kernel)

操作系统其实也是一组程序,这组程序的重点在于管理计算机的所有活动以及驱动系统中的所有硬件。我们刚才谈到计算机没有软件的话只是一堆废铁,那么操作系统的功能就是让CPU可以开始判断逻辑与运算数值,让内存可以开始加载/读出数据与程序代码,让硬盘可以开始被访问,让网卡可以开始传输数据,让所有周边可以开始运转等。总之,硬件的所有操作都必须要通过这个操作系统来完成。

上述的功能就是操作系统的内核了!你的计算机能不能做到某些事情,都与内核有关。只有内核提供了相关功能,你的计算机系统才能帮你完成。举例来说,你的内核并不支持 TCP/IP协议,那么无论你购买了什么样的网卡,这个内核都无法提供网络功能。

但是单有内核我们用户也不知道能作啥事的。因为内核主要在于管控硬件与提供相关的能力(例如网络功能),这些管理的操作是非常重要的,如果用户能够直接使用到内核的话,万一用户不小心将内核程序停止或破坏,将会导致整个系统的崩溃。因此内核程序所放置到内存当中的区块是受保护的,并且开机后就一直常驻在内存当中。

所以整个系统只有内核的话,我们就只能看着已经准备好运行(Ready)的计算机系统,但无法操作它!好像有点望梅止渴的那种感觉。这个时候就需要软件的帮忙了!

系统调用(System Call)

既然我的硬件都是由内核管理,那么如果我想要开发软件的话,自然就得要去参考这个内核的相关功能。如此一来就是从原本的参考硬件函数变成参考内核功能。

为了解决这个问题,操作系统通常会提供一整组的开发接口给工程师来开发软件。工程师只要遵守该开发接口那就很容易开发软件了。举例来说,我们学习C程序语言只要参考C程序语言的函数即可,不需要再去考虑其他内核的相关功能,因为内核的系统调用接口会主动将C程序语言的相关语法转成内核可以了解的任务函数,那内核自然就能够顺利运行该程序了!

如果我们将整个计算机系统的相关软/硬件绘制成图的话,它的关系如图0-18所示。

figure_0035_0027

图0-18 操作系统的角色

计算机系统主要由硬件构成,然后内核程序主要在于管理硬件,提供合理的计算机系统资源分配(包括CPU资源、内存使用资源等),因此只要硬件不同(如x86架构与RISC架构的CPU),内核就得要进行修改才行。而由于内核只会进行计算机系统的资源分配,所以在上面还需要有应用程序的提供,用户才能够操作系统的。

为了保护内核,并且让程序员比较容易开发软件,因此操作系统除了内核程序之外,通常还会提供一整组开发接口,那就是系统调

用层。软件开发工程师只要遵循公认的系统调用参数来开发软件,该软件就能够在该内核上面运行。所以你可以发现,软件与内核有比较大的关系,与硬件关系并不大。硬件也与内核有比较大的关系。至于与用户有关的,那就是应用程序啦!

在定义上,只要能够让计算机硬件正确无误地运行,那就算是操作系统了。所以说,操作系统其实就是内核与其提供的接口工具,不过就如同上面讲的,因为内核缺乏了与用户通信的亲和接口,所以,目前一般我们提到的“操作系统”都会包含内核与相关的用户应用软件。

简单地说,上面的图示可以带给我们下面的概念。

操作系统的内核层直接参考硬件规格写成,所以同一个操作系统程序不能够在不一样的硬件架构下运行。举例来说,个人计算机版的 Windows XP 不能直接在 RISC 架构的计算机下运行。所以你知道为何Windows又分为32位及64位的版本了吧?因为32/64位的CPU指令集不太相同,所以当然要设计不同的操作系统版本了。

操作系统只是在管理整个硬件资源,包括CPU、内存、输入输出设备及系统文件。如果没有其他的应用程序辅助,操作系统只能让计算机主机准备妥当而已!并无法运行其他功能。所以你现在知道为何Windows上面要实现网页影像的运行还需要类似PhotoImpact或Photoshop之类的软件安装了吧?

应用程序的开发都是参考操作系统提供的开发接口,所以该应用程序只能在该操作系统上面运行而已,不可以在其他操作系统上面运行的。现在你知道为何去购买在线游戏的光盘时,光盘上面会明白地写着该软件适合用于哪一种操作系统上了吧?也该知道某些游戏为何不能够在Linux上面安装了吧?

内核功能

既然内核主要是在负责整个计算机系统相关的资源分配与管理,那我们知道其实整部计算机系统最重要的就是CPU与内存,因此,内核至少也要有这些功能的:

系统调用接口(System call interface)

刚才谈过了,这是为了方便程序员可以轻易地通过与内核的通信,将硬件的资源进一步利用,于是需要有这个简易的接口来方便程序开发者。

程序管理(Process control)

总有听过所谓的“多任务环境”吧?一部计算机可能同时间有很多的工作在等待CPU运算处理,内核这个时候必须要能够控制这些工作,让CPU的资源做有效的分配才行。另外,良好的CPU调度机制(就是CPU先运行哪个工作的排列顺序)将会有效加快整体系统性能。

内存管理(Memory management)

控制整个系统的内存管理,这个内存控制是非常重要的,因为系统所有的程序代码与数据都必须要先存放在内存当中。通常内核会提供虚拟内存的功能,当内存不足时可以提供内存交换(swap)的功能。

文件系统管理(Filesystem management)

文件系统的管理,例如数据的输入/输出(I/O)等的工作。还有不同文件格式的支持等,如果你的内核不认识某个文件系统,那么你将无法使用该文件格式的文件。例如:Windows98就不识别NTFS文件格式的硬盘。

设备驱动(Device driver)

就如同上面提到的,硬件的管理是内核的主要工作之一,当然,设备的驱动程序就是内核需要做的事情。好在目前都有所谓的“可加载模块”功能,可以将驱动程序编辑成模块,就不需要重新的编译内核。这个也会在后续的第20章当中提到。

事实上,驱动程序的提供应该是硬件厂商的事情!硬件厂商要推出硬件时,应该要自行参考操作系统的驱动程序开发接口,开发完毕后将该驱动程序连同硬件一同贩卖给用户才对。举例来说,当你购买显卡时,显卡包装盒都会附上一张光盘,让你可以在进入Windows之后进行驱动程序的安装。

操作系统与驱动程序

老实说,驱动程序可以说是操作系统里面相当重要的一环了。不过,硬件可是持续在进步当中的,包括主板、显卡、硬盘等。那么比较晚推出的较新的硬件,例如显卡,我们的操作系统当然就不认识。那操作系统该如何驱动这块新的显卡?为了解决这个问题,操作系统通常会提供一个开发接口给硬件开发商,让他们可以根据这个接口设计可以驱动他们硬件的驱动程序,如此一来,只要用户安装驱动程序后,自然就可以在他们的操作系统上面驱动这块显卡了,如图0-19所示。

figure_0037_0028

图0-19 驱动程序与操作系统的关系

由上图我们可以得到几个小重点:

操作系统必须要能够驱动硬件,如此应用程序才能够使用该硬件功能。

一般来说,操作系统会提供开发接口,让开发商制作他们的驱动程序。

要使用新硬件功能,必须要安装厂商提供的驱动程序才行。

驱动程序是由厂商提供的,与操作系统开发者无关。

所以,如果你想要在某个操作系统上面安装一张新的显卡,那么请要求该硬件厂商提供适当的驱动程序。为什么要强调“适当的驱动程序”呢?因为驱动程序仍然是依据操作系统而开发的,所以,给Windows用的驱动程序当然不能使用于Linux的环境下了。

0.4.3 应用程序

应用程序是参考操作系统提供的开发接口所开发出来的软件,这些软件可以让用户操作,以达到某些计算机的功能利用。举例来说,Office 软件主要是用来让用户办公用的;影像处理软件主要是让用户用来处理影音数据的;浏览器软件主要是让用户用来上网浏览用等。

需要注意的是,应用程序是与操作系统有关系的,如同上面的图示当中的说明。因此,如果你想要购买新软件,请务必参考软件上面的说明,看看该软件是否能够支持你的操作系统。举例来说,如果你想要购买在线游戏光盘,务必参考一下该光盘是否支持你的操作系统,例如是否支持 Windows XP/Windows Vista/MAC/Linux 等。不要购买了才发现该软件无法安装在你的操作系统上。

我们拿常见的微软公司的产品来说明。你知道 Windows XP, Office 2007 之间的关系了吗?

Windows XP 是一套操作系统,它必须先安装到个人计算机上面,否则计算机无法开机运行。

Windows 98 与 Windows XP 是两套不同的操作系统,所以能在 Windows 98 上安装的软件不见得可在 Windows XP 上安装。

Windows XP 安装好后,就只能拥有很少的功能,并没有办公室软件。

Office 2007 是一套应用程序,要安装前必须要了解它能在哪些操作系统上面运行。

0.5 重点回顾

计算机的定义为:“接受用户输入指令与数据,经由中央处理器的数据与逻辑单元运算处理后,以产生或存储成有用的信息”。

计算机的五大单元包括输入单元、输出单元、CPU内部的控制单元、算术逻辑单元与内存五大部分。

数据会流进/流出内存是CPU所发布的控制命令,而CPU实际要处理的数据则完全来自于内存。

CPU依设计理念主要分为精简指令集(RISC)与复杂指令集(CISC)系统。

关于CPU的频率部分,外频指的是CPU与外部组件进行数据传输时的速度,倍频则是CPU内部用来加速工作性能的一个倍数,两者相乘才是CPU的频率速度。

一般主板芯片组分为北桥与南桥,北桥的总线称为系统总线,因为是内存传输的主要信道,所以速度较快。南桥就是所谓的输入/输出(I/O)总线,主要在于连系硬盘、USB、网卡等接口设备。

北桥所支持的频率我们称为前端总线速度(Front Side Bus, FSB),而每次传送的位数则是总线宽度。

CPU 每次能够处理的数据量称为字组大小(word size),字组大小依据 CPU 的设计而有 32位与 64位之分。我们现在所称的计算机是 32或 64位主要是依据这个 CPU解析的字组大小而来的!

个人计算机的内存主要组件为动态随机访问内存(Dynamic Random Access Memory, DRAM),至于CPU内部的第二层缓存则使用静态随机访问内存(Static Random Access Memory, SRAM)。

BIOS(Basic Input Output System)是一套程序,这套程序是写死到主板上面的一个内存芯片中,这个内存芯片在没有通电时也能够将数据记录下来,那就是只读存储器(Read Only Memory, ROM)。

显卡的规格有PCI/AGP/PCIe,目前的主流为PCIe接口。

硬盘是由盘片、机械手臂、磁头与主轴马达所组成的,其中盘片的组成为扇区、磁道与柱面。

操作系统(Operating System, OS)其实也是一组程序,这组程序的重点在于管理计算机的所有活动以及驱动系统中的所有硬件。

计算机主要以二进制作为单位,常用的磁盘容量单位为 Byte,其单位换算为 1Byte = 8bit。

操作系统仅在于驱动与管理硬件,而要使用硬件时,就得需要通过应用软件或者是 shell 的功能,来调用操作系统操纵硬件工作。目前,操作系统除了上述功能外,通常已经包含了日常工作所需要的应用软件在内了。

0.6 本章习题

实践题部分

假设你不知道你的主机内部的各项组件数据,请拆开你的主机箱,将内部所有的组件拆开,并且依序列出:

CPU的厂牌、型号、最高频率;

内存的容量、接口(DDR/DDR II 等);

显卡的接口(AGP/PCIe/内置)与容量;

主板的厂牌、南北桥的芯片型号、BIOS的厂牌、有无内置的网卡或声卡等;

硬盘的连接接口(IDE/SATA等)、硬盘容量、转速、缓冲存储器容量等;

然后再将它组装回去。注意,拆装前务必先取得你主板的说明书,因此你可能必须要上网查询上述的各项数据。

假设你不想要拆开主机箱,但想了解你的主机内部各组件的信息时,该如何是好?如果使用的是 Windows 操作系统,可使用 CPU-Z(http://www.cpuid. com/cpuz.php)这套软件,如果是Linux环境下,可以使用cat/proc/cpuinfo及lspci命令来查阅各项组件的型号。

依据本章末的扩展阅读链接,自行搜寻出 BIOS 的主要任务,以及目前在个人计算机上面常见的BIOS制造商有哪几家。