鸟哥的Linux私房菜第零章

CPU从主存中读取数据通过微指令集控制和进行计算。主存储器内的数据则是从输入单元所传输进来,而CPU处理完毕的数据也必须要先写回主存储器中, 最后数据才从主存储器传输到输出单元。
内存又称主存,是CPU能直接寻址的存储空间,由半导体器件制成。内存的特点是存取 速度快。内存是电脑中的主要部件,它是相对于外存而言的。
存储器的种类很多,按其用途可分为主存储器和辅助存储器,硬盘与光盘、U盘一样属于辅助存储器。
CPU 的种类 通过指令集区分
指令集主要分为精简指令集RISC和复杂指令集CISC
精简指令集执行速度快,通过简单的指令组合实现复杂功能。实现这类指令集的主要有手机上的ARM架构如升阳(Sun)公司的 SPARC 系列、 IBM 公司的 Power Architecture(包括 PowerPC)系列
复杂指令集指令数目多而且复杂, 每条指令的长度并不相同。因为指令执行较为复杂所以每条指令花费的时间较长, 但每条个别指令可以处理的工作较为丰富。常见的 CISC 微指令集 CPU 主要有 AMD、Intel、VIA 等的 x86 架构的CPU
CPU 的指令周期常使用 MHz 或者是GHz之类的单位,这个Hz其实就是秒分之一。而在网络传输方面,由于网络使用的是 bit 为单位,因此网络常使用的单位为 Mbps 是 Mbits per second,亦即是每秒多少 Mbit
关于主板:主板主要包括CPU 南北桥芯片(总线芯片组) 主存储器 磁盘 适配器 接口
南北桥芯片 各个组件都是透过北桥与南桥所连接在一起,然后连接CPU进行处理 北桥芯片就是主板上离CPU最近的芯片,这主要是考虑到北桥芯片与处理器之间的通信最密切,为了提高通信性能而缩短传输距离。南桥芯片负责I/O总线之间的通信,如PCI总线、USB、LAN、ATA
现在主板芯片组中北桥芯片的数量要远远多于南桥芯片。就像一群人共同在处理一个连续作业一般,如果这一群人里面有个人的动作特别快或特别慢,将导致前面或者是后面的人事情一堆处理不完!也就是说,这一群人最好能够速度一致较佳!所以,CPU与外部各组件的速度理论上应该要一致才好。
倍频超频与外频所谓的外频指的是CPU与外部组件进行数据传输时的速度,倍频则是CPU内部用来加速工作效能的一 个倍数, 两者相乘才是 CPU 的频率速度。频率是3.0GHz,而外频是333MHz,因此倍频就是9倍啰!(3.0G=333Mx9, 其中1G=1000M)像上述3.0GHz的CPU如果想要超频,可以将他的外频333MHz调整成为400MHz,但如此一来整个主板的各个组件的运作频率可能都会被增加成原本的 1.333 倍(4/3).

32 位与 64 位
前端总线表示CPU与北桥芯片的传输速度。
至于外频与前端总线,北桥所支持的频率我们称为前端总线速度(FrontSideBus,FSB),而每次传送的位数则是总线宽度。那所谓的总线带宽则是:『FSBx 总线宽度』/8亦即每秒钟可传送的最大数据量。 目前常见的总线宽度有 32/64 位(bits)。
在计算机主板上,以CPU为主,内存和各种外围设备为辅,有许多设备要共同在一起工作。这些设备之间的联络,数据的交换,都必须正确无误,分秒不差。因此,它们必须要有一个固定的时钟来做时间上的校正,协调或者参考。这个时钟由主板上的时钟发生器产生,就是所谓的外频。
以前两者是频率一致的,有了QDR、超线程之后就有区别了,前端总线是CPU与北桥数据交换的速度,外频主要是和内存、PCI等交换数据的速度。
局部总线

在以Windows为代表的图形用户接口(GUI)进入PC机之后,要求有高速的图形描绘能力和I/O处理能力。这不仅要求图形适配卡要改善其性能,也对总线的速度提出了挑战。实际上当时外设的速度已有了很大的提高,如硬磁盘与控制器之间的数据传输率已达10MB/s以上,图形控制器和显示器之间的数据传输率也达到69MB/s。通常认为I/O总线的速度应为外设速度的3~5倍。因此原有的ISA、EISA已远远不能适应要求,而成为整个系统的主要瓶颈。

局部总线是PC体系结构的重大发展。它打破了数据I/O的瓶颈,使高性能CPU的功能得以充分发挥。从结构上看,所谓局部总线是在ISA总线和CPU总线之间增加的一级总线或管理层。这样可将一些高速外设,如图形卡、硬盘控制器等从ISA总线上卸下而通过局部总线直接挂接到CPU总线上,使之与高速的CPU总线相匹配。

