原文:http://linux.vbird.org/linux_basic/0105computers.php#computer_hw
注意:
| 文中的: 主记忆体 : **内存**; 快取:缓存; 硬体、软体:硬件、软件; 作业系统:操作系统; 系统呼叫:系统调用; 网路:网络; 界面:一般指 接口; 韧体**(firmware):固件;(是一种嵌入在硬件中的软件) 支援:支持; 伫列:队列; 硬体:硬件; 变数:变量; 字元:字符;** |
|---|
0.1 什么是电脑?
所谓的电脑就是一种计算机,而计算机其实是:『接受使用者输入指令与数据,经由中央处理器的数学与逻辑单元运算处理后,以产生或储存成有用的信息』。
0.1.1 电脑硬件的五大单元
关于电脑的硬体组成部分,其实你可以观察你的桌上型电脑来分析一下,依外观来说这家伙主要可分为三部分,分别是:
- 输入单元:包括键盘、滑鼠、读卡机、扫描器、手写板、触控萤幕等等一堆;
- 主机部分:这个就是系统单元,被主机机壳保护住了,里面含有一堆板子、CPU 与内存等;
- 输出单元:例如屏幕、打印机等等
电脑有以下五个部分组成:
- CPU(中央处理器(Central Processing Unit,CPU))
- 内存
- 外部存储设备(硬盘等)
- 输入设备
- 输出设备
画成图,如下所示:
其中:
- CPU:主机部分最主要的部分,CPU是一个具有特定功能的芯片,里面含有微指令集。
由于CPU工作主要在于:管理和运算,所以,在CPU内部又可分为两个部分:算术逻辑单元 与 控制单元。
- 算术逻辑单元:主要负责程序的运算与逻辑判断;
- 控制单元:主要在协调周边各个元件与各个单元件的工作。
- 内存:CPU读取的数据都是从内存中来的。而内存中的数据则树丛输入设备中传输进来的。CPU处理完的数据也需要写回内存当中,最后数据才从内存传输到输出设备中。
0.1.2 CPU的架构
CPU 其实内部已经含有一些微指令,我们所使用的软体都要经过CPU 内部的微指令集来达成才行。那这些指令集的设计主要又被分为两种设计理念,这就是目前世界上常见到的两种主要CPU 架构, 分别是:精简指令集(RISC) 与复杂指令集(CISC) 系统。
- 精简指令集
- 这种CPU 的设计中,微指令集较为精简,每个指令的执行时间都很短,完成的动作也很单纯,指令的执行效能较佳;
- 但是若要做复杂的事情,就要由多个指令来完成。
常见的RISC 微指令集CPU 主要例如甲骨文(Oracle) 公司的SPARC 系列、 IBM 公司的Power Architecture (包括PowerPC) 系列、与安谋公司(ARM Holdings) 的ARM CPU 系列等。 目前世界上使用范围最广的CPU可能就是ARM这种架构的呢!
- 复杂指令集
- 与RISC不同的,CISC在微指令集的每个小指令可以执行一些较低阶的硬体操作,指令数目多而且复杂, 每条指令的长度并不相同。
- 因为指令执行较为复杂所以每条指令花费的时间较长, 但每条个别指令可以处理的工作较为丰富。
常见的CISC微指令集CPU主要有AMD、Intel、VIA等的x86架构的CPU。
由于AMD、Intel、VIA所开发出来的x86架构CPU被大量使用于个人电脑(Personal computer)用途上面,因此,个人电脑常被称为x86架构的电脑!那为何称为x86架构( 注8 )呢?这是因为最早的那颗Intel发展出来的CPU代号称为8086,后来依此架构又开发出80286, 80386…,因此这种架构的CPU就被称为x86架构了。
在2003年以前由Intel所开发的x86架构CPU由8位元升级到16、32位元,后来AMD依此架构修改新一代的CPU为64位元, 为了区别两者的差异,因此64位元的个人电脑CPU又被统称为x86_64的架构!
| 注意: 所谓的位元(位):**指的是CPU一次资料读取的最大量!64位元CPU代表CPU一次可以读写64bits这么多的资料,**32位元CPU则是CPU一次只能读取32位元的意思。因为CPU读取资料量有限制,因此能够从内存中读写的资料也就有所限制。所以,一般32位元的CPU所能读写的最大资料量,大概就是4GB左右。(2^32 bit= 4GB) |
|---|
0.1.3 其他部分
五大单元中最重要的控制、算术逻辑被整合到CPU 的封装中,但系统当然不可能只有CPU 啊!
系统单元:如图0.1.2所示,系统单元包括CPU与内存及主机板相关元件。而主机板上头其实还有很多的连接界面与相关的介面卡,包括鸟哥近期常使用的PCI-E 10G网路卡、磁碟阵列卡、还有显示卡等等。尤其是显示卡,这东西对于玩3D游戏来说是非常重要的一环,他与显示的精致度、色彩与解析度都有关系。
记忆单元:包括内存(RAM)与存储设备。(存储设备:有硬盘、软盘、光碟、磁带等。)
输入、输出单元:同时涵盖输入输出的设备最常见的大概就是触控式屏幕了。至于单纯的输入设备包括前面提到的键盘滑鼠之外,目前的体感装置也是重要的输入设备喔!至于输出设备方面,除了萤幕外,印表机、音效喇叭、HDMI电视、投影机、蓝芽耳机等等,都算!
0.1.4 运作流程

