• 欢迎来到本博客,希望可以y一起学习与分享

Linux鸟哥私房菜 基础篇(第四版)笔记(一)

笔记 benz 3年前 (2018-09-13) 98次浏览 0个评论 扫描二维码
文章目录[隐藏]

第零章 计算机概论

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


计算机是由几个单元所组成的,包括输入单元、 输出单元、CPU 内部的控制单元、算数逻辑单元与主存储器五大部分。 这几个东西的相关性如下所示:

计算机的五大单元

上面图标中的『系统单元』其实指的就是计算机机壳内的主要组件,而重点在于 CPU 与主存储器。 特别要看的是实线部分的传输方向,基本上数据都是流经过主存储器再转出去的! 至于数据会流进/流出内存则是 CPU 所发布的控制命令!而 CPU 实际要处理的资料则完全来自于主存储器 (不管是程序还是一般文件数据)!这是个很重要的概念喔! 这也是为什么当你的内存不足时,系统的效能就很糟糕!

一切设计的起点: CPU 的架构

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

精简指令集 (Reduced Instruction Set Computer, RISC)

这种 CPU 的设计中,微指令集较为精简,每个指令的运行时间都很短,完成的动作也很单纯,指令的执行效能较佳; 但是若要做复杂的事情,就要由多个指令来完成。
目前世界上使用范围最广的 CPU 可能就是 ARM 这种架构的呢!

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

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

所谓的位指的是 CPU 一次数据读取的最大量!64 位 CPU 代表 CPU 一次可以读写 64bits这么多的数据,32 位 CPU 则是 CPU 一次只能读取 32 位的意思。 因为 CPU 读取数据量有限制,因此能够从内存中读写的数据也就有所限制。所以,一般 32 位的 CPU 所能读写的最大数据量,大概就是 4GB 左右。

例题:
最新的 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 这个二进制的的单位我们称为 bit。 但 bit 实在太小了,所以在储存数据时每份简单的数据都会使用到 8 个 bits 的大小来记录,因此定义出 byte 这个单位,他们的关系为:
1 Byte = 8 bits

速度单位

CPU 的指令周期常使用 MHz 或者是 GHz 之类的单位,这个 Hz 其实就是秒分之一。而在网络传输方面,由于网络使用的是 bit 为单位,因此网络常使用的单位为 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.1、Intel 芯片架构

由于主板是链接各组件的一个重要项目,因此在主板上面沟通各部组件的芯片组设计优劣,就会影响效能不少喔!早期的芯片组通常分为两个网桥来控制各组件的沟通, 分别是:(1)北桥:负责链接速度较快的 CPU、主存储器与显示适配器界面等组件;(2)南桥:负责连接速度较慢的装置接口, 包括硬盘、USB、网络卡等等。不过由于北桥最重要的就是 CPU 与主存储器之间的桥接,因此目前的主流架构中, 大多将北桥内存控制器整合到 CPU 封装当中了。所以上图你只会看到 CPU 而没有看到以往的北桥芯片喔!

早期芯片组分南北桥,北桥可以连接 CPU、主存储器与显示适配器。只是 CPU 要读写到主存储器的动作,还需要北桥的支持,也就是 CPU 与主存储器的交流, 会瓜分掉北桥的总可用带宽,真浪费!因此目前将记忆控制器整合到 CPU 后,CPU 与主存储器之间的沟通是直接交流,速度较快之外,也不会消耗更多的带宽!


图 0.2.2、ASUS 主板

执行脑袋运算与判断的 CPU

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

注意,不同的 CPU 之间不能单纯的以频率来判断运算效能喔!这是因为每颗 CPU 的微指令集不相同,架构也不见得一样,可使用的第二层快取及其计算器制可能也不同, 加上每次频率能够进行的工作指令数也不同!所以,频率目前仅能用来比较同款 CPU 的速度!

CPU 的工作频率:外频与倍频