而采用PCI总线后,数据宽度升级到64位,总线工频率为33.3MHZ,数据传输率(带宽)可达266MB/S。所以采用PCI总线大大解决了数据的I/O瓶颈,使计算机更好地发挥性能。
系统总线又称内总线或板级总线。因为该总线是用来连接微机各功能部件而构成一个完整微机系统的,所以称之为系统总线。系统总线是微机系统中最重要的总线,人们平常所说的微机总线就是指系统总线,如PC总线、AT总线(ISA总线)、PCI总线等。
与总线宽度相似的,CPU每次能够处理的数据量称为字组大小(wordsize)也许你的总线宽度是64位的,但是CPU是32位的 那么字组小于总线宽度 因为 CPU 每次能够解析的数据量有限, 因此由主存储器传来的数据量就有所限制了
内存 个人计算机的主存储器主要组件为动态随机存取内存(Dynamic Random Access Memory, DRAM), 随机存取内存只有在通电时才能记录与使用,断电后数据就消失了。因此我们也称这种 RAM 为挥发性内存。通常越大的内存代表越快速的系统,这是因为系统不用常常
释放一些内存内部的数据。 以服务器来说,主存储器的容量有时比 CPU 的速度还要来的重要的!
理论上,CPU 与主存储器的外频应该要相同才好。不过,因为技术方面的提升,因此这两者的频率速
度不会相同, 但外频则应该是一致的较佳。
除了主存储器之外,事实上整部个人计算机当中还有许许多多的内存存在喔!最为我们所知的就是
CPU 内的第二层高速缓存。我们现在知道 CPU 的数据都是由主存储器提供,但主存储器的数据毕竟得
经由北桥送到 CPU 内。 如果某些很常用的程序或数据可以放置到 CPU 内部的话,那么 CPU 资料的读
取就不需要透过北桥了! 对于效能来说不就可以大大的提升了?这就是第二层快取的设计概念。
因为第二层快取(L2 cache)整合到 CPU 内部,因此这个 L2 内存的速度必须要 CPU 频率相同。 使用
DRAM 是无法达到这个频率速度的,此时就需要静态随机存取内存(Static Random Access Memory,
SRAM)的帮忙了
只读存储器(ROM)
主板上面的组件是非常多的,而每个组件的参数又具有可调整性。举例来说,CPU 与内存的频率是可
调整的; 而主板上面如果有内建的网络卡或者是显示适配器时,该功能是否要启动与该功能的各项参
数, 是被记录到主板上头的一个称为 CMOS 的芯片上
BIOS(Basic Input Output System)是一套程序,这套程序是写死到主板上面的
一个内存芯片中, 这个内存芯片在没有通电时也能够将数据记录下来,那就是只读存储器(Read Only
Memory, ROM)。 ROM 是一种非挥发性的内存。另外,BIOS 对于个人计算机来说是非常重要的, 因
为他是系统在开机的时候首先会去读取的一个小程序喔!
是计算机发展的速度太快了, 因此 BIOS 程序代码也可能需要作适度的修改才行,所以你才会在很多主
板官网找到 BIOS 的更新程序啊!但是 BIOS 原本使用的是无法改写的 ROM ,因此根本无法修正
BIOS 程序代码!为此,现在的 BIOS 通常是写入类似闪存 (flash) 或 EEPROM
显示适配器又称为 VGA(Video Graphics Array),他对于图形影像的显示扮演相当关键的角色。 一般
对于图形影像的显示重点在于分辨率与颜色深度,因为每个图像显示的颜色会占用掉内存, 因此显示
适配器上面会有一个内存的容量,这个显示适配器内存容量将会影响到最终你的屏幕分辨率与颜色深度
的喔!
显示适配器主要也是透过北桥芯片与 CPU、主存储器等沟通。
假设你的桌面使用 1024x768 分辨率,且使用全彩(每个像素占用 3bytes 的容量),请问你
的显示适配器至少需要多少内存才能使用这样的彩度?
答:
因为 1024x768 分辨率中会有 786432 个像素,每个像素占用 3bytes,所以总共需要
2.25MBytes 以上才行! 但如果考虑屏幕的更新率(每秒钟屏幕的更新次数),显示适配器的
内存还是越大越好!
实际的数据都是写在具有磁性物质的磁盘盘上头,而读写主要是透过在机械手臂上的读取头(head)来达
成。 实际运作时, 主轴马达让磁盘盘转动,然后机械手臂可伸展让读取头在磁盘盘上头进行读写的动
作在计算整个硬盘的储存量时,简单的计算公式就是:『header 数量 * 每个 header 负责的磁柱数量 *
每个磁柱所含有的扇区数量 * 扇区的容量』,单位换算为『header * cylinder/header *
secter/cylinder * 512bytes/secter』,简单的写法如下: Head x Cylinder x Sector x 512 Bytes。
不过要注意的是,一般硬盘制造商在显示硬盘的容量时,大多是以十进制来编号,因此市售的 500GB
硬盘, 理论上仅会有 460GBytes 左右的容量喔!
硬盘与主机的接口有IDE接口 SATA接口 SCSI接口
缓冲存储器
硬盘上头含有一个缓冲存储器,这个内存主要可以将硬盘内常使用的数据快取起来,以加速系统
的读取效能。 通常这个缓冲存储器越大越好,因为缓冲存储器的速度要比数据从硬盘盘中被找
出来要快的多了! 目前主流的产品可达 16MB 左右的内存大小喔。
我们在前面显示适配器的部分稍微谈过 PCI 接口,事实上有相当多的组件是使用 PCI 接口作为传输的,
例如网络卡、声卡、特殊功能卡等等。
主板是负责各个计算机组件之间的沟通,但是计算机组件实在太多了,有输出/输入/不同的储存装置等
等, 主板芯片组怎么知道如何负责沟通吶?这个时候就需要用到所谓的 I/O 地址与 IRQ 啰!
I/O 地址有点类似每个装置的门牌号码,每个装置都有他自己的地址,一般来说,不能有两个装置使用
同一个 I/O 地址, 否则系统就会不晓得该如何运作这两个装置了。而除了 I/O 地址之外,还有个 IRQ
中断(Interrupt)这个咚咚。
如果 I/O 地址想成是各装置的门牌号码的话,那么 IRQ 就可以想成是各个门牌连接到邮件中心(CPU)的
专门路径啰! 各装置可以透过 IRQ 中断信道来告知 CPU 该装置的工作情况,以方便 CPU 进行工作分
配的任务
操作系统(Operating System, OS)其实也是一组程序, 这组程序的重点在于管理计算机的所有活动以
及驱动系统中的所有硬件我们刚刚谈到计算机没有软件只是一堆废铁,那么操作系统的功能就是让
CPU 可以开始判断逻辑与运算数值、 让主存储器可以开始加载/读出数据与程序代码、让硬盘可以开始被存取、让网络卡可以开始传输数据、 让所有周边可以开始运转等等。总之,硬件的所有动作都必须
要透过这个操作系统来达成就是了。
上述的功能就是操作系统的核心(Kernel)了
系统呼叫(System Call)
既然我的硬件都是由核心管理,那么如果我想要开发软件的话,自然就得要去参考这个核心的相关功
能! 唔!如此一来不是从原本的参考硬件函数变成参考核心功能,还是很麻烦啊!有没有更简单的方
法啊!
为了解决这个问题,操作系统通常会提供一整组的开发接口给工程师来开发软件! 工程师只要遵守该
开发接口那就很容易开发软件了!举例来说,我们学习 C 程序语言只要参考 C 程序语言的函式即可,
不需要再去考虑其他核心的相关功能,因为核心的系统呼叫接口会主动的将 C 程序语言的相关语法转成
核心可以了解的任务函数, 那核心自然就能够顺利运作该程序了!
既然核心主要是在负责整个计算机系统相关的资源分配与管理,那我们知道其实整部计算机系统最重要
的就是 CPU 与主存储器, 因此,核心至少也要有这些功能的:
x 系统呼叫接口(System call interface)
刚刚谈过了,这是为了方便程序开发者可以轻易的透过与核心的沟通,将硬件的资源进一步的利
用, 于是需要有这个简易的接口来方便程序开发者。
x 程序管理(Process control)
总有听过所谓的『多任务环境』吧?一部计算机可能同时间有很多的工作跑到 CPU 等待运算处
理, 核心这个时候必须要能够控制这些工作,让 CPU 的资源作有效的分配才行!另外, 良好的
CPU 排程机制(就是 CPU 先运作那个工作的排列顺序)将会有效的加快整体系统效能呢!
x 内存管理(Memory management)
控制整个系统的内存管理,这个内存控制是非常重要的,因为系统所有的程序代码与数据都必须
要先存放在内存当中。 通常核心会提供虚拟内存的功能,当内存不足时可以提供内存置换
(swap)的功能哩。
x 文件系统管理(Filesystem management)
文件系统的管理,例如数据的输入输出(I/O)等等的工作啦!还有不同文件格式的支持啦等等,
如果你的核心不认识某个文件系统,那么您将无法使用该文件格式的档案啰!例如:Windows
98 就不认识 NTFS 文件格式的硬盘;
x 装置的驱动(Device drivers)
就如同上面提到的,硬件的管理是核心的主要工作之一,当然啰,装置的驱动程序就是核心需要
做的事情啦! 好在目前都有所谓的『可加载模块』功能,可以将驱动程序编辑成模块,就不需
要重新的编译核心啦!
操作系统与驱动程序
老实说,驱动程序可以说是操作系统里面相当重要的一环了!不过,硬件可是持续在进步当中的! 包
括主板、显示适配器、硬盘等等。那么比较晚推出的较新的硬件,例如显示适配器,我们的操作系统当
然就不认识啰! 那操作系统该如何驱动这块新的显示适配器?为了克服这个问题,操作系统通常会提
供一个开发接口给硬件开发商, 让他们可以根据这个接口设计可以驱动他们硬件的『驱动程序』,如
此一来,只要使用者安装驱动程序后, 自然就可以在他们的操作系统上面驱动这块显示适配器了。驱动程序是由厂商提供的,与操作系统开发者无关。

上一篇:scrapy面试一


下一篇:lua-nginx-module 学习