CPU=脑袋瓜子:每个人会作的事情都不一样(微指令集的差异),但主要都是透过脑袋瓜子来进行判断与控制身体各部分的活动;
内存=脑袋中放置正在被思考的资料的区块:在实际活动过程中,我们的脑袋瓜子需要有外界刺激的资料(例如光线、环境、语言等)来分析,那这些互动资料暂时存放的地方就是主内存,主要是用来提供给脑袋瓜子判断用的资讯。
硬盘=脑袋中放置回忆的记忆区块:与内存不同。内存是提供脑袋目前要思考与处理的资讯,但是有些生活琐事或其他没有要立刻处理的事情,就当成回忆先放置到脑袋的记忆深处吧!那就是硬盘!主要目的是将重要的资料记录起来,以便未来将这些重要的经验再次的使用;
主机板=神经系统:好像人类的神经一样,将所有重要的元件连接起来,包括手脚的活动都是脑袋瓜子发布命令后,透过神经(主机板)传导给手脚来进行活动啊!
各项周边设备=人体与外界沟通的手、脚、皮肤、眼睛等:就好像手脚一般,是人体与外界互动的重要关键!
显示卡=脑袋中的影像:将来自眼睛的刺激转成影像后在脑袋中呈现,所以显示卡所产生的资料来源也是CPU控制的。
- 电源供应器(Power)=心脏:所有的元件要能运作得要有足够的电力供给才行!这电力供给就好像心脏一样,如果心脏不够力, 那么全身也就无法动弹的!心脏不稳定呢?那你的身体当然可能断断续续的~不稳定!
0.1.6 电脑上面常用的计算单位(容量、速度等)
容量单位
电脑对数据的判断主要依据有没有通电来记录信息,所以理论上对于每一个纪录单位而言,它只认识0 与1 而已。0/1 这个二进位的的单位我们称为bit。但bit 实在太小了,所以在储存资料时每份简单的资料都会使用到8 个bits 的大小来记录,因此定义出byte 这个单位,他们的关系为:
1 Byte = 8 bits , 1KB = 1024 Byte
底下就列出常见的单位与进位制对应:
| 进位制 | Kilo | Mega | Giga | Tera | Peta | Exa | Zetta |
|---|---|---|---|---|---|---|---|
| 二进位 | 1024 | 1024K | 1024M | 1024G | 1024T | 1024P | 1024E |
| 十进位 | 1000 | 1000K | 1000M | 1000G | 1000T | 1000P | 1000E |
一般的,文件容量使用的是二进位的方式,所以1 GBytes 的档案大小实际上为:1024x1024x1024 Bytes 这么大!速度单位则常使用十进位,例如1GHz 就是1000x1000x1000 Hz 的意思。
| 注意: 其实,若要区分2 进位还是10 进位的容量,目前也经常使用GB 与GiB 之类的方式来辨别,GB 为10 进位,加上i 成为GiB 则是2 进位这样!所有的容量都可以这样处理的!包括KiB, TiB 等等喔! |
|---|
速度单位
- CPU的运算速度常使用MHz 或者是GHz 之类的单位,这个Hz 其实就是秒分之一(
/s)。 - 而在网络传输方面,由于网路使用的是 bit 为单位,因此网络常使用的单位为Mbps 是Mbits per second,亦即是每秒多少Mbit。》》MB/S
例如:大家常听到的20M/5M 光纤传输速度,如果转成档数据容量字节的byte 时,其实理论最大传输值为:每秒2.5Mbyte/ 每秒625Kbyte的下载/上传速度喔!
| 注意1:
- Mb与MB的区别?
- Mb(全称为Mbps)这是电信部门衡量网络带宽的单位,意思是兆比特位每秒(Mbits per second);
- 而MB(Mbytes)是电脑文件容量的单位兆字节。
所以,对于网络传输的20M/5M 光纤传输速度,在转换为文件两的byte时,转换方式为:
- 20/8=2.5MB,从而可知,下载速度:每秒2.5Mbyte = 2.5MB/S
- 5/8=0.625MB=625KB,从而可知,上传速度:每秒625Kbyte = 625KB/S
|
| —- |
| 注意2: - 一个500GB的硬盘,格式化后却只剩下460GB。为什么? - 因为一般硬盘的制造商会使用十进制的单位,所以:500GByte代表:50010001000*1000Byte,但转换成的数据容量单位使用二进制时(使用1024为底)时,就变成了:466GB左右的容量了。 |
|---|
0.2 个人电脑架构与相关设备元件
一般消费者常说的电脑通常指的就是x86的个人电脑架构,因此底下以目前(2015)相对较新的Intel 主机板架构来谈谈:

图0.2.1、Intel芯片架构
由于主机板是连结各元件的一个重要项目,因此在主机板上面沟通各部元件的芯片组设计优劣,就会影响效能不少喔!早期的晶片组通常分为两个桥接器来控制各元件的沟通:
- 北桥:负责连结速度较快的CPU、内存与显示卡界面等元件;
- 南桥:负责连接速度较慢的装置介面,包括硬盘、USB、网卡等等。
由于北桥最重要的就是CPU与内存之间的桥接,因此目前的主流架构中,大多将北桥内存控制器整合到CPU封装当中了。所以上图你只会看到CPU而没有看到以往的北桥芯片喔!
| Tips
早期晶片组分南北桥,北桥可以连接CPU、内存与显示卡。只是CPU 要读写到主记忆体的动作,还需要北桥的支援,也就是CPU 与主记忆体的交流, 会瓜分掉北桥的总可用频宽,真浪费!
因此目前将记忆控制器整合到CPU 后,CPU与主记忆体之间的沟通是直接交流,速度较快之外,也不会消耗更多的频宽! | | —- |

图0.2.2、ASUS 主机板(图片为华硕公司所有)
上述的图片中,主机板上面设计的插槽主要有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每秒钟可以进行的工作次数。 举例来说,Intel的i7-4790 CPU时脉为3.6GHz,表示这颗CPU在一秒内可以进行3.6x10 次工作,每次工作都可以进行少数的指令运作之意。
| Tips
注意,不同的CPU之间不能单纯的以时脉来判断运算效能喔!这是因为每颗CPU的微指令集不相同,架构也不见得一样,可使用的第二层快取及其计算机制可能也不同, 加上每次时脉能够进行的工作指令数也不同!所以,时脉目前仅能用来比较同款CPU的速度! | | —- |
CPU的工作时脉:外频与倍频
早期的CPU 架构主要透过北桥来连结系统最重要的CPU、主内存与显示卡装置。因为所有的设备都得掉透过北桥来连结,因此每个设备的工作频率应该要相同。
于是就有所谓的前端汇流排(FSB) 这个东西的产生。但因为CPU 的运算速度比其他的设备都要来的快,又为了要满足FSB 的频率,因此厂商就在CPU 内部再进行加速, 于是就有所谓的外频与倍频了。
在早期的CPU设计中,所谓的:
- 外频**:**指的是CPU与外部元件进行数据传输时的速度;
- 倍频**:**则是CPU内部用来加速工作效能的一个倍数;
两者相乘才是CPU的**时脉**速度。
例如Intel Core 2 E8400的内频(时脉)为3.0GHz,而外频是333MHz,因此倍频就是9倍啰!(3.0G=333M x 9,其中1G=1000M)
| Tips 所谓的超频指的是:将CPU的倍频或者是外频透过主机板的设定功能更改成较高频率的一种方式。但因为CPU的倍频通常在出厂时已经被锁定而无法修改,因此较常 被超频的为外频。 |
|---|
32位与64位的CPU与汇流排『宽度』
CPU的各项数据通通得要来自于主内存。因此,如果主内存能提供给CPU的资料量越大的话,当然整体系统的效能应该也会比较快!那如何知道内存能提供的数据量呢?
- 此时还是得要藉由 CPU内的内存控制芯片 与 内存间的传输速度『前端汇流排速度(Front Side Bus, FSB)来说明。
与CPU的时脉类似的,主内存也是有其工作的时脉,这个时脉限制还是来自于CPU内的内存控制器所决定的。
以图0.2.1为例, CPU内建的内存控制晶片 对 主内存的工作时脉最高可达到1600MHz。这只是工作时脉(每秒几次)。
一般来说,每次时脉能够传输的资料量,大多为64位,这个64位就是所谓的『宽度』了!
因此,在图0.2.1这个系统中,CPU可以从内存中取得的最快频宽就是1600MHz 64bit = 1600MHz 8 bytes = 12.8Gbyte/s。
与汇流排宽度相似的,CPU每次能够处理的资料量称为字组大小(word size),字组大小依据CPU的设计而有32位与64位。我们现在所称的电脑是32或64位元主要是依据这个CPU解析的字组大小而来的!
早期的32位元CPU中,因为CPU每次能够解析的资料量有限,因此由内存传来的资料量就有所限制了。这也导致32位的CPU最多只能支持最大到4GBytes的内存。(232 bit= 4 GB)
| 汇流排(Bus)是指电脑组件间规格化的交换资料(data)的方式,即以一种通用的方式为各组件提供资料传送和控制逻辑。
从另一个角度来看,如果说主机板(Mother Board)是一座城市,那么汇流排就像是城市里的公共汽车(bus),能按照固定行车路线,传输来回不停运作的位元(bit )。这些线路在同一时间内都仅能负责传输一个位元。因此,必须同时采用多条线路才能传送更多资料,而汇流排可同时传输的资料数就称为**宽度**(width),以位元为单位,汇流排宽度愈大,传输效能就愈佳。汇流排的频宽(即单位时间内可以传输的总资料数)为:汇流排频宽=频率×宽度(Bytes/sec)。
总线(Bus)是指计算机组件间规范化的交换数据(data)的方式,即以一种通用的方式为各组件提供数据传送和控制逻辑。从另一个角度来看,如果说主板(Mother Board)是一座城市,那么总线就像是城市里的公共汽车(bus),能按照固定行车路线,传输来回不停运作的比特(bit)。这些线路在同一时间内都仅能负责传输一个比特。因此,必须同时采用多条线路才能发送更多数据,而总线可同时传输的数据数就称为宽度(width),以比特为单位,总线宽度愈大,传输性能就愈佳。总线的带宽(即单位时间内可以传输的总数据数)为:总线带宽 = 频率×宽度(Bytes/sec)。
从定义上看:汇流排 **就是** 总线。 | | —- |
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 至少都是两个核心以上的多核心CPU 了,但是Intel 还有个很怪的东西,叫做CPU 的超线程(Hyper-Threading) 功能!
在每一个CPU 内部将重要的寄存器(register) 分成两群, 而让程序分别使用这两群寄存器。也就是说,可以有两个程序『同时竞争CPU 的运算单元』,而非透过操作的多工切换!这一过程就会让CPU 好像『同时有两个核心』的模样!因此,虽然大部分i7 等级的CPU 其实只有四个实体核心,但透过HT 的机制, 则作业系统可以抓到八个核心!并且让每个核心逻辑上分离,就可以同时运作八个程序了。
0.2.2 内存
个人电脑的主内存主要元件为动态随机存取内存(Dynamic Random Access Memory, DRAM),随机存取内存只有在通电时才能记录与使用,断电后资料就消失了。因此我们也称这种RAM为挥发性内存。
DRAM根据技术的更新又分好几代,而使用上较广泛的有所谓的SDRAM与DDR SDRAM两种。
这两种内存的差别除了在于脚位与工作电压上的不同之外,
- DDR是所谓的双倍数据传送速度(Double Data Rate),他可以在一次工作周期中进行两次资料的传送,感觉上就好像是CPU的倍频啦!所以传输频率方面比SDRAM还要好。新一代的PC大多使用DDR内存了。
下表列出SDRAM与DDR SDRAM的型号与频率及频宽之间的关系。( 注11 )
| SDRAM/DDR | 型号 | 资料宽度(bit) | 内部时脉(MHz) | 频率速度 | 频宽(频率x宽度) |
|---|---|---|---|---|---|
| SDRAM | PC100 | 64 | 100 | 100 | 800MBytes/sec |
| SDRAM | PC133 | 64 | 133 | 133 | 1064MBytes/sec |
| DDR | DDR-266 | 64 | 133 | 266 | 2.1GBytes/sec |
| DDR | DDR-400 | 64 | 200 | 400 | 3.2GBytes/sec |
| DDR | DDR2-800 | 64 | 200 | 800 | 6.4GBytes/sec |
| DDR | DDR3-1600 | 64 | 200 | 1600 | 12.8GBytes/sec |
DDR SDRAM又依据技术的发展,有DDR, DDR2, DDR3, DDR4等等,其中,DDR2 的频率倍数则是4 倍而DDR3 则是8 倍喔!目前鸟哥用到伺服器等级的内存,已经到DDR4 了耶!超快超快!
多通道设计
但传统的汇流排宽度一般大约仅达64位,为了要加大这个宽度,因此晶片组厂商就将两个内存汇整在一起, 如果一支内存可达64位,两支内存就可以达到128位了,这就是双通道的设计理念。
要启用双通道的功能你必须要安插两支(或四支)主内存,这两支内存最好连型号都一模一样比较好, 这是因为启动双通道内存功能时,资料是同步写入/读出这一对主内存中,如此才能够提升整体的频宽啊!所以当然除了容量大小要一致之外,型号也最好相同啦!
你有没有发现图0.2.2、华硕主机板示意图上那四根记忆体插槽的颜色呢?是否分为两种颜色,且两两成对?为什么要这样设计?答出来了吗?是啦!这种颜色的设计就是为了双通道来的!要启动双通道的功能时,你必须要将两根容量相同的主记忆体插在相同颜色的插槽当中喔!
DRAM与SRAM
除了主内存之外,事实上整部个人电脑当中还有许许多多的记忆体存在喔!最为我们所知的就是CPU内的第二层快取内存。
我们现在知道CPU的资料都是由主内存提供,但CPU到主内存之间还是得要透过内存控制器啊!如果某些很常用的程式或数据可以放置到CPU内部的话,那么CPU资料的读取就不需要跑到主记忆体重新读取了!这对于效能来说不就可以大大的提升了?这就是第二层快取的设计概念。第二层快取与主记忆体及CPU的关系如下图所示:

图0.2.3、记忆体相关性
因为第二层快取(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)是一套程式,这套程式是写死到主机板上面的一个记忆体晶片中,这个记忆体晶片在没有通电时也能够将资料记录下来,那就是唯读记忆体(Read Only Memory, ROM)。ROM是一种非挥发性的记忆体。另外,BIOS对于个人电脑来说是非常重要的,因为他是系统在开机的时候首先会去读取的一个小程式!
另外,固件(firmware)( 注12 )很多也是使用ROM来进行软件的写入的。固件像软件一样也是一个被电脑所执行的程序,然而他是对于硬件内部而言更加重要的部分。例如BIOS就是一个固件, BIOS虽然对于我们日常操作电脑系统没有什么太大的关系,但是他却控制着开机时各项硬体参数的取得!所以我们会知道很多的硬件上头都会有ROM来写入固件这个软件。
固件就是绑在硬件上面的控制软件!
0.2.3 显卡
显卡又称为VGA(Video Graphics Array),他对于图形影像的显示扮演相当关键的角色。一般对于图形影像的显示重点在于解析度与色彩深度,因为每个图像显示的颜色会占用掉记忆体,因此显卡上面会有一个存储的容量,这个显卡存储容量将会影响到你的萤幕解析度与色彩深度的喔!
除了显示卡记忆体之外,现在由于三度空间游戏(3D game)与一些3D动画的流行,因此显示卡的『运算能力』越来越重要。一些3D的运算早期是交给CPU去运作的,但是CPU并非完全针对这些3D来进行设计的,而且CPU平时已经非常忙碌了呢!所以后来显示卡厂商直接在显示卡上面嵌入一个3D加速的晶片,这就是所谓的**GPU**称谓的由来。
**
0.2.4 硬盘与储存设备
硬碟依据桌上型与笔记型电脑而有分为3.5寸及2.5寸的大小。我们以3.5吋的桌上型电脑使用硬碟来说明。
硬盘的物理组成
在硬碟盒里面其实是由许许多多的圆形磁碟盘、机械手臂、磁碟读取头与主轴马达所组成的,整个内部如同下图所示:
图0.2.4、硬碟物理构造(图片取自维基百科)
实际的数据都是写在具有磁性物质的磁碟盘上头,而读写主要是透过在机械手臂上的读取头(head)来达成。实际运作时,主轴马达让磁碟盘转动,然后机械手臂可伸展让读取头在磁碟盘上头进行读写的动作。另外,由于单一磁碟盘的容量有限,因此有的硬碟内部会有两个以上的磁碟盘喔!
磁碟盘上的资料
其实磁碟盘上头的数据有点像下面的图示所示:
由于磁碟盘是圆的,并且透过机器手臂去读写资料,磁碟盘要转动才能够让机器手臂读写。因此,通常资料写入当然就是以圆圈转圈的方式读写啰!
所以,当初设计就是在类似磁碟盘同心圆上面切出一个一个的小区块,这些小区块整合成一个圆形,让机器手臂上的读写头去存取。
- 磁轨(track)(也叫:磁道):每一个同心圆都是一个轨道。磁碟的最小物理储存单位。
另外,原本硬碟的磁区都是设计成512byte 的容量,但因为近期以来硬碟的容量越来越大,为了减少资料量的拆解,所以新的高容量硬碟已经有4Kbyte 的磁区设计!
- 磁区(sector)(也叫:扇区):每一条轨道都被划分成段,这一段段的就是扇区。
- 簇(cluster):多个扇区组成一个簇。
- 柱面:由多个盘片的相同扇区连接,形成的柱面。如下图所示:

柱面
传输接口
传统磁碟界面包括有SATA, SAS, IDE 与SCSI 等等。若考虑外接式磁碟,那就还包括了USB, eSATA 等等界面喔!不过目前IDE 已经被SATA 取代,而SCSI 则被SAS 取代,因此我们底下将仅介绍SATA, USB 与SAS 界面而已。
详情请看:http://linux.vbird.org/linux_basic/0105computers.php#pc_hd_face
固态硬碟(Solid State Disk, SSD)
传统硬碟有个很致命的问题,就是需要驱动马达去转动磁碟盘~这会造成很严重的磁碟读取延迟!想想看,你得要知道资料在哪个磁区上面,然后再命令马达开始转, 之后再让读取头去读取正确的资料。另外,如果资料放置的比较离散(磁区分布比较广又不连续),那么读写的速度就会延迟更明显~
后来就有厂商拿快闪存储器去制作成高容量的设备,这些设备的连接界面也是透过SATA 或SAS,而且外型还做的跟传统磁碟一样!所以, 虽然这类的设备已经不能称为是磁碟(因为没有读写头与磁碟盘啊!都是记忆体!)。但是为了方便大家称呼,所以还是称为磁碟!只是跟传统硬盘(也就是 机械硬盘)(Hard Disk Drive, HDD) 不同, 就称为固态硬碟(Solid State Disk 或Solid State Driver, SSD)**。
- 固态硬碟最大的好处是,它没有马达不需要转动,而是透过记忆体直接读写的特性,因此除了没资料延迟且快速之外,还很省电!
- 坏处:早期的SSD有个很重要的致命伤,就是这些快闪记忆体有『写入次数的限制』在,因此通常SSD的寿命大概两年就顶天了!所以资料存放时,需要考虑到备份或者是可能要使用RAID的机制来防止SSD的损毁( 注20 )!
缓存(cache)
缓存可以存储在硬盘内、内存中、设置在CPU中。缓存是在计算机识别出需要快速、频繁访问的信息时使用的。
0.2.6 主机板
设备I/O位址与IRQ中断通道
主机板是负责各个电脑元件之间的沟通,但是电脑元件实在太多了,有输出/输入/不同的储存装置等等, 主机板晶片组怎么知道如何负责沟通呐?这个时候就需要用到所谓的I/O位址与IRQ啰!
- I/O位址:有点类似每个装置的门牌号码,每个装置都有他自己的位址,一般来说,不能有两个装置使用同一个I/O位址, 否则系统就会不晓得该如何运作这两个装置了。
- IRQ中断(Interrupt):IRQ就可以想成是各个门牌连接到邮件中心(CPU)的专门路径。各装置可以透过IRQ中断通道来告知CPU该装置的工作情况,以方便CPU进行工作分配的任务。
CMOS与BIOS
- CMOS**:**主要的功能为记录主机板上面的重要参数,包括系统时间、CPU电压与频率、各项设备的I /O位址与IRQ等,由于这些数据的记录要花费电力,因此主机板上面才有电池。
- BIOS:为写入到主机板上某一块flash或EEPROM的程式,他可以在开机的时候执行,以载入CMOS当中的参数,并尝试呼叫储存装置中的开机程序,进一步进入操作系统当中。
连接周边设备的介面(接口)
主机板与各项输出/输入设备的连结主要都是在主机机壳的后方,主要有:
- PS/2介面:这原本是常见的键盘与滑鼠的介面,不过目前渐渐被USB介面取代,甚至较新的主机板可能就不再提供PS/2界面了;
- USB介面:通常只剩下USB 2.0与USB 3.0,为了方便区分,USB 3.0为蓝色的插槽颜色喔!
- 声音输出、输入与麦克风:这个是一些圆形的插孔,而你的主机板上面必须有内建音效晶片时,才会有这三个东西;
- RJ-45网络头:如果有内建网路晶片的话,那么就会有这种接头出现。这种接头有点类似电话接头,不过内部有八蕊线喔!接上网路线后在这个接头上会有灯号亮起才对!
- HDMI:如果有内建显示晶片的话,可能就会提供这个与萤幕连接的界面了!这种介面可以同时传输声音与影像,目前也是电视机萤幕的主流连接介面喔!
我们以华硕主机板的连结介面来看的话,主要有这些:

图0.2.7、连接周边介面(接口)
0.2.7 电源供应器
在你的机壳内,有个大大的铁盒子,上头有很多电源线会跑出来,那就是电源供应器了。
能源转换率
电源供应器本身也会吃掉一部份的电力的!如果你的主机系统需要300W的电力时,因为电源供应器本身也会消耗掉一部份的电力,因此你最好要挑选400W以上的电源供应器。
电源供应器出厂前会有一些测试数据,最好挑选高转换率的电源供应器。所谓的高转换率指的是『输出的功率/输入的功率』。
意思是说,假如你的主机板用电量为250W,但是电源供应器其实已经使用掉320W的电力,则转换率为:250/320=0.78的意思。这个数值越高表示被电源供应器『玩掉』的电力越少,那就符合能源效益了!
0.3 数据表示方式
0.3.1 数字系统
早期的电脑使用的是利用通电与否的特性的真空管,如果通电就是1,没有通电就是0, 后来沿用至今,我们称这种只有0/1的环境为二进位制,英文称为binary的。
我们来解释一下1101010的二进制数值转为十进位的话,结果如下:
1101010 =1x2 + 1x2 + 0x2 + 1x2 + 0x2 + 1x2 + 0x2
= 64 + 32 + 0x16 + 8 + 0x4 + 2 + 0x1 = 106
那如果有十进位数值转为二进位的环境时,该如何计算?刚刚是乘法,现在则是除法就对了!我们同样的使用十进位的106转成二进位来测试一下好了:
图0.3.1、十进位转二进位的方法
0.3.2 文字编码系统
事实上文字文件也是被记录为0与1而已,而这个档案的内容要被取出来查阅时,必须要经过一个编码系统的处理才行。所谓的『编码系统』可以想成是一个『字码对照表』,他的概念有点像底下的图示:

图0.3.2、资料参考编码表的示意图
- 当我们要写入档案的文字资料时,该文字资料会由编码对照表将该文字转成数字后,再存入档案当中。
- 当我们要将档案内容的资料读出时,也会经过编码对照表将该数字转成对应的文字后,再显示到萤幕上。
现在你知道为何浏览器上面如果编码写错时,会出现乱码了吗?这是因为编码对照表写错, 导致对照的文字产生误差之故啦!
- 常用的英文编码表为ASCII系统,这个编码系统中,每个符号(英文、数字或符号等)都会占用1bytes的记录,因此总共会有2 =256种变化。
- 至于中文字当中的编码系统早期最常用的就是big5这个编码表了。每个中文字会占用2bytes,理论上最多可以有2 =65536,亦即最多可达6万多个中文字。
- 但是因为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.4.1、编译器的角色
从上面的图示我们可以看到高级程序语言的代码是很容易察看的!所以这样已经将程序的修改问题处理完毕了。问题是,在这样的环境底下我们还是得要考量整体的硬件系统来设计程序 。
- 举例来说,当你需要将运作的资料写入记忆体中,你就得要自行分配一个记忆体区块出来让自己的资料能够填上去, 所以你还得要了解到记忆体的位址是如何定位的,啊!怎么写程序这么麻烦啊!
为了要克服硬体方面老是需要重复撰写控制码的问题,所以就有操作**系统(Operating System, OS)**的出现了!什么是操作系统呢?底下就来谈一谈先!
0.4.2 操作系统
在早期想要让电脑执行程式就得要参考一堆硬件功能函数,并且学习机器语言才能够编写程序。同时每次写程式时都必须要重新改写,因为硬件与软件功能不见得都一致之故。
那如果我能够将所有的硬件都驱动, 并且提供一个开发软件的参考接口来给工程师开发软体的话,那开发软件体不就变的非常的简单了?那就是操作系统啦!
操作系统核心(Kernel)
操作系统(Operating System, OS)其实也是一组程序,这组程序的重点在于管理电脑的所有活动以及驱动系统中的所有硬件。
电脑没有软体只是一堆废铁,那么操作系统的功能就是让CPU可以开始判断逻辑与运算数值、让内存可以开始载入/读出数据与程序代码、让硬盘可以开始被存取、让网路卡可以开始传输资料、让所有周边可以开始运转等等。
上述的功能就是操作系统的核心(Kernel)了!你的电脑能不能做到某些事情,都与核心有关。
但是单有核心我们使用者也不知道能作啥事的~因为核心主要在管控硬体与提供相关的能力(例如存取硬碟、网路功能、CPU资源取得等),这些管理的动作是非常的重要的,如果使用者能够直接使用到核心的话,万一使用者不小心将核心程式停止或破坏,将会导致整个系统的崩溃!因此核心程式所放置到记忆体当中的区块是受保护的!并且开机后就一直常驻在记忆体当中。
所以整部系统只有核心的话,我们就只能看着已经准备好运作(Ready)的电脑系统,但无法操作他!好像有点望梅止渴的那种感觉啦!这个时候就需要软件的帮忙**了!
系统调用(System Call)
既然我的硬件都是由核心管理,那么如果我想要开发软体的话,自然就得要去参考这个核心的相关功能!如此一来不是从原本的参考硬体函数变成参考核心功能,还是很麻烦啊!有没有更简单的方法啊!
为了解决这个问题,操作系统通常会提供一整组的开发接口给工程师来开发软体!工程师只要遵守该开发接口那就很容易开发软体了!
- 举例来说,我们学习C程式语言只要参考C程式语言的函式即可, 不需要再去考量其他核心的相关功能,因为核心的系统调用会主动的将C程式语言的相关语法转成核心可以了解的任务函数, 那核心自然就能够顺利运作该程式了!
如果我们将整个电脑系统的相关软/硬体绘制成图的话,他的关系有点像这样:

图0.4.2、作业系统的角色
- 电脑系统主要由硬体构成;
- 核心程序主要在管理硬体,提供合理的电脑系统资源分配(包括CPU资源、记忆体使用资源等等);
因此只要硬体不同(如x86架构与RISC架构的CPU),核心就得要进行修改才行。而由于核心只会进行电脑系统的资源分配,所以在上头还需要有应用程序的提供,使用者才能够操作系统的。
为了保护核心,并且让程式设计师比较容易开发软件,因此操作系统除了核心程序之外,通常还会提供一整组开发介面, 那就是系统调用层。
软体开发工程师只要遵循公认的系统呼叫参数来开发软体,该软体就能够在该核心上头运作。所以你可以发现,软体与核心有比较大的关系,与硬体关系则不大! 硬体也与核心有比较大的关系!至于与使用者有关的,那就是应用程序啦!
上面的图示可以带给我们底下的概念:
- 操作系统的核心层直接参考硬件规格写成,所以同一个操作系统程序不能够在不一样的硬体架构下运作。
- 举例来说,个人电脑版的Windows 8.1不能直接在ARM架构(手机与平板硬体)的电脑下运作。
- 操作系统只是在管理整个硬体资源,包括CPU、记忆体、输入输出装置及档案系统档。如果没有其他的应用程式辅助,作业系统只能让电脑主机准备妥当(Ready)而已!并无法运作其他功能。
- 所以你现在知道为何Windows上面要达成网页影像的运作还需要类似PhotoImpact或Photoshop之类的软体安装了吧?
- 应用程序的开发都是参考作业系统提供的开发介面,所以该应用程式只能在该作业系统上面运作而已,不可以在其他作业系统上面运作的。
- 现在您知道为何去购买线上游戏的光碟时,光碟上面会明明白白的写着该软体适合用于哪一种作业系统上了吧?也该知道某些游戏为何不能够在Linux上面安装了吧?
核心功能
核心主要是在负责整个电脑系统相关的资源分配与管理,那我们知道其实整部电脑系统最重要的就是CPU与主记忆体, 因此,核心至少也要有这些功能的:
- 系统调用接口(System call interface)
- 是为了方便程式开发者可以轻易的透过与核心的沟通,将硬体的资源进一步的利用,于是需要有这个简易的介面来方便程式开发者。
- 程序管理(Process control)
- 总有听过所谓的『多工环境』吧?一部电脑可能同时间有很多的工作跑到CPU等待运算处理,核心这个时候必须要能够控制这些工作,让CPU的资源作有效的分配才行。
- 内存管理(Memory management)
- 通常核心会提供虚拟内存的功能,当记忆体不足时可以提供内存置换(swap)的功能。
- 文件系统管理(Filesystem management)
- 文件系统的管理,例如资料的输入输出(I/O)等等的工作啦!还有不同文件格式的格式等等,如果你的核心不认识某个文件系统,那么您将无法使用该档案格式的档案啰!例如:Windows 98就不认识NTFS档案格式的硬盘;
- 装置的驱动(Device drivers)
- 硬体的管理是核心的主要工作之一,装置的驱动程式就是核心需要做的事情啦!好在目前都有所谓的『可载入模组』功能,可以将驱动程式编辑成模组,就不需要重新的编译核心啦!这个也会在后续的第十九章当中提到的!
操作系统与驱动程序
作业系统通常会提供一个开发介面给硬体开发商, 让他们可以根据这个介面设计可以驱动他们硬体的『驱动程序』,如此一来,只要使用者安装驱动程式后, 自然就可以在他们的作业系统上面驱动这块显示卡了。

