在目前的社会中,没有电脑真的是很奇怪的一件事情!因为我们必须要使用电脑帮我们进行很多任务作。
包括在办公室中使用电脑来进行各项作业、在信息领域方面利用电脑来进行服务器的架设、
在休闲时利用电脑来上网浏览或聊天、在无聊时利用电脑来进行电脑游戏软件的运作等等。
但是妳知道目前电脑规格有哪些?为什么我们使用的电脑通常被称为『个人电脑』而不是啥特别的名词?
为什么电脑一定需要软件才能够使用?
为什么我的游戏无法在早期的 Windows 98 上面运作?
这个我们都得要了解一下比较好。
电脑的功能
什么是电脑呢?基本上,一部机器只要能够『
接受指令的输入,经过逻辑判断或者是算数运算后,
能够将产生的信息输出到屏幕或打印机等接口上的机器』我们就可以称他为电脑了。
所以个人电脑、小型计算器、大型服务器等等,都可以称为电脑的。
那么换句话说,我们通过键盘或鼠标输入指令,让电脑主机进行运算后,将我们所需要的数据输出到屏幕上!
这就是电脑的运作过程。

图一、电脑组成示意图
为了要将上图中的『逻辑判断、算数运算』所在处的主机设计出来,这部主机还得要负责链接输入设备以及输出设备,
并且还要能够运行算数处理以及逻辑方面的判断,因此主机就得要有几个组成的部分了,这包括:
中央处理器、主内存、系统总线(可以想成主板上面的芯片组),以及各种输入输出组件
(I/O 设备)。不过,关键元素在于中央处理器,也就是俗称的 CPU 啦!
为什么说 CPU 最重要呢?就跟我们生活的时候任何事情都要通过脑袋来思考后才能产生行动一样,
事实上
CPU 里面也是含有多个指令集,这些指令集可以想成脑袋的思考方式。
而为了配合这个 CPU ,所有在主机上所设计出来的硬件当然也要符合相关的规范才可以!
就如古话说的:『戏法人人会变,巧妙各有不同』一样,既然电脑主要的功能就是在接受信号的输入,
经过一些进程后将他转变为适当的信息并且输出而已,那么当不同的硬件开发商在进行研究时,当然可能产生不同的硬件规格啦!
但由于市场机制以及相关产品开发商的支持,现今电脑硬件的架构依 CPU 的类别主要区分为两大类,分别如下所述:
- Complex Instruction Set Computer (CISC):复杂指令系统计算器
CPU 内的指令集较为复杂,所以需要通过一个额外的解译器来进行指令的解析。
目前最常见的就是个人电脑的 x86 与 x86-64 (64比特) 架构啦!
这种架构是目前最常见的电脑架构啦!
- Reduced Instruction Set Computer (RISC):精简指令系统计算器
由于 CISC 指令架构较为复杂,为了简化指令集以加速程序的运作,所以就有 RISC 架构的产生。
这种架构较为先进,常用于大型服务器等级的硬件规格中。
目前使用这种架构 CPU 产品包括有:Sony 的 Play Station (PS)、IBM Power 架构的 Xbox 360, 早期苹果公司的 Macintosh、
升阳(Sun)电脑的 SPARC 架构等等。(注:Sony, IBM, 苹果公司以及升阳都是企业的公司名称)

Sony 的游戏机 (Play Station) 使用的 CPU 名称为 Cell;XBox 是微软的游戏机,这个游戏机里面使用的 CPU 则是
IBM 发展的名为 Power 的 CPU,这款 CPU 也用在早期的苹果公司的电脑中;SPARC 则是升阳公司自产的 CPU 型号。
这几款 CPU 使用的架构都是属于 RISC 的架构喔!
如果对于 CPU 架构有兴趣的话,文末的
参考数据可以阅读一番。
虽然 RISC 的架构较为先进,不过由于个人电脑的普及性,以及拜 Intel 与 AMD 这两家主要 x86 CPU
制造公司开发出更精良且高速的 x86 CPU 之赐,目前您可以使用相对便宜很多的金额就买到性能很棒的 x86
个人电脑了。不但个人电脑是 x86 架构,现在就连很多服务器以及企业关键应用的主机也都使用 x86 的架构。
因此底下我们将以 x86 架构来说明电脑硬件喔!(
注:Intel 及 AMD
是两家制造个人电脑 CPU 的公司名称)

写这一段话的意义是,希望读者能知道 CPU 的架构是很多样的!
制作 CPU 的公司并不是只有 Intel 或 AMD 而已。此外,很多的电脑、游戏机都是使用 CPU 的架构,
所以,了解到个人电脑的基本架构,有助于您了解其他设备的主要组成呢! ^_^
个人电脑所需硬件
如同上一小节所说的,电脑主机主要包括了 CPU、内存、系统总线以及各项 I/O 设备。
那么这些硬件主要的功能是什么呢?我们就以人体来说明好了。
- CPU:
就像是脑袋瓜子,主要负责逻辑思考与算数运算。不过要注意的是,脑袋瓜子总得要接受外来的刺激才会思考!
所以啰,我们也要给予 CPU 适当的指令后,他才会开始动作。这也是我们需要撰写程序的原因。
- 主内存:
就像我们的记忆力一样!当记忆能力越高,可以容纳的外界刺激与保存过去记忆的能力就越好!
所以当有人问到我们过去的记忆时,不需要拿照片而在脑海里面就立刻有图像出来啦!所以说,
电脑主机的主内存通常是越大越好! ^_^
- 输入/输出 (I/O) 设备:
电脑主机的输入/输出设备有非常的多,常见的例如硬盘、光盘、打印机、网络设备、视频设备等等都算。
以人体来说,妳可以将硬盘想像成为一本笔记,妳可以在里面写感想(写入硬盘)或者是读读里面文本(读取硬盘),
如果觉得某些文本不满意,还可以使用修正液将他涂掉(删除数据)。
- 系统总线:
系统总线是连接各项设备的接口,妳可以将主板看成是系统总线啦!
主板是很重要的,因为他将上述的各项组件给他集成在一起,所以没有主板,
其他的组件就没有作用了。妳可以将系统总线想成是人体的神经系统,
神经系统可以连接身体的各个部位以达到让人体活动的实际目标!
各项设备的结合可以下图来示意一下:

图二、各组件的组成情况
(上述图标主要取自 tom's 硬件指南,各组件图片分属个别公司所有)
就像虽然每个人都有脑袋、神经系统、记忆力与各项外在书籍,但是每个人的脑袋、神经系统传导的能力以及记忆力都不同一样,
由于制造商发展的能力不一样,所造出来的各项电脑组件能力也不相同。
所以您在选购 CPU、主板、内存以及各项 I/O 设备时,务必询问专业人士,
否则有可能买到无法使用在您主机上面的硬件喔!
举例来说,鸟哥之前的工作主机使用 AMD 公司出产的 Atlhon XP 1800+ CPU,搭配华硕公司的主板。
为了比较快速的保存系统,所以鸟哥跑去买了一颗 SATA 接口的硬盘,
但是,买回来后才发现俺的主板上面只有较早期的 IDE 硬盘接口,啊!
还要去买一块 SATA 扩充卡来安装~唉~失败!

什么?看不懂啥是 IDE, SATA 以及 Athlon XP 吗?没关系!这些是电脑硬件相关的术语,
妳只要知道 AMD 是一家制造 CPU 的公司,他们公司有出产一款 CPU ,而 AthlonXP 就是该款 CPU 的代号即可。
关于硬盘还有更多要介绍的,底下会说明!
程序运作流程
鸟哥常常在开玩笑的问朋友说:『
没有插电的电脑是一堆废铁,
那么插了电的电脑是什么?』您猜是什么呢?答案是...『
一堆会电人的废铁!!』^_^!为什么呢?
因为上头没有程序嘛!所以说,电脑硬件上面必须要配合程序软件才能够顺利的完成各项动作。
那么电脑是如何运行各项软件功能的呢?
假设有个人体身份是学生,他最近的工作是要去考试,为了应付考试他应该要如何动作?
- 通过神经传导,拿起课本,并从书本上面读取会考的信息,且记忆下来;
- 进入考场准备考试,看到试卷后根据记忆将答案写下;
- 考完后交卷并离开考场。
那么如果是电脑程序呢?整个电脑主机各项组件是如何运作?
- CPU 接受指令后,准备读取数据,主要借由总线将硬盘的数据读入主内存当中;
- CPU 开始处理代码,CPU 读取的代码与数据都是由主内存当中取得;
- 持续进行该项任务,直到任务完成为止。
上述的第一、二步骤如下图三的示意:

图三、程序的运作流程
(上述图标主要取自 tom's 硬件指南,各组件图片分属个别公司所有)
图三给我们几个很重要的概念,那就是:
- CPU 必须要接受代码之后才会开始进行运作;
- 一般来说,目前的代码与数据都是放置在硬盘、光盘等保存媒体当中的;
- 不管是代码还是数据,最终都必须要被读到主内存当中后,CPU 才能使用;
- 任何数据的发送几乎都是通过主板上的总线。
这是简单的程序运作概念,对于妳未来要升级硬件,或者是检查有无软件错误时,
这个概念挺重要喔! ^_^。举例来说,考虑到上述的第四点,总线是很重要的!
而总线可以容纳的数据传输速度(带宽)是有限的,所以当妳在进行刻录 DVD 的时候,
系统的整体性能会变慢,现在知道为什么了吧?因为刻录时总线被硬盘与 DVD 刻录机之间传输的数据量给占满了!
所以其他程序要运行时,
图三的 (1) 速度就慢了! ^_^

为什么很多硬件迷在购买整部主机的时候,首先考虑的是主板芯片组与CPU及主内存的带宽?
因为在数据传输量很大的时候,这玩意儿影响可是很大的!
程序怎么来?
现在我们知道了,CPU 内其实含有很多的指令集,而 CPU 需要由主内存中读取所需要的代码与数据才能处理工作,
当然啦,这些代码必须要能够使用 CPU 内的指令集来运行算数、逻辑等动作才行。那么代码怎么来?
其实程序的撰写最直接的就是参考 CPU 的指令集,然后利用 CPU 认识的机器码直接撰写程序,
这样程序就可以直接运作了。
但是这样的动作很麻烦,因为机器码是机器认识的语言,人类不容易了解!加上参考 CPU 指令集也是个苦差事,
因此这种撰写代码的行为除非是用在一些很小的嵌入式设备中,一般个人电脑很少使用这种模式来开发应用程序的。
取而代之的是一个作业程序来处理硬件问题。
直接针对硬件来撰写应用程序是没有效率的,因为每支程序都必须从头撰写,机器码也不容易了解。
所以就有些公司或社群发展出所谓的『操作系统』。
操作系统是利用一组特殊的程序管理整个硬件资源,
同时操作系统还会提供一整组的标准开发接口,让程序员在撰写应用程序时,不需要考虑硬件,
仅需参考操作系统所提供的开发接口来撰写程序即可。此时程序可使用操作系统推出的高端编程语言,
包括 C, .NET, Fortran, Java 等等。
我们可以将硬件、操作系统、开发接口与工具、应用程序、用户作一个简单的相依图标如下:

图四、操作系统的示意图
上面的图标提供我们几个简单的小概念:
- 操作系统直接参考硬件规格写成,所以同一个操作系统程序不能够在不一样的硬件架构下运作。
举例来说,个人电脑版的 Windows XP 不能直接在 RISC 架构的电脑下运作。
所以您知道为何 Windows XP 又分为 32 比特及 64 比特的版本了吧?
因为 32/64 比特的 CPU 指令集不太相同,所以当然要设计不同的操作系统版本了。
- 操作系统只是在管理整个硬件资源,包括 CPU、内存、输入输出设备及文件系统档。
如果没有其他的应用程序辅助,操作系统只能让电脑主机准备妥当(Ready)而已!并无法运作其他功能。
所以妳现在知道为何 Windows XP 上面要达成网页图像的运作还需要类似 PhotoImpact 或 Photoshop 之类的软件安装了吧?
- 应用程序的开发都是参考操作系统提供的开发接口,
所以该应用程序只能在该操作系统上面运作而已,不可以在其他操作系统上面运作的。
现在您知道为何去购买在线游戏的光盘时,光盘上面会明明白白的写着该软件适合用于哪一种操作系统上了吧?
也该知道某些游戏为何不能够在 Linux 上面安装了吧?
目前最常见的操作系统主要有 Windows, Linux, Mac X, Unix 等,
在这些操作系统上面所开发出来的程序基本上是不能够互通的!因为他的开发接口并不相同之故。
这也是为什么当妳去网络尝试下载某些程序的时候,这个程序会有好多版本!
因为程序必须要针对不同的操作系统去撰写才行喔!
我们拿常见的微软公司的产品来说明。妳知道 Windows XP, Office 2007 之间的关系了吗?
- Windows XP 是一套操作系统,他必须先安装到个人电脑上面,否则电脑无法开机运作;
- Windows 98 与 Windows XP 是两套不同的操作系统,所以能在 Win 98 上安装的软件不见得可在 WinXP 上安装;
- Windows XP 安装好后,就只能拥有很少的功能,并没有办公室软件;
- Office 2007 是一套应用程序,要安装前必须要了解他能在哪些操作系统上面运作。
硬件与驱动程序
了解了硬件与操作系统的相关概念后,现在我们知道操作系统主要在管理整个电脑主机的硬件资源,
为了要管理这些硬件支持,我们的操作系统当然就得要『
驱动整部主机上面的所有硬件』了!
一开始时,操作系统的设计者会将当时主流的电脑硬件作个整理,取得硬件开发商所提供的驱动程序,
并主动加入到操作系统当中,以让这个系统可以开机并顺利的认识硬件。
不过硬件可是持续在进步当中的!包括主板、显卡、硬盘等等。那么比较晚推出的较新的硬件,
例如显卡,我们的操作系统当然就不认识啰!那操作系统该如何驱动这块新的显卡?
为了克服这个问题,操作系统通常会提供一个开发接口给硬件开发商,
让他们可以根据这个接口设计可以驱动他们硬件的『驱动程序』,如此一来,只要用户安装驱动程序后,
自然就可以在他们的操作系统上面驱动这块显卡了。

图五、驱动程序与操作系统
(上述图标主要取自 tom's 硬件指南,各组件图片分属个别公司所有)
由上图五我们可以得到几个小重点:
- 操作系统必须要能够驱动硬件,如此应用程序才能够使用该硬件功能;
- 一般来说,操作系统会提供开发接口,让开发商制作他们的驱动程序;
- 要使用新硬件功能,必须要安装厂商提供的驱动程序才行;
- 驱动程序是由厂商提供的,与操作系统开发者无关。
所以,如果妳想要在某个操作系统上面安装一张新的显卡,那么请要求该硬件厂商提供适当的驱动程序吧! ^_^!
为什么要强调『
适当的驱动程序』呢?因为驱动程序仍然是依据操作系统而开发的,
所以,给 Windows 用的驱动程序当然不能使用于 Linux 的环境下了。
前一小节我们谈到硬件与程序运作的关系,也谈到
程序主要是放置到一些保存媒体上的,
现在的主机设备当中,保存媒体最重要的一项就是『硬盘』这个玩意儿啦!
当妳的主机想要有操作系统时,首先就得要将操作系统『安装』到妳的硬盘当中!
所以您说,硬盘是否很重要啊!
硬盘的连接接口:IDE, SATA
硬盘的接口规格近年来有重大突破,那就是由传统的 IDE 接口转换到新的 SATA 接口。
(我们这里主要针对个人电脑,所以较高端的 SCSI 接口不在讨论之列。)
那么什么是 IDE 什么是 SATA 接口呢?简单的说,就是硬盘与主板链接在一起的那个插槽不一样啦!
我们以实际的硬盘来作说明,请看下图的两款硬盘连接脚位:

图六、两款硬盘接口(左边为 IDE 接口,右边为 SATA 接口)
早期 IDE 硬盘的排线 (连接硬盘与主板) 较宽,容易影响到机壳内的热对流,所以散热不易。
如下图所示,这一条排在线面有三个插槽,一边接主板,另外两个则接在硬盘 (或称为 IDE 设备) 上。

图七、IDE 接口的排线 (图标取自 Seagate 网站)
一般来说,早期主板上面的 IDE 插槽有两个,而每条排在线又可以有两个 IDE 设备,所以最多可以接到四个 IDE 设备。
如果妳需要一个光驱,那么最多妳的主机就可以接三颗硬盘的意思。不过妳应该要想到的是:『既然排线可以接两个硬盘,
那么哪一颗硬盘会先被主机捉到?』这个时候得要进行跳针 (Jump) 的设置才行喔!如
图六所示,
IDE 排线右边的那个插槽就是在设置跳针的地方!妳可以设置成主要(master)或次要(slave)的形式。
要注意,一条排在线面不可以同时为 master 或 slave ,否则主机会捉不到两颗硬盘!在同一条排在线,
一定要一颗为 master 一颗为 slave 才行
由于 IDE 接口的发展已经到了极限,而且排线又容易造成通风不良,所以后来出现了一种新的接口,那就是 SATA 接口啦!
从
图六妳已经可以发现到 SATA 的排线接口非常的小,而且 SATA 的速度要比 IDE 快的多!
所以 SATA 已经成为目前硬盘机接口的主流啰! SATA 的排线示意图如下图所示:

图八、SATA 接口的排线 (图标取自 Seagate 网站)
SATA 的排线直接链接硬盘与主板,一条排线仅接一颗硬盘,所以妳不需要调整跳针。
不过一张主板上面 SATA 插槽的数量并不是固定的,且每个插槽都有编号,在连接 SATA 硬盘与主板的时候,
还是需要留意一下。
硬盘的组成
在开始谈实际使用硬盘之前,我们还得要知道一下硬盘的组成比较好。实际上,硬盘就是由硬盘盘与读取头所组成的。
硬盘盘是圆形的,数据就是通过磁头写入到硬盘盘上面。数据能够被写入到硬盘盘的最小单位是磁区 (sector),
目前 x86 硬盘的磁区一个为 512 bytes 这么大。而磁区聚合成为一个同心圆时,那就是磁柱 (cylinder)。
如果以图标来看,他有点像这样:

图九、硬盘盘组成示意图
我这里假设硬盘里面仅有一个硬盘盘的状况。所以硬盘最重要的组成就是:
磁区、磁柱、磁头
(sector, cylinder, head),其中磁区一个有 512bytes 大,而磁柱为分割时的最小单位。
那么是否每个磁区都一样重要呢?其实整颗硬盘的第一个磁区特别的重要,因为他记录了整颗硬盘的重要信息!
第一个磁区主要记录了两个重要的信息,分别是:
- 主要开机记录区(Master Boot Record, MBR):可以安装开机管理程序的地方,有 446 bytes
- 分割表 (partition table):记录整颗硬盘分割的状态,有 64bytes
MBR 是很重要的,因为当系统在开机的时候,会主动去读取这个区块的内容,
这样系统才会知道你的程序放在哪里且该如何进行开机。如果妳要安装多重开机的系统,
MBR 这个区块的管理就非常非常的重要了! ^_^
那么分割表又是啥?其实妳刚刚拿到的整颗硬盘就像一根原木,妳必须要在这根原木上面切割出妳想要的区段,
这个区段才能够再制作成为你想要的家具!如果没有进行切割,那么原木就不能被有效的使用。
同样的道理,妳必须要针对妳的硬盘进行分割,这样硬盘才可以被妳使用的!
磁盘分割表
但是硬盘总不能真的拿锯子来切切割割吧?那硬盘还真的是会坏掉去!那怎办?
就利用参考对照磁柱号码的方式来处理啦!在分割表所在的 64bytes 容量中,总共分为四组记录区,
每组记录区记录了该区段的启始与结束的磁柱号码。若将硬盘以长条形来看,然后将磁柱以直条图来看,
那么那 64 bytes 的记录区段有点像底下的图标:

图十、硬盘分割表的作用示意图
由上图来看,我们可以知道几个小重点:
- 其实所谓的『分割』只是针对那个 64bytes 的分割表进行设置而已!
- 硬盘缺省的分割表仅能写入四组分割信息
- 这四组分割信息我们称为主要(primary)分割区
- 分割区的最小单位为磁柱(cylinder)
- 当系统要写入磁盘时,一定会参考磁盘分割表,才能针对某个分割区进行数据的处理
那么为何需要进行分割呢?因为
每个分割区的数据是分开的
!所以,当妳需要将某个分割区的数据重整时,
例如妳要将妳电脑中 Windows 的 C 槽重新安装一次 Windows 时,妳可以将其他重要数据移动到其他分割区,
例如将邮件、桌面数据移动到 D 槽去,那么 C 槽重装系统并不会影响到 D 槽!
所以善用分割区,可以让妳的数据更安全。
另外,由于分割区将数据集中在某个磁柱的区段,例如图十当中第一个分区位于磁柱号码 1~100 号,
如此一来当有数据要读取自该分区时,磁盘只会搜索前面 1~100 的磁柱范围,
由于数据集中了,将有助于数据读取的速度与性能!所以说,分割是很重要的!
既然分割表只有记录四组数据的空间,那么是否代表我一颗硬盘最多只能分割出四个分区?
当然不是啦!有经验的朋友都知道,妳可以将一颗硬盘分割成十个以上的分区的!
那又是如何达到的呢?在 Windows/Linux 系统中,我们是通过一个称为
延伸分割
(Extended partition) 的方式来处理的。
既然第一个磁区所在的分割表只能记录四笔数据,那我可否利用额外的磁区来记录更多的分割信息?
那就是延伸分割的想法。实际上图标有点像底下这样:

图十一、硬盘分割表的作用示意图
在图十一当中,我们知道硬盘的四个分割记录区仅使用到两个,P1 为主要分割,而 P2 则为延伸分割。
请注意,
延伸分割不能够被用来作为数据访问的!
然后我们可以通过延伸分割所指向的那个区块继续作分割的记录,如图十一右下方那个区块,
继续分割出五个分区,这五个由延伸分割继续切出来的分区,就被称为
逻辑分割区
(logical partition)。同时注意一下,由于逻辑分割区是由延伸分割继续分割出来的,
所以他可以使用的磁柱范围就是延伸分割所设置的范围喔!也就是图中的 101~400 啦!
主要分割、延伸分割与逻辑分割的特性我们作个简单的定义啰:
- 主要分割与延伸分割最多可以有四笔 (硬盘的限制)
- 延伸分割最多只能有一个 (操作系统的限制)
- 逻辑分割是由延伸分割持续切割出来的分区;
- 能够被格式化后,作为数据访问的分区为主要分割与逻辑分割。延伸分割无法格式化;
- 逻辑分割的数量依操作系统而不同,在 Linux 系统中, IDE 的硬盘最多有 59 个逻辑分割,
SATA 硬盘则有 11 个逻辑分割。
事实上,分割是个很麻烦的东西,因为他是以磁柱为单位的『连续』磁盘空间,
而且延伸分割又是个类似独立的空间,所以在分割的时候得要特别注意。举个例子来说,在 Windows 的分割当中,
通常他们喜欢自订成一个主要分割作为系统槽,其他的容量全部作为延伸分割,
然后再让延伸分割继续分成逻辑分割。好,那假设妳的 D 与 E 槽各有 30GB ,妳想将这两槽集成成一槽,
底下这两种情况到底可否集成?

图十二、磁盘空间集成示意图
在图十二当中,上图的 D, E 因为同属于延伸分割内的逻辑分区,因此妳只要:
(1)将这两个分区删除,然后 (2)再重新创建一个新的分区,就能在不影响其他分区的情况下,
将两个分区的空间组合成为一个。但如果是图十二的下图,由于 D, E 槽分属主分割与逻辑分割,
所以两者不能够集成在一起,除非妳将延伸分割破坏后再重新分割。不过,这样会影响到所有的逻辑分割!
要注意,
如果延伸分割被破坏,所有逻辑分割将会被删除!
在硬盘分割完毕后,这颗硬盘就可以准备被格式化使用了!不管你想要玩的是 Windows 还是 Linux ,
硬盘的分割概念是相当重要的!别忽略这部份的知识呢!
主要开机记录区(MBR)
不知道你会不会觉得很奇怪,为啥电脑可以开机?为啥电脑知道我的开机软件放在 C 槽?
这是因为有硬盘的 MBR 的关系!每次电脑打开电源后,电脑根据 BIOS 的设置决定哪一个设备为主要的开机设备。
假如你以硬盘作为开机设备时,那么电脑就会主动的去读取该颗硬盘的 MBR ,
并根据 MBR 里面的设置知道开机程序在哪里,所以说, MBR 是很重要的呢!
如前面说的,MBR 是硬盘第一个磁区内占有 446 bytes 容量的区块,这个区块可以安装开机管理程序,
在一些操作系统上面我们称这种程序为开机加载器 (boot loader),底下我们直接称呼为 loader 好了。
loader 主要的任务有三个,分别是:
- 提供菜单给用户选择开机程序,这也是多重开机的重要功能!
- 直接指向可开机的程序区段
- 将菜单功能转交给其他 loader 负责。
其实可以安装 loader 的地方有两个,一个是 MBR ,另一个是每个分区的超级区块(super block)。
每个分区都会留一个区块来记录该分区的相关信息,如果我们依旧以长条图来看,超级区块, MBR
与实际的开机程序他们的相对位置是这样的:

图十三、开机加载器示意图
图十三可以这样看:
- 每个分区都拥有超级区块 (super block)
- 图中的系统槽为第一及第二分区,
- 实际可开机的程序是放置到分区内的!
- loader 只会认识自己的系统槽内的开机程序,以及其他 loader 而已;
- loader 可直接指向或者是间接将管理权转交给另一个管理程序。
所以在图十三中,鸟哥假设 MBR 的 loader 认识 Windows 的开机程序,
因此他可以直接指向开机程序 (M1的那个菜单),但他不认识 Linux 的开机程序,
因此我们使用 M2 菜单,将控制权移交给 Linux 所在的系统槽的超级区块,
该超级区块内也有 loader ,那个 loader 会认识 Linux 开机程序,
因此就能够顺利的以 Linux 开机了!
那现在请您想一想,为什么人家常常说:『
如果要安装多重开机,最好先安装
Windows 再安装 Linux 』呢?
这是因为 Linux 在安装的时候,妳可以选择将开机管理程序安装在 MBR 或超级区块,
而且 Linux 的 loader 可以手动设置菜单 (就是图十三的 M1, M2...);至于 Windows 在安装的时候,
则会自己覆盖掉 MBR 以及超级区块,而且他没有让我们自己选择菜单的机会,因此,
如果先安装 Linux 再安装 Windows 的话,那妳就得要自行以类似 spfdisk 之类的软件重新处理 MBR ,
否则就进不了 Linux 系统了 (虽然可以通过其他方法来处理 MBR )。
Windows 的 loader 不认识 Linux 的系统槽,而 Linux 的 loader 对于一般用户来说,
似乎不是那么具有亲和力,那是否有其他的 loader 可以安装在 MBR 里面管理多重开机啊?
没错!是有的!那就是台湾之光冯绪平先生撰写的 SPecialFDisk (简称 spfdisk) 这套软件!
这套软件详细信息请参考底下的链接,这软件不但可以进行磁盘分割的动作以及安装 loader ,
更厉害的是,他是全中文接口!高兴了吧! ^_^
我们会在后面的章节以一个实际案例来介绍 spfdisk 的使用喔!
啥是 Linux ?这东西有啥好玩的?这个咚咚的制作概念如何?这个咚咚有没有版权?
这东西的应用度广吗?这都是我们要来留意的啊!不然为何妳想要玩 Linux 呢? ^_^
Linux 是啥东西?
既然要玩 Linux 就得先知道 Linux 是啥才对。其实 Linux 就是一个『操作系统』!
我们前面谈到操作系统主要的功能就是驱动与管理所有的硬件资源,并提供相关的开发接口给程序员参考与开发应用程序。
所以 Linux 是一组程序,这一组程序可以管理与驱动电脑,同时还可以提供很多好用的开发接口就是了。
如果要更详细的定义,那我们可以说,整个操作系统最重要的内核 (kernel) 就是 Linux ,
这个 Linux 的内核原代码可以在
http://www.kernel.org
这个网站找到,而且当妳将他安装在妳的电脑上时,整个代码甚至可以小到数百 Kbytes ,
这么小的程序就能够驱动与管理所有的硬件,所以很多家电、手机等嵌入式设备很喜欢使用 Linux 哩!
最早 Linux 是在 1991 年由芬兰人托瓦兹 (Linus Torvalds) 所开发出来的,他本着『人人为我、我为人人』的态度将
Linux 发布到互联网社会中,由于他所撰写的代码相当的优秀,所以很多黑客级工程师都很喜欢使用。
而且由于他将代码直接发布到互联网中,因此很多人都可以修改他的代码,
另外有更多人则是贡献他们自己的代码给托瓦兹,以进一步加强 Linux 本身的能力!
妳或许会问:『为什么大家可以修改托瓦兹的代码?他没有著作权的保护吗?』
当然不是啦!Linux 是有授权的,妳必须要同意他的授权才能够使用喔!那 Linux 的授权是啥呢?
Linux 的授权 (自由软件)
很多人都以为 Linux 是『免费』的,其实不然!应该说 Linux 是『自由的』才对!免费与自由在英文都是 Free ,
所以很容易造成大家的误解。
Linux 是有版权的,他的版权使用的是
GNU 计划的一般通用授权 (General Public License, GPL)。
GNU 是由史托曼 (Richard Stallman) 在 1984 年所发起的一项计划,目的就是在创作一个完全自由的操作系统。
GNU (
http://www.gnu.org) 本身有相当多的软件提供,
包括 Linux 开发的环境、编译器等都是使用 GNU 的软件呢!这也是后来托瓦兹将 Linux 使用 GPL 授权的原因之一。
那么什么是 GPL 授权呢?详细的条文中文版可以参考这里:
说穿了, GPL 的目的在确保程序著作者的版权权利以及用户的相关使用规定。当一个软件挂上了 GPL 的授权后,
针对用户来说,他具有底下的权利:
- 软件本身会发布原代码;
- 用户可以根据原作者的代码学习程序撰写逻辑;
- 当用户同意 GPL 授权后,即可自由的取得、拷贝、修改与再发行该软件。
针对程序员则有底下的保护:
- 用户不可单纯的贩卖该软件 (但可贩卖服务,如安装、教使用方式等);
- 用户不能随意修改授权,即该软件为 GPL 时,用户不可将该软件修改成专利软件授权;
- 用户重新修改或者贡献代码后,应该将代码再以 GPL 的方式回馈给编程者。
也就是说,当妳使用 GPL 授权发布软件后,妳必须要同时提供程序原代码才行。
不过,妳对于该软件的贡献将永远存在,因为其他用户不可将授权修改,所以妳的贡献永远都在!
而且如果该程序的用户众多,则妳的代码会有无数多人帮妳校阅,所以 GPL 授权的软件通常在性能、安全性方面都比较好!
漏洞修补速度也快上非常的多!
由于 GPL 授权的软件在使用上的自由度 (Free) 相当高,所以我们也称这种授权的软件为自由软件 (Free software),
他并不是免费软件 (freeware) 喔!不要搞混了~ ^_^
Linux 完整安装套件
(distribution)
Linux 既然这么好用,当然大家都想要抢着用,尤其是他又是自由的!不过, Linux 早期真的很难入门~
因为 Linux 原本只有内核程序,也就是
http://www.kernel.org
提供的原代码而已,想要使用他还得要自己动手编译,这对于一般用户来说,实在是莫大的压力!
很多人为了要推广这么好用的东西,于是就将 Linux 内核先进行编译,并且加入很多软件 (不一定是自由软件),
最重要的是将这一整组东西处理成为一份可完整安装的光盘 (或 DVD)发布,这就称为完整安装套件 (distribution) 了!
所以说, Linux distribution 指的就是:
Linux distribution = Linux kernel + Free Software + Software + Tools + 可完整安装流程
我们再来看一张简图,如下所示:

图十四、操作系统与 distribution 之间的相关性
如上所示,Linux 内核提供的是中间两层,这也是
http://www.kernel.org 提供的咚咚。
同时,很多商业公司自行推出他们的 distribution 配合贩卖他们的支持服务来进行商业行为,
这对于企业用户来说,实在是一整套不错的操作系统哩!而如果妳只是想要试用,那么很多社群版的 distribution
也可以满足你喔!目前常见的 Linux distributions 有底下这几种:
当然还有很多版本啦,上面只是列出一些常见的 distribution 而已。此外还有一些版本则是主打不需要硬盘的环境,
那就是完全由光盘开机的版本,这些版本我们称为 Live CD (直接以 CD 开机,就能够进入 Linux 的环境)。
台湾也有 Live CD ,例如底下的链接:
妳可以自由下载该软件,然后刻录成为可开机光盘或 DVD 后,即可使用 Linux 的环境哩!
当成抢先试用版的功能也是不错啦! ^_^!
Linux 内核版本之谜
Linux 的发展者非常的多,且为因应新硬件与软件的升级,所以造成内核常常增加新功能,也就是说,
Linux 内核常常有变动就是了。
为了分辨各个不同版本之间的差异,所以托瓦兹将针对 Linux 内核的发布给予版本的订定。一般来说,
内核发布时的版本定义为:
2 . 6 . 20
主版本.次版本.发布次数
就如同前面提到的,因为内核的变动性太大,如果用在一般家用电脑或者是企业关键应用的话,
常变动的内核并不适合的,因此托瓦兹将内核发展的趋势分为两股,并根据这两股内核的发展分别给予不同的内核编号,
那就是:
- 主、次版本为奇数:
如 2.5.xx ,这种内核版本主要用在测试与发展新功能,所以通常这种版本仅有内核开发工程师会使用。
如果有添加的内核代码,会加到这种版本当中,等到众多任务程师测试没问题后,才加入下一版的稳定内核中;
- 主、次版本为偶数:
如 2.6.xx ,等到内核功能发展成熟后会加到这类的版本中,主要用在一般家用电脑以及企业版本中。
重点在于提供用户一个相对稳定的 Linux 作业环境平台。
Linux 内核版本与 distribution 的版本并不相同,很多朋友常常上网问到:『我的 Linux 是 9.x 版,请问....』之类的留言,
这是不对的提问方式,因为所谓的 Linux 版本指的应该是内核版本,
而目前最新的内核版本应该是 2.6.21 (2007/06) 才对,并不会有 9.x 的版本出现的。
妳常用的 Linux 系统则应该说明为 distribution 才对!因此,如果以本站所介绍的
CentOS 来说,妳应该说:『我用的 Linux 是 CentOS 这个 distribution,
版本为 5.x 版,请问....』才对喔!

当妳有任何问题想要在 Linux 论坛发言时,请务必仔细的说明妳的 distribution 版本,
因为虽然各家 distributions 使用的都是 Linux 内核,不过每家 distributions 所选用的软件以及他们自己发展的工具并不相同,
多少还是有点差异,所以留言时得要先声明 distribution 的版本才行喔! ^_^
设备代号
如果妳曾经使用过 Windows 系统的话,会发现妳的文件总管内有好多的设备,包括 C 槽、 D 槽、光驱、
可携式硬盘机、USB 设备....一大堆东西。那么 Linux 有没有这些东西呢?答案是....没有这些『代号』了~
Linux 系统内有的只是以『文件名取代设备名称』!
举例来说,第一个 IDE 插槽的 master 硬盘代号为 /dev/hda ,
那个 /dev 是个目录,是设备 (device) 的缩写,而 hda 则是 Hard Disk A (hda) 的缩写啰!若以此类推的话,
slave 硬盘就称为 /dev/hdb 啰~而如果光驱是放在第二个 IDE 插槽的 master 时,光驱的代号就是 /dev/hdc 啦!
那么最近主流的 SATA 硬盘代号是啥?由于 SATA 使用的是 SCSI 模块 (早期的硬盘只有 IDE, SCSI 两种接口),
所以 SATA 硬盘代号与 SCSI 相同,都称为 /dev/sda !其实就是 SCSI hard Disk A (sda) 的意思。
而 SATA 硬盘由于不需要调整跳针,他是根据 SATA 插槽的顺序来给予代号的。所以第一颗 SATA 硬盘为 /dev/sda, 第二颗为
/dev/sdb 以此类推。
接下来那个 usb 硬盘的代号又是啥?由于 usb 也是使用 SCSI 模块,所以 usb 硬盘也是使用 /dev/sd? 代号。
这样会不会造成困扰呢?其实不会啦!因为硬盘代号还是会以侦测顺序为主,所以通常 SATA 硬盘代号会较前面 (/dev/sda...)
而 usb 硬盘代号则较后面 (/dev/sdc...)
不过,我们在前一小节谈过,硬盘总是得经过分割后才能够被格式化使用,那假设以第一颗 SATA 硬盘来说,
他的分区代号为何?很简单啊,直接在硬盘代号后面加上数字即可。只是要注意的是,由于硬盘的分割表已经保留四个位置,
所以逻辑分割的代号都是由 5 号开始的。我们以底下的两个案例来说明代号:

图十五、磁盘代号的说明
要记得,延伸分割也是一种分割 (虽然他只是在规划出逻辑分割的磁柱位置而已),所以那个代号不要忘记了。
图十五上图很容易了解,就是照顺序下来即是。但图十五下图则可发现代号 /dev/sda3, /dev/sda4 不见了!
因为 partition table 内有四笔记录啊,这四笔记录的代号是保留的。因此 parmary 与 extended 代号一定是前面四号,
逻辑分割一定是由五号开始的!这个概念很重要的,因为与 Windows 的 C, D, E... 不一样! ^_^
反正您要记得的是,Linux 已经没有所谓的设备名称,他有的是文件名而已。而跟系统设备有关的咚咚,
几乎都是放在 /dev 那个目录底下,这点要特别注意喔!
X Window System
一些老玩家都知道,早期的 Win 3.1 是在 DOS 系统上面的一套软件而已。相同的,
X Window System 也不过是 Linux 上面的一套软件而已,X Window System 并不是操作系统喔!^_^
什么是 X Window System 呢?早期的操作系统都是文本接口的,就是需要工程师下达指令后系统才会运作,
而没有图形接口的功能。但是一些工程界人士,例如地质学家要绘制地表面与高度的相关性,
又例如海洋学家要绘制海沟的分布情况等等,这些都需要图形接口的。后来麻省理工学院 (MIT)
开发出图形用户接口 (Graphical User Interface, GUI) ,他们认为这是下一代窗口 (window) 接口,
因此就称为 X (想一想, 26 个英文本母按照顺序,W 后面出现的字母是啥? ^_^)。
这就是 X Window System 命名的由来。
那 X Window System 有啥特异功能,为何 Linux 要使用这个咚咚呢?其实 X 系统主要是架构于可利用网络的环境,
利用一个 X server 管理硬件架构,利用 X client 计算绘图数据,然后再交由 X server 来打印到屏幕上。
X client 可以是一部主机,而 X server 则可以在任何一部主机上,那就构成了网络的 X 连接了。
妳可以参考底下的图标来看:

图十六、X server 与 X client 的沟通示意图
上图有趣的地方在于, X client 可能是多个可以在 X 系统上面运作的程序,而
X server 则是可以在多种不同操作系统上面运作的程序。也就是说,妳可以在不同的操作系统上面安装 X server ,
然后通过网络的功能链接到 X client 去取得绘图数据,最后在妳的 X server 上面将桌面图标绘制出来。
这对于『远程桌面』是很有帮助的!而且一部 X client 可以让多部 X server 连接,实在是很有趣!
在缺省的 Linux distribution 上面,X server/X client 刚好在同一部机器上,所以我们可以让这个 X window system
顺利的在一部 Linux 系统上面运作的!此外,妳会看到图十六的中间图标,妳会发现怎么有个 Window Manager (WM)?
其实 Window Mananger 是个特殊的 X client ,他的功能主要是管理整个 X window system 的。
因为每个 X client 其实彼此之间并不认识对方,所以可能会造成每个 X client 的绘图图层彼此重叠,
且无法分辨每个 X client,与无法在不同 X client 之间切换。
为了解决这方面的困扰,并且增加整个 X window system 的资源管理,因此就有这个 WM 的产生了。
目前的 WM 主要有 KDE 以及 GNOME ,当然不止这些东西而且,不过目前是以这两个计划为最大,
管理接口以及画面风格也比较美观漂亮!以后您要知道的是,不同的 WM 具有不同的操作接口,
而且那也只是在 X server 上面架构出来的一个窗口管理员而已,这个窗口管理员是可变更的!
若硬要在 X window system 的各项组件上分析他的相关性,那妳可以知道的是:
- Linux 操作系统要先启动,并且驱动所有的硬件组件;
- X server 在操作系统上面启动,并可等待用户输入;
- 加载 Window Manager ,准备好窗口管理机制接口;
- 可在 WM 上面运行各种 X 的应用软件。
无论如何,妳只要知道 Linux 上面的桌面其实是由 X window system 的系统来提供的,
而 X 仅只是 Linux 上面的一组程序而已,并非操作系统,所以即使 X 死掉了,没关系,
只要 Linux 内核活着,应该就有办法重新启动 X 的!并不会造成类似『蓝色死亡画面』般的可怕现象...
来到重要的地方啦!对于操作系统来说,文件系统是非常重要的喔!因为电脑操作系统本来就是要处理一些数据,
让这些数据变成有意义的东西,那这些数据其实是放置到保存媒体上面的,那妳要由保存媒体上面存、取该数据,
就与文件系统 (file system) 有关啦!底下我们就来谈一谈这个恐怖的东西。
啥是文件系统
我们知道一颗硬盘要被使用,第一个重点是需要进行分割 (partition),分割完毕后还需要进行格式化,
那分区才能够被操作系统使用。关于分割我们知道他是硬盘本身所需要的动作,前面谈过很多了,所以这里略过。
妳应该会问的是,那为何需要格式化?格式化的意义是什么?
让我们先举个例子来说,白蚁要如何创造蚁窝?或许是这样的:
- 首先,当然是要有白蚁,包括蚁后以及白蚁工兵 (想成操作系统);
- 他们必须要选择环境,假设就是一块大木板 (想成整颗硬盘);
- 然后选择这块木板的某一个区段出来,准备要在这个区段创造蚁窝 (想成磁盘分割);
- 根据白蚁的社会,将这一区段的木板挖出适当的房间,当然是有分门别类的啦 (想成就是格式化);
- 最后白蚁们就能够利用这个蚁窝来生活啦!(操作系统运作)。
与格式化有关的重点在第四步骤,白蚁会依据他们所需要的环境来规划他们的空间,包括育婴室啦、食物储藏区啦、
一般白蚁休息区啦等等的,所以妳会发现到整个木板被『格式化』成一格一格的小房间了。
同样的,磁盘分区的格式化也差不多是这个情况,
我们会根据操作系统所需要的数据,
将硬盘依据这些准备要存放的数据来创造出保存的空间,感觉上就好像是一格一格的小房间。
此外您也必须要知道,不同的操作系统之间基本上可能不会认识彼此的文件系统的。举例来说,蜜蜂应该不知道白蚁的蚁窝结构,
白蚁应该也不知道蜜蜂的蜂窝结构,您说是吧!所以啰,您或许常常会听到,Windows 的文件系统可能无法被 Linux
抓到,同样的, Linux 的文件系统对于 Windows 来说,他可能也不会知道如何读取的!^_^
那 Linux 的文件有哪些重要数据需要保存呢?大概有两种:
- 文件属性:Linux 的文件有很多的属性,包括是否可读、可写、可运行,以及文件所属人、所属群组,
每个文件所创建、修改过的时间等等,都算是文件的属性。
- 文件内容:例如文本档内的文本,数据库文件内的数据,这些就是所谓的文件内容。
为了要存放文件的这两种数据,因此 Linux 的文件系统在格式化的时候,通常得要针对这两种数据来规范出区块才行。
Linux 的文件系统通常需要这几个东西:
- inode:inode 的区块主要在保存文件的属性,每个 inode 有 128bytes 这么大,
而且其中除了属性之外,还会记录该文件的内容所在的 block 区块位置。请注意,每个 inode 都是有号码的;
- block:就是文件内容放置的地方,标准的 block 一个约 4Kbytes 这么大,
同样的,每个 block 都有号码喔!这个号码可以被记录到 inode 里头去,
这样文件才会知道他的内容被放置到那个 block 区块;
- Super block:超级区块,这个区块可以记录整个文件系统的重要数据与中介数据。
重要数据报括总共有多少 inode/block,被使用掉的与剩余的 inode/block 等等。
整个分区的格式化结果,造成的文件系统有如底下所示:

图十七、文件系统示意图
如图十七所示,在 inode table 及 block area 当中,其实是被切成好像许多小隔间的样子,在 inode 里面记录文件的属性,
在 block 内则是记录文件的实际内容。但能不能读取这个文件系统,则与驱动程序 (模块) 有关。
常见的 Windows 文件系统主要有:
常见的 Linux 文件系统主要有:
基本上, FAT 与 vfat 是一样的东西,所以在缺省的状态下,同样的 FAT partition 可以同时被 Windows/Linux 所支持,
这也是为何国家考试中的丙级电脑装修会考一题实作,是要将某个 partition 做成 FAT 好让多重开机操作系统可以同时支持之故。
那妳会问, Linux 真的不能读 NTFS ?而 Windows 真的不能读 Ext2/ext3 文件系统吗?其实是可以啦!
某些团体有推出一些驱动程序 (模块),通过这些模块的帮忙,Linux 可以读到 NTFS 的文件系统内容,
而 Windows 可以读到 Ext2/ext3 的文件系统说。
啥是 Linux 目录树数据架构?
在前一小节我们谈到了 inode 与 block 这两个东西,也知道了文件的数据其实是(1)属性与(2)内容两者,
而我们可以通过 inode 记录的 block 号码来取得文件的属性与内容数据。所以,其实我们只要知道
inode 号码就能够知道一个文件的完整数据了。可是你有没有想到一件事,
那就是『
我怎么知道某一个文件的属性是记录在那个 inode 号码上?』
此时就得要通过目录树了 (directory tree)。
如同前面提到的,Linux 已经没有所谓的设备名称了,所以当然也没有 C, D... 槽。那么我们的文件要如何放置?
其实 Linux (或 Unix-Like, 类 Unix 系统) 使用的是目录树。最顶层的目录为根目录 (/) ,所有的目录都在这个根目录之后。
这个目录树也是整个文件的基础!如果你以文件总管的想法来思考的话,如同下图所示:

图十八、文件总管的目录示意图
在图十八中方框圈选起来的部分,那就是目录!而文件总管中最顶层的目录称为『桌面』,那在 Linux 底下则是根目录。
妳可以使用下图来稍微了解一下目录树的概念:

图十九、Linux 系统的目录树示意图
仔细看一下图十九的内容,第一行有个 bin ,倒数第二行也有个 bin ,那么相同文件名可以同时存在吗?
其实这两个文件是不同文件名的喔!因为两者分别是:
看出不同了吧?因为他们如果从根目录写起的话,该文件名就会变成独一无二的了!所以说,最顶层这个根目录是真的很重要啊!
然后要知道的是,那这个目录树是怎么跟分区链接在一起啊?
文件系统与目录树的关系(挂载)
我们知道 Windows 的分区是以 C, D...
等的方式来处理的,而这个 C, D... 则是挂在『我的电脑』底下,那 Linux 的目录树与分区的关系又如何?

图二十、目录树与分区之间的相关性
如上图,假设我的硬盘分为两槽,由于根目录一定要存在,所以我们可以将根目录想成是一个『进入点』,
也就是说,所有的根目录底下的文件都是来自于 partition 1 的意思。因此,我们只要知道根目录与 partition 1
之间的 inode 对应,那么就能够依序推出所有文件的 inode 号码了!因为每个目录与文件之间都有相关性嘛!
那如果你想要有第二个 partition 呢?如上图所示,我将 /home 独立出来另一个 partition 2 的分区,
那 /home 这个目录又成为一个进入点了,所有在 /home 底下的数据都是放到 partition 2 当中的。
其实判断某个文件在那个 partition 底下是很简单的,通过反向追踪即可。以上图二十来说,
当我想要知道 /home/vbird/test 这个文件在那个 partition 时,由 test --> vbird --> home --> / ,
看那个『进入点』先被查到,那就是使用的进入点了。所以 test 使用的是 /home 这个进入点而不是 / 喔!
在 Linux 的专业术语方面,我们将 / 与 partition 1 的关系称为『挂载 (mount)』,
而根目录就被称为『挂载点』了。
挂载点一定是目录,这个不要忘记了。
现在让我们来想一想,那我的电脑如何读取光盘呢?这个很重要吧!
在 Windows 里面使用的是『光驱』的代号方式处理(假设为 E 槽时),但在 Linux 底下我们依旧使用目录树喔!
在缺省的情况下, Linux 是将光驱的数据放置到 /media/cdrom 里头去的,照这样来说,
如果光盘片里面有个文件文件名为『我的文件』时,那么这个文件是在哪里?
- Windows:桌面\我的电脑\E:\我的文件
- Linux: /medai/cdrom/我的文件
不过以『挂载』来说,如果我将这个光盘片挂载到 /mnt 这个挂载点呢? (假设有 /mnt 这个目录存在时),
那个文件最终会在哪里?如果你能够说出『在 /mnt/我的文件』,这表示您已经知道挂载的意义了!
这里最容易搞混,因为他与 Windows 的分区代号完全不一样!