早期的 CPU 架构主要透过北桥来链接系统最重要的 CPU、主存储器与显示适配器装置。因为所有的设备都得掉透过北桥来连结,因此每个设备的工作频率应该要相同。 于是就有所谓的前端总线 (FSB) 这个东西的产生。但因为 CPU 的指令周期比其他的设备都要来的快,又为了要满足 FSB 的频率,因此厂商就在 CPU 内部再进行加速, 于是就有所谓的外频与倍频了。
总结来说,在早期的 CPU 设计中,所谓的外频指的是 CPU 与外部组件进行数据传输时的速度,倍频则是 CPU 内部用来加速工作效能的一个倍数, 两者相乘才是 CPU 的频率速度。例如 Intel Core 2 E8400 的内频为 3.0GHz,而外频是 333MHz,因此倍频就是 9 倍啰!(3.0G=333Mx9, 其中 1G=1000M)

很多计算机硬件玩家很喜欢玩『超频』,所谓的超频指的是: 将 CPU 的倍频或者是外频透过主板的设定功能更改成较高频率的一种方式。但因为 CPU 的倍频通常在出厂时已经被锁定而无法修改, 因此较常被超频的为外频。
举例来说,像上述 3.0GHz 的 CPU 如果想要超频, 可以将他的外频 333MHz 调整成为 400MHz,但如此一来整个主板的各个组件的运作频率可能都会被增加成原本的 1.333 倍(4/3), 虽然 CPU 可能可以到达 3.6GHz,但却因为频率并非正常速度,故可能会造成当机等问题。

但如此一来所有的数据都被北桥卡死了,北桥又不可能比 CPU 更快,因此这家伙常常是系统效能的瓶颈。为了解决这个问题,新的 CPU 设计中, 已经将内存控制器整合到 CPU 内部,而链接 CPU 与内存、显示适配器的控制器的设计,在 Intel 部份使用 QPI (Quick Path Interconnect) 与 DMI 技术,而 AMD 部份则使用 Hyper Transport 了,这些技术都可以让 CPU 直接与主存储器、显示适配器等
设备分别进行沟通,而不需要透过外部的链接芯片了。
因为现在没有所谓的北桥了 (整合到 CPU 内),因此,CPU 的频率设计就无须考虑得要同步的外频,只需要考虑整体的频率即可。 所以,如果你经常有查阅自己 CPU 频率的习惯,当使用 cpu-z这个软件时,应该会很惊讶的发现到,怎么外频变成 100MHz 而倍频可以到达 30 以上!相当有趣呢!
现在 Intel 的 CPU 会主动帮妳超频喔!例如 i7-4790 这颗 CPU 的规格中,基本频率为 3.6GHz,但是最高可自动超频到 4GHz 喔! 透过的是 Intel 的 turbo 技术。同时,如果你没有大量的运算需求,该 CPU 频率会降到 1.xGHz 而已,藉此达到节能省电的目的!所以,各位好朋友, 不需要自己手动超频了!Intel 已经自动帮妳进行超频了…所以,如果妳用 cpu-z 观察 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 的内存。

得利于北桥整合到 CPU 内部的设计,CPU 得以『个别』跟各个组件进行沟通!因此,每种组件与 CPU 的沟通具有很多不同的方式!例如主存储器使用系统总线带宽来与 CPU 沟通。而显示适配器则透过 PCI-E 的序列通道设计来与 CPU 沟通喔!

CPU 等级

基本上,在 Intel Pentium MMX 与 AMD K6年代的 CPU 称为 i586 等级, 而 Intel Celeron 与 AMD Athlon(K7)年代之后的 32 位 CPU 就称为 i686等级。 至于目前的 64 位 CPU 则统称为 x86_64 等级。

超线程 (Hyper-Threading, HT)

我们知道现在的 CPU 指令周期都太快了,因此运算核心经常处于闲置状态下。而我们也知道现在的系统大多都是多任务的系统, 同时间有很多的程序会让 CPU 来执行。因此,若 CPU 可以假象的同时执行两个程序,不就可以让系统效能增加了吗?反正 CPU 的运算能力还是没有用完啊!
那是怎么达成的啊这个 HT 功能?强者鸟哥的同事蔡董大大用个简单的说明来解释。在每一个 CPU 内部将重要的缓存器 (register) 分成两群, 而让程序分别使用这两群缓存器。也就是说,可以有两个程序『同时竞争 CPU 的运算单元』,而非透过操作系统的多任务切换! 这一过程就会让 CPU 好像『同时有两个核心』的模样!因此,虽然大部分 i7 等级的 CPU 其实只有四个实体核心,但透过 HT 的机制, 则操作系统可以抓到八个核心!并且让每个核心逻辑上分离,就可以同时运作八个程序了。
虽然很多研究与测试中,大多发现 HT 虽然可以提升效能,不过,有些情况下却可能导致效能降低喔!因为,实际上明明就仅有一个运算单元嘛!