图0.4.3、驱动程式与作业系统的关系
由上图我们可以得到几个小重点:
- 操作系统必须要能够驱动硬件,如此应用程式才能够使用该硬体功能;
- 一般来说,作业系统会提供开发介面,让开发商制作他们的驱动程式;
- 要使用新硬体功能,必须要安装厂商提供的驱动程式才行;
- 驱动程式是由厂商提供的,与操作系统开发者无关。
0.4.3 应用程序
应用程序**:**是参考作业系统提供的开发介面所开发出来软体,这些软体可以让使用者操作,以达到某些电脑的功能利用。
如:办公软件office、Photoshop,等。
需要注意的是,应用程序是与操作系统有关系的,如同上面的图示当中的说明喔。因此,如果你想要购买新软体, 请务必参考软体上面的说明,看看该软体是否能够支援你的作业系统啊。
0.5 重点回顾
- 计算机的定义为:『接受使用者输入指令与资料,经由中央处理器的数学与逻辑单元运算处理后,以产生或储存成有用的资讯』;
- 电脑的五大单元包括:输入单元、输出单元、控制单元、算数逻辑单元、记忆单元五大部分。其中CPU占有控制、算术逻辑单元,记忆单元又包含主记忆体与辅助记忆体;
- 资料会流进/流出记忆体是CPU所发布的控制命令,而CPU实际要处理的资料则完全来自于主记忆体;
- CPU依设计理念主要分为:精简指令集(RISC)与复杂指令集(CISC)系统;
- 关于CPU的时脉部分:外频指的是CPU与外部元件进行资料传输时的速度,倍频则是CPU内部用来加速工作效能的一个倍数, 两者相乘才是CPU的时脉速度;
- 新的CPU 设计中,已经将北桥的记忆体控制晶片整合到CPU 内,而CPU 与主记忆体、显示卡沟通的汇流排通常称为系统汇流排。南桥就是所谓的输入输出(I/O)汇流排,主要在联系硬碟、USB、网路卡等周边设备;
- 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);
- 目前主流的外接卡界面大多为PCIe 界面,且最新为PCIe 3.0,单通道速度高达1GBytes/s
- 常见的显示卡连接到萤幕的界面有HDMI/DVI/D-Sub/Display port 等等。HDMI 可同时传送影像与声音。
- 传统硬盘的组成为:圆形磁碟盘、机械手臂、 磁碟读取头与主轴马达所组成的,其中磁碟盘的组成为磁区、磁轨与磁柱;
- 磁碟连接到主机板的界面大多为SATA 或SAS,目前桌机主流为SATA 3.0,理论极速可达600Mbytes/s。
- 常见的文字编码为ASCII,繁体中文编码主要有Big5 及UTF8 两种,目前主流为UTF8
- 操作系统(Operating System, OS)其实也是一组程式, 这组程式的重点在于管理电脑的所有活动以及驱动系统中的所有硬体。
- 电脑主要以二进位作为单位,常用的磁碟容量单位为bytes,其单位换算为1 Byte = 8bits。
- 最阳春的操作系统仅在驱动与管理硬体,而要使用硬体时,就得需要透过应用软体或者是壳程式(shell)的功能, 来呼叫作业系统操纵硬体工作。目前称为作业系统的,除了上述功能外,通常已经包含了日常工作所需要的应用软体在内了。
