鸟哥的Linux私房菜 总结索引 | 第0章:计算机概论

1、电脑:辅助人脑的好工具

整部主机的重点在于中央处理器 ,CPU 为一个具有特定功能的芯片, 里头含有微指令集,如果你想要让主机进行什么功能,就得要参考这颗 CPU 是否有相关内置的微指令集才可以

在 CPU 内又可分为两个主要的单元,分别是: 算数逻辑单元与控制单元。其中算数逻辑单元主要负责程序运算与逻辑判断,控制单元则主要在协调各周边元件与各单元间的工作

内存内的数据则是从输入单元所传输进来,而 CPU 处理完毕的数据也必须要先写回内存中,最后数据才从内存传输到输出单元

1.1 计算机硬件的五大单元

电脑是由几个单元所组成的,包括输入单元、 输出单元、CPU 内部的控制单元、算数逻辑单元与内存五大部分
五个组成部分的关系
重点在于 CPU 与内存。基本上数据都是流经过内存再转出去的, 至于数据会流进/流出内存则是 CPU 所发布的控制命令,而 CPU 实际要处理的数据则完全来自于内存

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

所使用的软件都要经过 CPU 内部的微指令集来达成才行
两种主要 CPU 架构,分别是:精简指令集 (RISC) 与复杂指令集 (CISC) 系统

精简指令集
这种 CPU 的设计中,微指令集较为精简,每个指令的执行时间都很短,完成的动作也很单纯,指令的执行性能较佳; 但是若要做复杂的事情,就要由多个指令来完成

复杂指令集
在微指令集的每个小指令可以执行一些较低阶的硬件操作,指令数目多而且复杂, 每条指令的长度并不相同。因为指令执行较为复杂所以每条指令花费的时间较长, 但每条个别指令可以处理的工作较为丰富

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

不同的x86架构的CPU有什么差异呢?除了CPU的整体结构(如第二层高速缓存、每次运行可执行的指令数等)之外, 主要是在于微指令集的不同。新的x86的CPU大多含有很先进的微指令集, 这些微指令集可以加速多媒体程序的运行,也能够加强虚拟化的性能,而且某些微指令集更能够增加能源效率

1.3 其他单元的设备

除了最重要的控制、算术逻辑被整合到 CPU 的封装中,系统单元,存储单元,输入、输出单元
主板=神经系统:好像人类的神经一样,将所有重要的元件连接起来

1.6 电脑上面常用的计算单位 (容量、速度等)

容量单位
0/1 这个二进制的的单位我们称为 bit,1 Byte = 8 bits
文件大小使用的是二进制的方式,所以 1GBytes 的文件大小实际上为:1024x1024x1024Bytes 这么大! 速度单位则常使用十进制,例如 1GHz 就是 1000x1000x1000Hz 的意思
计算单位
速度单位
CPU的运算速度常使用 MHz 之类的单位,这个 Hz 其实就是秒分之一。而在网络传输方面,由于网络使用的是 bit 为单位,因此网络常使用的单位为 Mbps 是 Mbits per second,亦即是每秒多少 Mbit

2、个人电脑架构与相关设备元件

个人电脑架构与相关设备元件

在主板上面沟通各部元件的芯片组,早期的芯片组通常分为两个桥接器来控制各元件的沟通, 分别是:(1)北桥:负责链接速度较快的CPU、内存与显卡接口等元件;(2)南桥:负责连接速度较慢的设备接口, 包括硬盘、USB、网卡等等

由于北桥最重要的就是 CPU 与内存之间的桥接,因此目前的主流架构中, 大多将北桥内存控制器整合到 CPU 封装当中了,所以图中没有

2.1 执行脑袋运算与判断的 CPU

频率就是CPU每秒钟可以进行的工作次数

CPU的工作频率:外频与倍频
因为所有的设备 都得通过北桥来链接,因此每个设备的工作频率应该要相同。 于是就有 前端总线 (FSB) 的产生。但因为 CPU 的运算速度比其他的设备都要来的快,又为了要满足 FSB 的频率,因此厂商就在 CPU 内部再进行加速, 于是就有所谓的外频与倍频了
所谓的外频指的是CPU与外部元件进行数据传输时的速度,倍频则是 CPU 内部用来加速工作性能的一个倍数, 两者相乘才是CPU的频率速度

所谓的超频指的是: 将CPU的倍频或者是外频通过主板的设置功能更改成较高频率的一种方式。但因为CPU的倍频通常在出厂时已经被锁定而无法修改, 因此较常被超频的为外频

新的 CPU 设计中, 已经将内存控制器整合到 CPU 内部,可以让 CPU 直接与内存、显卡等设备分别进行沟通,而不需要通过外部的链接芯片了
因为现在没有所谓的北桥了 (整合到 CPU 内),因此,CPU 的频率设计就无须考虑得要同步的外频,只需要考虑整体的频率即可