内存

前面提到 CPU 所使用的数据都是来自于主存储器(main memory),不论是软件程序还是数据,都必须要读入主存储器后 CPU 才能利用。 个人计算机的主存储器主要组件为动态随机存取内存(Dynamic Random Access Memory, DRAM), 随机存取内存只有在通电时才能记录与使用,断电后数据就消失了。因此我们也称这种 RAM 为挥发性内存。
DRAM 根据技术的更新又分好几代,而使用上较广泛的有所谓的 SDRAM 与 DDR SDRAM 两种。 这两种内存的差别除了在于脚位与工作电压上的不同之外,DDR 是所谓的双倍数据传送速度(Double Data Rate), 他可以在一次工作周期中进行两次数据的传送,感觉上就好像是 CPU 的倍频啦! 所以传输频率方面比 SDRAM 还要好。新一代的 PC 大多使用 DDR 内存了。 下表列出 SDRAM 与 DDR SDRAM 的型号与频率及带宽之间的关系。

DDR SDRAM 又依据技术的发展,有 DDR, DDR2, DDR3, DDR4 等等,其中,DDR2 的频率倍数则是 4 倍而 DDR3 则是 8 倍喔!

DRAM 与 SRAM

如果某些很常用的程序或数据可以放置到 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 对于个人计算机来说是非常重要的, 因为他是系统在开机的时候首先会去读取的一个小程序喔!
BIOS 对计算机系统来讲是非常重要的,因为他掌握了系统硬件的详细信息与开机设备的选择等等。但是计算机发展的速度太快了, 因此 BIOS 程序代码也可能需要作适度的修改才行,所以你才会在很多主板官网找到 BIOS 的更新程序啊!但是 BIOS 原本使用的是无法改写的 ROM ,因此根本无法修正 BIOS 程序代码!为此,现在的 BIOS 通常是写入类似闪存 (flash) 或 EEPROM中。

显示适配器

一些 3D 的运算早期是交给 CPU 去运作的,但是 CPU 并非完全针对这些 3D 来进行设计的,而且 CPU 平时已经非常忙碌了呢! 所以后来显示适配器厂商直接在显示适配器上面嵌入一个 3D 加速的芯片,这就是所谓的 GPU 称谓的由来。
显示适配器主要也是透过 CPU 的控制芯片来与 CPU、主存储器等沟通。如前面提到的,对于图形影像(尤其是 3D 游戏)来说, 显示适配器也是需要高速运算的一个组件,所以数据的传输也是越快越好!因此显示适配器的规格由早期的 PCI 导向 AGP, 近期 AGP 又被 PCI-Express 规格所取代了。如前面华硕主板图示当中看到的就是 PCI-Express 的插槽。 这些插槽最大的差异就是在数据传输的带宽了!如下所示:

比较特殊的是,PCIe(PCI-Express)使用的是类似管线的概念来处理,在 PCIe 第一版 (PCIe 1.0) 中,每条管线可以具有 250MBytes/s 的带宽效能, 管线越多(通常设计到 x16 管线)则总带宽越高!另外,为了提升更多的带宽,因此 PCIe 还有进阶版本,目前主要的版本为第三版,相关的带宽如下:

若以图 0.2.2 的主板为例,它使用的是 PCIe 3.0 的 16x,因此最大带宽就可以到达接近 32Gbytes/s 的传输量! 比起 AGP 是快很多的!好可怕的传输量….

例题:
假设你的桌面使用 1024×768 分辨率,且使用全彩(每个像素占用 3bytes 的容量),请问你的显示适配器至少需要多少内存才能使用这样的彩度?
答:
因为 1024×768 分辨率中会有 786432 个像素,每个像素占用 3bytes,所以总共需要 2.25MBytes 以上才行! 但如果考虑屏幕的更新率(每秒钟屏幕的更新次数),显示适配器的内存还是越大越好!