32位与64位的CPU与总线“宽度”
与 CPU 的频率类似的,内存也是有其工作的频率,这个频率限制还是来自于 CPU 内的内存控制器所决定的
CPU 内置的内存控制芯片对内存的工作频率1600MHz,每次频率能够传输的数据量,大多为 64 位,这个 64 位就是 “宽度”
与总线宽度相似的,CPU每次能够处理的数据量称为字组大小, 字组大小依据CPU的设计而有32位与64位

超线程
在每一个 CPU 内部将重要的寄存器分成两群, 而让程序分别使用这两群寄存器。也就是说,可以有两个程序“同时竞争 CPU 的运算单元”,而非通过操作系统的多任务切换

2.2 内存

动态随机存取内存, 随机存取内存只有在通电时才能记录与使用,断电后数据就消失了
DDR是所谓的双倍数据传送速度, 他可以在一次工作周期中进行两次数据的传送

内存除了频率/带宽与型号需要考虑之外,内存的容量也是很重要

如果内存容量不够大的话将会导致某些大容量数据无法被完整的载入, 此时已存在内存当中但暂时没有被使用到的数据必须要先被释放,使得可用内存容量大于该数据,那份新数据才能够被载入。 所以,通常越大的内存代表越快速的系统,这是因为系统不用常常释放一些内存内部的数据。 以服务器来说,内存的容量有时比CPU的速度还要来的重要的

多通道设计
内存的数据宽度当然是越大越好,传统的总线宽度一般大约仅达64位,为了要加大这个宽度,因此芯片组厂商就将两个内存汇整在一起, 如果一支内存可达64位,两支内存就可以达到128位了

DRAM与SRAM
CPU到内存之间还是得要通过内存控制器,如果某些很常用的程序或数据可以放置到CPU内部的话,那么CPU数据的读取就不需要跑到内存重新读取了
因为第二层高速缓存(L2 cache)整合到CPU内部,因此这个L2内存的速度必须要CPU频率相同。 使用DRAM是无法达到这个频率速度的,此时就需要静态随机存取内存(SRAM)的帮忙了。 SRAM在设计上使用的电晶体数量较多,价格较高,且不易做成大容量

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

这个内存芯片在没有通电时也能够将数据记录下来,那就是只读存储器。 ROM是一种非挥发性的内存(非挥发性内存在断电后仍然可以保持数据)
很多的硬件上头都会有ROM来写入固件这个软件
其主要特点是在正常操作时无法被改写。ROM中的数据通常由制造商在生产时预先存储,并且在普通使用情况下,用户无法对其进行修改。这使得ROM适用于存储固定的程序代码、固件和其他静态数据,这些数据在设备生命周期内保持不变

内存通常对应RAM,而SSD通常对应的是ROM(约定俗成叫法)

2.3 显卡

显卡主要也是通过CPU的控制芯片来与CPU、内存等沟通

2.4 硬盘与储存设备

固态硬盘
传统硬盘有个很致命的问题,就是需要驱动马达去转动盘片,这会造成很严重的磁盘读取延迟
在读写磁盘时,通常没有连续读写,大部分的情况下都是读写一大堆小文件

2.6 主板

I/O位址有点类似每个设备的门牌号码,每个设备都有他自己的位址,一般来说,不能有两个设备使用同一个I/O位址, 否则系统就会不晓得该如何运行这两个设备了

如果I/O位址想成是各设备的门牌号码的话,那么IRQ就可以想成是各个门牌连接到邮件中心(CPU)的专门路径。各设备可以通过IRQ中断信道来告知CPU该设备的工作情况,以方便CPU进行工作分配的任务

芯片组与扩展卡之间的关系
CMOS主要的功能为记录主板上面的重要参数, 包括系统时间、CPU电压与频率、各项设备的I/O位址与IRQ等,由于这些数据的记录要花费电力,因此主板上面才有电池。 BIOS为写入到主板上某一块 flash 或 EEPROM 的程序,他可以在开机的时候执行,以载入CMOS当中的参数, 并尝试调用储存设备中的开机程序,进一步进入操作系统当中。BIOS程序也可以修改CMOS中的数据

3 数据表示方式

3.1 数字系统

早期的电脑使用的是利用通电与否的特性的真空管,如果通电就是1,没有通电就是0, 后来沿用至今
以十进制来解释
3456 = 3x103 + 4x102 + 5x101 + 6x100
1101010的数值转为十进制的话
1101010=1x26 + 1x25 + 0x24 + 1x23 + 0x22 + 1x21 + 0x20 = 64 + 32 + 0x16 + 8 + 0x4 + 2 + 0x1 = 106
知道二进制转成十进制后,那如果有十进制数值转为二进制的环境时,该如何计算? 刚刚是乘法,现在则是除法。我们同样的使用十进制的106转成二进制来测试一下好了:
二进制转十进制
最后的写法就如同上面的红色箭头,由最后的数字向上写,因此可得到1101010的数字

3.2 文字编码系统

事实上文字文件也是被记录为0与1而已,而这个文件的内容要被取出来查阅时,必须要经过一个编码系统的处理才行。 所谓的“编码系统”可以想成是一个“字码对照表”
常用的英文编码表为ASCII系统,这个编码系统中, 每个符号(英文、数字或符号等)都会占用1Bytes的记录, 因此总共会有28=256种变化
由国际组织ISO/IEC跳出来制订了 Unicode编码系统,即UTF8或万国码的编码。因为这个编码系统打破了所有国家的不同编码

4 软件程序运行

目前的电脑系统将软件分为两大类,一个是系统软件,一个是应用程序

4.1 机器程序与编译程序

当你需要将运行的数据写入内存中,你就得要自行分配一个内存区块出来让自己的数据能够填上去, 所以你还得要了解到内存的位址是如何定位的
为了要克服硬件方面老是需要重复撰写控制码的问题,所以就有了操作系统

4.2 操作系统

操作系统 其实也是一组程序, 这组程序的重点在于管理电脑的所有活动以及驱动系统中的所有硬件
操作系统的功能就是让CPU可以开始判断逻辑与运算数值、 让内存可以开始载入/读出数据与程序码、让硬盘可以开始被存取、让网卡可以开始传输数据、 让所有周边可以开始运行等等

操作系统核心
核心主要在管控硬件与提供相关的能力(例如存取硬盘、网络功能、CPU资源取得等), 这些管理的动作是非常的重要的,如果使用者能够直接使用到核心的话,万一使用者不小心将核心程序停止或破坏, 将会导致整个系统的崩溃!因此核心程序所放置到内存当中的区块是受保护的! 并且开机后就一直常驻在内存当中

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

电脑系统主要由硬件构成,然后核心程序主要在管理硬件,提供合理的电脑系统资源分配(包括CPU资源、内存使用资源等等), 因此只要硬件不同(如x86架构与RISC架构的CPU),核心就得要进行修改才行。 而由于核心只会进行电脑系统的资源分配,所以在上头还需要有应用程序的提供,使用者才能够操作系统的
为了保护核心,并且让程序设计师比较容易开发软件,因此操作系统除了核心程序之外,通常还会提供一整组开发接口, 那就是系统调用层。软件开发工程师只要遵循公认的系统调用参数来开发软件,该软件就能够在该核心上头运行
只要能够让计算机硬件正确无误的运行,那就算是操作系统了。所以说, 操作系统其实就是核心与其提供的接口工具

操作系统的核心层直接参考硬件规格写成, 所以同一个操作系统程序不能够在不一样的硬件架构下运行
操作系统只是在管理整个硬件资源,包括CPU、内存、输入输出设备及文件系统文件。 如果没有其他的应用程序辅助,操作系统只能让电脑主机准备妥当(Ready)而已

应用程序的开发都是参考操作系统提供的开发接口, 所以该应用程序只能在该操作系统上面运行而已,不可以在其他操作系统上面运行的

核心功能
既然核心主要是在负责整个电脑系统相关的资源分配与管理,那我们知道其实整部电脑系统最重要的就是CPU与内存, 因此,核心至少也要有这些功能的:
系统调用接口 为了方便程序开发者可以轻易的通过与核心的沟通,将硬件的资源进一步的利用

程序管理“多任务环境”,一部电脑可能同时间有很多的工作跑到CPU等待运算处理, 核心这个时候必须要能够控制这些工作,让CPU的资源作有效的分配。另外, 良好的CPU调度机制(就是CPU先运行那个工作的排列顺序)将会有效的加快整体系统性能
内存管理 控制整个系统的内存管理,系统所有的程序码与数据都必须要先存放在内存当中。 通常核心会提供虚拟内存的功能,当内存不足时可以提供内存交换的功能

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

设备的驱动 就如同上面提到的,硬件的管理是核心的主要工作之一,设备的驱动程序就是核心需要做的事情

驱动程序的提供应该是硬件厂商的事情。硬件厂商要推出硬件时,应该要自行参考操作系统的驱动程序开发接口, 开发完毕后将该驱动程序连同硬件一同贩卖给使用者

操作系统与驱动程序
操作系统必须要能够驱动硬件,如此应用程序才能够使用该硬件功能
一般来说,操作系统会提供开发接口,让开发商制作他们的驱动程序
要使用新硬件功能,必须要安装厂商提供的驱动程序才行
驱动程序是由厂商提供的,与操作系统开发者无关

  • 19
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值