硬盘与储存设备

硬盘的物理组成

在硬盘盒里面其实是由许许多多的圆形磁盘盘、机械手臂、 磁盘读取头与主轴马达所组成的,整个内部如同下图所示:


图 0.2.4、硬盘物理构造

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

磁盘盘上的数据


磁盘盘上的数据格式

由于磁盘盘是圆的,并且透过机器手臂去读写数据,磁盘盘要转动才能够让机器手臂读写。因此,通常数据写入当然就是以圆圈转圈的方式读写啰! 所以,当初设计就是在类似磁盘盘同心圆上面切出一个一个的小区块,这些小区块整合成一个圆形,让机器手臂上的读写头去存取。 这个小区块就是磁盘的最小物理储存单位,称之为扇区 (sector),那同一个同心圆的扇区组合成的圆就是所谓的磁道(track)。 由于磁盘里面可能会有多个磁盘盘,因此在所有磁盘盘上面的同一个磁道可以组合成所谓的磁柱 (cylinder)。
我们知道同心圆外圈的圆比较大,占用的面积比内圈多啊!所以,为了善用这些空间,因此外围的圆会具有更多的扇区! 就如同图 0.2.5 的示意一般。此外,当磁盘盘转一圈时,外圈的扇区数量比较多,因此如果数据写入在外圈,转一圈能够读写的数据量当然比内圈还要多! 因此通常数据的读写会由外圈开始往内写的喔!这是默认值啊!
另外,原本硬盘的扇区都是设计成 512byte 的容量,但因为近期以来硬盘的容量越来越大,为了减少数据量的拆解,所以新的高容量硬盘已经有 4Kbyte 的扇区设计! 购买的时候也需要注意一下。也因为这个扇区的设计不同了,因此在磁盘的分区方面,目前有旧式的 MSDOS 兼容模式,以及较新的 GPT 模式喔! 在较新的 GPT 模式下,磁盘的分区通常使用扇区号码来设计,跟过去旧的 MSDOS 是透过磁柱号码来分区的情况不同喔!相关的说明我们谈到磁盘管理 (第七章) 再来聊!

传输界面

SATA 界面

目前主流都是使用 SATA3 这个界面速度可达 600Mbyte/s 的界面!

因为 SATA 传输界面传输时,透过的数据算法的关系,当传输 10 位编码时,仅有 8 位为数据,其余 2 位为检验之用。因此带宽的计算上面, 使用的换算 (bit 转 byte) 为 1:10 而不是 1byte=8bits 喔!上表的对应要稍微注意一下。另外,虽然这个 SATA3 界面理论上可达 600Mbytes/s 的传输速度, 不过目前传统的硬盘由于其物理组成的限制,一般极限速度大约在 150~200Mbyte/s 而已啦!所以厂商们才要发展固态硬盘啊! ^_^

SAS 界面

早期工作站或大型大脑上面,为了读写速度与稳定度,因此在这样的机器上面,大多使用的是 SCSI 这种高阶的连接接口。 不过这种接口的速度后来被 SATA 打败了!

USB 界面


跟 SATA 界面一样,不是理论速度到达该数值,实际上就可以跑到这么高!USB 3.0 虽然速度很快,但如果妳去市面上面买 USB 的传统磁盘或快闪碟, 其实他的读写速度还是差不多在 100Mbytes/s 而已啦!不过这样就超级快了!因为一般 USB2.0 的快闪碟读写速度大约是 40Mbytes/10Mbytes 左右而已说。

固态硬盘 (Solid State Disk, SSD)

固态硬盘最大的好处是,它没有马达不需要转动,而是透过内存直接读写的特性,因此除了没数据延迟且快速之外,还很省电! 不过早期的 SSD 有个很重要的致命伤,就是这些闪存有『写入次数的限制』在,因此通常 SSD 的寿命大概两年就顶天了!所以数据存放时, 需要考虑到备份或者是可能要使用 RAID 的机制来防止 SSD 的损毁


文章 Linux鸟哥私房菜 基础篇(第四版)笔记(一) 转载需要注明出处
喜欢 (0)

您必须 登录 才能发表评论!