000.计算机硬件
计算机硬件概论
计算机的本质:接收使用者输入的指令,经过CPU的逻辑运算,输出有价值的数据
硬件的五个单元
关于电脑硬件的组成,通过外观可以分为三大部分:
- 输入单元:包括键盘、鼠标、触控板等
- 主机部分:系统单元被主机机箱保护,机箱中包含主板、CPU、内存等
- 输出单元:包括屏幕、打印机等
而主机部分最重要的组件就是CPU,CPU的工作主要在于管理与运算,因此CPU又可以分为两个主要单元:逻辑计算单元与控制单元;既然CPU主要负责管理与运算,那么被用于计算的数据的传输则交给第三个单元负责,也就是内存
基本上所有的数据都需要通过内存流入/流出。CPU的控制单元会将指令直接传输给其他单元,除此之外,所有要交给CPU计算的数据和被计算完成的数据都需要通过内存传输
综上所述,计算机硬件的五个单元分别由输入单元、输出单元、CPU控制单元、CPU计算单元和内存组成
CPU的架构
CPU自身内部含有一些微指令集,这些微指令用于管理硬件,系统上的软件也要经过CPU的微指令来实现功能。这些指令集被分为2种设计理念,也是2种常见的CPU架构:精简指令集(RISC)和复杂指令集(CISC)
精简指令集
这种CPU设计中,微指令集较为精简,每个指令执行的时间短、操作简单、效率较高,但是如果要执行复杂操作时,需要多个指令联合完成。典型的RISC指令CPU就是ARM架构CPU
复杂指令集
CISC的微指令集的每个小指令可以执行一些低级的硬件操作,指令数目多且复杂,每条指令的长度也不相同。因为指令执行比较复杂,所以每条指令花费的时间较长,但每条指令可以处理的工作比较丰富。常见的CISC指令CPU主要有AMD、Intel等x86架构CPU
x86架构CPU为了区分32位和64位,64位CPU又被统称为x86_64。所谓的“位”是指CPU一次读取数据的最大量,64位表示CPU的通用寄存器的数据宽度为64,CPU一次可以读写64bit数据,因为CPU读写数据量的限制,所以从内存中读写的数据也就有所限制。一般32位的CPU所能读写的最大数据量,大约是4G内存左右
主板芯片组
计算机的所有组件都需要通过主板连接,而主板芯片组的设计上的优劣会直接影响到各个组件之间的工作效率,早期的芯片组通过两个桥接器控制各组件间的通信:北桥-负责连接速度较快的CPU、内存、显卡等,南桥-负责连接速度较慢的硬盘、USB、网卡等。
早期的设计CPU、内存通过北桥连接,这意味着只要CPU要读写内存数据,就需要占用北桥的总可用资源,所以后续的硬件中大多将北桥内存控制器整合到了CPU中,现在大多是CPU与内存直接通信
CPU的频率
前文中提及CPU的指令集,不同的指令集导致CPU工作效率的优劣,除此之外,CPU之间也可以通过主频比较运行速度。主频表示CPU每秒可以进行的工作次数。不能通过单纯的比较主频判断CPU的性能,每颗CPU的指令集不同,因此架构不见得一样,可用的二级缓存和计算机制可能也不同,加上每次主频能够运行的指令数也不同,所以主频目前仅能用于比较同款CPU的速度
外频与倍频
早期CPU架构主要通过北桥连接CPU、内存、显卡,因此每个设备的工作频率应该要相同,所以就有了总线的产生。但是因为CPU的运算速度比其他设备都更快,又为了满足总线的频率,因此在CPU的内部加速,就产生了外频和倍频。
早期的CPU设计中,外频指CPU与外部组件通信传输时的速度(也就是总线上的速度),倍频指CPU内部加速工作性能的一个倍数,两者相乘才是主频。如字面意思,倍频只是一个倍数指标,不是速度单位。例如Intel Core 2 E8400的主频是3.0GHz,而外频是333MHz,所以倍频参数是9(3GHz=333MHz*9)
关于超频
所谓超频指的是将CPU的外频或倍频通过主板设置功能更改成较高频率的一种方式。但由于CPU的倍频出厂时被锁定无法修改,所以常被超频的是外频。例如上述示例,3.0GHz的CPU如果要超频,需要通过将外频333MHz调整为400MHz。如此一来,总线上的所有组件的工作频率都提高到原频率的1.3倍,虽然CPU主频提高到3.6GHz,但可能因为频率的非正常速度导致宕机
早期的CPU架构设计瓶颈卡在北桥上,新的CPU设计中整合了北桥的内存控制器功能,在Intel架构中使用QPI与DMI技术,AMD架构中使用Hyper Transport,这些技术都可以实现CPU直接与内存通信,而不需要通过外部晶片
因为现在没有北桥了,因此,CPU的主频设计就不需要再考虑需要同步频率的外频,只需要考虑主频即可。现在通过Intel的turbo技术CPU会自动超频,同时,如果没有大量的计算需求,主频也会自动降低
32位与64位的CPU与总线带宽
从前文中得知CPU的各项计算的数据都来源于内存。因此,如果内存能提供给CPU的数据量越大,整体系统的效率也会更快。内存能够提供的数据量取决于CPU内的内存控制芯片速度与内存间的传输宽度,类似CPU的外频与倍频的计算
CPU每次能够处理的数据量称为字长(word size),字长是指CPU一次可以处理的最大数据,依据CPU的设计分为32bit和64bit,分别代表着32位元和64位元。根据CPU的设计有更多的位元分类,只不过现在常见的是32位元与64位元。早期的32位元CPU因为每次能够解析的数据量有限,因此从内存中读取的数据量也有所限制。这也导致了32位元的CPU最多只能支持4G内存
与CPU主频类似,内存也有其工作时的主频,而且内存的主频大小是由CPU内的内存控制器决定的。例如CPU的内存控制器对内存的工作主频最高达到1600MHz(每秒几次),每次能够传输的数据量为64位,那么,CPU可以从内存中读取的最快频宽就是1600MHz*64bit = 1600MHz*8Bytes = 12.8GByte/s。其中,64位元就是所谓的宽度
补充:使用cpu-z软件查看主机内存选项时,会看到北桥频率与内存频率,这里的北桥频率可以理解为内存控制器的频率上限,与内存当前实际工作频率无关
内存
个人电脑的内存主要元件是动态随机存储器(Dynamic Random Access Memory,DRAM),随机存储器只有通电时才能用,断电数据丢失
DRAM根据技术更新又分为SDRAM与DDR SDRAM两种。这2种内存除了工作电压不同外,DDR是所谓的双倍数据传输速度(Double Data Rate),在一次工作周期中进行2次数据传输。DDR SDRAM根据技术更新又分为DDR、DDR2、DDR3、DDR4等
内存除了考虑频率、频宽与型号外,容量也非常重要,所有到达CPU的数据都必须先载入内存,如果内容容量不足导致数据无法被完整载入,此时内存会将暂时未被使用到的数据释放载入新数据。所以更大容量的内存代表更快速的系统,因为内存省略了释放空间的操作
补充:DDR3L:DDR3L也是内存规格的一种,降低了内存的操作电压,DDR3标准电压为1.5V,而DDR3L仅需1.35V。可以用在耗电量较低的需求中,但并非所有系统都支持DDR3L,需要查询主板的支持规格
为什么32位CPU只能识别4G内存
1. bit与Byte的关系
bit是计算机的最小存储单位,1个bit只能存放1个boolean值。常见的磁盘容量单位KB、MB、GB等后面的这个B,指的是Byte,每1个Byte等于8个bit。1个bit只能表示2种值(0或1),计算式是21;而1个Byte能表示256种值(0~255),计算式是28。1个Byte能表示的最大值就是255,所以大多数时候能见到255最大的限制,例如IP地址
2. 主存储器
内存有1个非常重要的属性,内存里的数据能够被CPU直接访问。CPU无法直接访问硬盘内的数据,只能把硬件的数据先放到内存中,在从内存里访问硬盘的数据。平时应用程序提示等待加载的过程,实际就是把硬盘中的数据读到内存的过程,所以内存是计算机的主存储器,而硬盘及U盘一类的都是外部存储器
3. 内存的基本结构
内存实际上存放的也是二进制的数据,如果将内存看作由海量的小格子组成,每个小格子是1个bit,那么数值255也就仅需要8个格子来存放,也就是8bit。由于内存里的格子数量巨大,如果CPU要读取某个指定的数据,它无法通过简单的遍历方式去海量数据中查找指定信息。所以实际上内存是将8个bit视作1组,每1组视作1个单位,大小是1Byte,CPU每次只能访问1个Byte,而不能单独访问具体的1个小格子(bit)。1Byte就是内存最小的I/O单位
大多数数据都会作为各种数据类型存放在内存里,不同数据类型占用的字节大小也不同,例如char字符类型占1个字节,int类型和unsigned int类型占4个字节
4. 内存地址
即便将内存分为以字节为单位的结构,内存仍然能够具备巨大的字节数量,CPU以字节为单位去查找指定信息,仍然是一个非常浪费时间的行为,为了避免遍历内存,计算机系统加入了内存地址这个概念。操作系统会为内存的每个字节分配一个内存地址,CPU只需要知道某个数据类型的地址,就可以直接到对应的内存位置提取数据,就如同一栋大楼里的每个房间都有一个门牌号一一对应一样
5. 直接寻址技术
直接寻址技术已经成为当代计算机硬件的标准技术之一,CPU只要知道待访问数据的内存地址,就能够直接到内存相对应的位置去访问数据。以大楼举例,即便已知将访问17楼的1702号房间,还是需要从1楼到17楼,这个过程仍需要时间成本,具备直接寻址技术后,就能够直接跳转到17楼1702门前
6. 内存地址的表示方式
内存地址也是由二进制数值组成,每一个地址对应内存中的一个字节,如果内存地址的值加1,那么这个地址就对应下一个字节了。而内存地址的长度则对应操作系统的位数,例如32位操作系统中,内存地址就是由32个的0或1组成,而内存地址的数量决定了CPU能访问的内存大小,对应32位的内存地址范围等同于2^32,在内存的基本结构中提到,CPU每次访问内存都是以Byte为1个I/O单位,那么可以得出2^32(Byte)/1024(KB)/1024(MB)/1024(GB)=4(GB)
所以即便给32位操作系统配上8GB的内存,由于超出可识别的内存地址范围,操作系统也只能使用4GB的内存容量,64位操作系统可支持的内存地址范围也可同上推测
多通道设计
由于所有数据都要放在内存中,因此内存的频宽越大越好。但传统总线宽度一般仅64位元,为了加大这个宽度,厂商将2个内存汇整到一起,如果一个内存可达64位元,那么2支内存的宽度就是128位元,这就是双通道设计理念
综上所述,启用双通道功能的前提是必须具备2支内存条,且2支内存条的型号、容量最好相同。在主板上可能会看到内存条插槽分为多种颜色,且两两成对,这就是为双通道功能而设计,将2支内存条插入颜色相同的2个插槽中即可启用双通道功能
DRAM与SRAM
现在CPU的数据都是由内存提供,但CPU与内存之间仍需要经过内存控制器。如果某些热数据直接放置到CPU内部,那么CPU的数据就不需要再到内存控制器读取,提升系统性能。这就是CPU 2级缓存(L2 cache)的设计概念
因为L2整合到CPU内部,所以L2的速度必须与CPU的主频相同。而DRAM是无法达到这个主频速度的,因此就需要静态随机存储器(Static Random Access Memory,SRAM)。SRAM的设计定位上属于速度快、价格高、容量小的部件,现在的CPU都有内建容量不等的L2,以提升CPU的性能
ROM
主板上的元件非常多,且每个元件的参数可调整。例如,CPU与内存的主频可调整、网卡或显卡也各自具备可调整选项,这些所有可调整选项的参数都被记录到主板上的CMOS芯片上,这个芯片需要额外的电源来发挥记录功能,这也是为什么主板上会有一块电池的原因
BIOS(Basic Input Output System),一套基本固件程序,这套程序写死到主板上的一块芯片中,这块芯片在未通电时也能保存数据不丢失,这就是ROM(Read Only Memory,ROM)。主机开机时首先会读取BIOS,在BIOS中修改主板元件的可调整选项参数后,会记录到CMOS芯片上
很多固件是用ROM进行软件写入的。固件像软件一样也是被主机执行的程序,但是固件更加贴合硬件,对于硬件来说更加重要,简单一点理解,固件就是绑定在硬件上的控制软件
对主机而言,BIOS的重要程度不言而喻。硬件的发展速度极快,因此BIOS的程序也需要适度更新,但BIOS本身使用的就是只读的ROM,因此根本无法修改BIOS的程序。因此,现在的BIOS通常是写入类似快闪存储器(flash EPROM)或EEPROM
显卡
显卡相对于服务器来说并不重要,一个简单的入门级显卡即可。图形印象的显示重点在于解析色彩深度,每个图像显示的颜色都会占用内存,因此显卡有自带显存,显存的大小会影响到屏幕解析度与色彩深度。除了显存以外,为了迎合3D游戏的需求,厂商会在显卡内嵌入3D加速芯片以提升显卡的运算能力,也就是GPU的由来
显卡也是通过CPU控制芯片实现与CPU、内存之间的通信,显卡也是高速运算的元件,所以其数据传输速率也是越快越好。因此,显卡的规格由早期的PCI到AGP,再到现在的PCI-E。PCI-E使用总线的概念来处理,采用点对点串行连接,在PCI-E 1.0中,每条总线位宽具备250MBytes/s的速率,总线位宽越多(家用主机通常设计到x16,服务器则是多个x8接口)则总频宽越高
使用CPU-z查看主板栏,可以在图形接口窗口看到主机当前的位宽、最大支持位宽和x1的速率
目前显示器的主要连接接口有4种:
- D-Sub(VGA接口):较早的连接接口,主要为15针的接口,针对传统影像屏幕而设计
- DVI:共有4种以上的接头,常见的2种是仅提供数位讯号的DVI-D及整合数位与类比讯号的DVI-I,常用于液晶屏幕的连接
- HDMI:能够同时传输影像和声音,被广泛应用于电视屏幕
- Display port:与HDMI类似
硬盘与存储设备
电脑上的存储设备包括:硬盘、软盘、U盘、DVD等,乃至大型机器的网络存储SAN、NAS等。其中最常见的就是硬盘
硬盘的物理组成
根据台式机与笔记本的区别,硬盘也分为3.5和2.5英寸。一块硬盘主要由盘片、机械臂、电子探头、主轴马达组成
。所有的实际数据由盘片保存,读写数据需要通过电子探头完成。实际运行时,主轴马达带动盘片转动,机械臂通过径向运动伸展电子探头在盘片上进行读写操作
盘片
盘片的设计之初就是再类似盘片同心圆上切出一个一个的小区块,这些小区块整合成一个圆形,让机械臂上的磁头去存取。这个小区块就是磁盘最小的物理单位扇区(sector),同一个同心圆的扇区组成的圆就是磁道(track)。由于磁盘里存在多个盘片,因此在所有盘片上的同一个磁道就组成了一个磁柱(cylinder)
同心圆外圈的圆比较大,占用面积比内圈多,因此外圈的圆会具有更多的扇区。当磁盘旋转一圈时,外圈的扇区数量较多,因此如果数据写入在外圈,转一圈能读写的数据量比内圈多,磁盘的预设值就是从外圈往内写,磁盘的最外圈的磁道是0磁道
早期磁盘的扇区都是设计成512byte的容量,现在磁盘的容量越亮越大,为了减少数据的拆解,新的高容量磁盘已经有了4Kbyte的扇区设计,因为扇区的变化,磁盘分区也有2种分区模式:旧式MSDOS兼容模式和GPT模式
磁盘接口
为了提高磁盘的传输速度,磁盘与主板的连接接口也经过多次改版,传统磁盘接口包括SATA、SAS、IDE和SCSI等,目前IDE已被SATA取代,SCSI被SAS取代
SATA:主要由盘片、磁头臂、磁头、主轴、磁盘接口组成,I/O速率由磁头的寻道速度和主轴的旋转速度决定,由于是机械运动,所以相较其他类型的磁盘,SATA盘I/O速率较慢,随使用时间的增长,其本身的磨损也会造成I/O速率的降低
SAS:SAS盘与SATA盘的区别就在于磁盘接口由SATA口替换成了SAS口,磁盘内部构造并无更改,但SAS盘的内部组件性能要远高于SATA盘
固态硬盘(SSD)
机械硬盘(Hard disk Drive)的读写需要通过主轴马达转动盘片,这会造成比较严重的读写延迟,当数据所在的扇区分布比较散又不连续时,读写速度的延迟就更加明显。后来有厂家拿闪存制作高容量的设备,这些设备的接口也是SATA或SAS,且外形与机械硬盘一样,这就是固态硬盘SSD(Solid State Drive)
SSD最大的优势就是通过闪存直接读写,无需机械运动,读写速率快。早期的SSD存在写入次数限制,SSD的寿命较短,需要考虑到备份或可能要使用RAID机制来防止SSD的损坏
读写硬盘时,通常不会有连续读写,大部分情况都是读写多个小文件,多个小文件的读写比较考验HDD的质量和速率,因为盘片可能要转很多圈才能读写完成,SSD就没有这个问题,因此现在测试磁盘时有个比较特殊的单位,称为每秒读写操作次数(Input/Output Operations Per Second,IOPS),这个数值越大表示效率越高
主板
设备I/O地址与IRQ中断通道
主板负责各个组件之间的沟通,但电脑组件之多,主板芯片组如何负责沟通?此时则需要用到I/O地址与IRQ
I/O地址类似每个组件的门牌号,每个组件都有自己的地址,一般来说,两个组件不能使用同一个I/O。如果将I/O地址比作各个组件的门牌号,那IRQ就是各个组件连接到CPU的专用路径,各组件可以通过IRQ中断通道向CPU报告工作状态,以便于CPU的工作分配
老式的主板芯片组IRQ只有15个,所以周边设备过多时IRQ会不够用,此时需要选择性将未使用的设备关掉,或者还有sharing IRQ技术
补充:扩展卡的插槽位置
在显卡小节中有提及PCI-E的总线位宽分为x16、x8、x4,服务器默认出厂后,主板上会预留一些PCI-E x8的接口插槽,用于给用户提供后续的硬件扩展需求。而不同的插槽接口位置会影响到性能,一般而言,越靠近CPU的插槽性能越好,因为靠近CPU的插槽与CPU之间直连,如果安插在离CPU较远的插槽,那插槽可能是与南桥连接。与南桥相连的插槽传输数据时,需要先将数据传入南桥,这意味着扩展卡需要与其他连接到南桥的设备抢带宽,之后要转向CPU,还要通过CPU与南桥连接的沟通管道,该管道称为DMI 2.0。DMI 2.0通道的传输速率是2GByte/s,而PCI-E x8的理论速率有4GByte/s,这意味着CPU与南桥的通道上会产生性能瓶颈
直接连接到CPU的通道最多只能支持x16的位宽,所以如果使用x16位宽的插槽,就只能使用一个插槽位,使用x8位宽时,就变成了x8 * 2,就是两个插槽位。具体的位宽需要查看实际的设备预留的插槽接口
补充:电源
选购电源时,除了计算主机所需的功率,还要考虑电源本身会占用的功率,电源做工用料的不同会导致供电的稳定性也会差很多。电源有能源转换率指标,该指标是指输出功率/输入功率,这个数值越大越好
操作系统
早期想要电脑执行程序必须参考对应的硬件功能,并通过机器语言才能撰写程序,面对不同的硬件每次都需要重新改写程序。操作系统则是能够驱动所有硬件,并在这个基础上向工程师提供了一套更加友好的开发环境
操作系统核心(Kernel)
操作系统(Operating System,OS)其本质也是一组程序,这组程序的重点在于能够管理电脑的所有行为以及驱动系统中所有的硬件。电脑没有软件等同于人没有灵魂,只是一堆废铁。而操作系统的作用就是管理CPU判断逻辑与运算、内存可以开始读写数据与程序、磁盘可以开始存取数据、网卡可以开始传输数据、所有周边设备开始运转等
上述的所有功能就是OS的核心了,核心提供的功能可以决定电脑硬件能够实现的操作,例如,如果核心不支持TCP/IP网络协议功能,那么无论使用什么网卡,都无法实现网络传输。核心主要功能是管控硬件与提供其相应的能力(例如读写磁盘、网络传输),这使得核心的程序非常重要,因此核心程序所放置到内存当中的区块是受保护的,且开机后就一直常驻在内存中
补充:如果整个OS只有核心的话,就只能看着已经准备好运行的OS,但无法操作
系统调用(System Call)
所有硬件都由核心管理,那么开发软件就从参考硬件函数变成了参考核心相关功能,并没有对开发流程做出优化。为了解决这个问题,OS通常会提供一组开发环境给工程师用于开发软件

电脑主要由硬件构成,然后核心程序再管理硬件,因此只要硬件不同,核心就要进行修改才行。且由于核心只会进行电脑硬件的资源分配,所以用户想要操作硬件必须借助应用程序。为了保护核心程序,且让工程师比较容易开发软件,操作系统除了核心程序以外,还会提供一组开发环境,称为系统调用层。可以发现软件与硬件并无太大关系,都是通过OS实现功能
总结:
- OS的核心直接参照硬件规格构成,所以同一个OS不能够在不一样的硬件架构下运行。例如windows8.1不能直接在ARM架构上运行
- OS只用于管理整个硬件资源,包括CPU、内存、输入输出设备及文件系统。如果没有没有应用程序辅助,OS只能让主机准备妥当而已,无法运行其他功能
- 应用程序的开发都是参考OS提供的开发环境,所以该应用程序只能在该OS上运行,不能在其他OS上运行。部分应用程序会声明自身只能运行在某种OS上
核心功能
整个电脑硬件构成中最重要的就是CPU与内存,因此,核心至少要具备以下功能:
- 系统调用环境(System call interface)
便于开发者对硬件资源的进一步利用 - 程序管理(Process control)
同一时间内可能有很多工作等待CPU运行处理,核心必须能够控制这些工作,让CPU的资源有效分配 - 内存管理(Memory management)
核心能够提供虚拟内存功能,内存不足时提供内存置换(swap)功能 - 文件系统管理(Filesystem management)
文件系统管理包括输入输出管理、文件格式的支持等,核心不识别某个文件系统时,将无法使用该文件格式 - 设备驱动(Device drivers)
核心负责装载硬件的驱动程序,现在的可载入模组功能实现将驱动程序编辑成模组,不需要重新编译核心
OS与驱动程序
驱动程序是OS中非常重要的一环,但是硬件一直处于持续进步当中,包括主板、显卡、硬盘等,这导致OS无法识别最新推出的硬件设备,为了解决新型设备的驱动问题,OS通常会提供一组开发环境给厂商,厂商根据开发环境设计可以驱动他们硬件的驱动程序,如此一来,只要用户安装驱动程序后,OS自然能够识别硬件
小结:
- OS必须要能够驱动硬件,应用程序才能够使用该硬件功能
- OS会向厂商提供一组开发环境,用于厂商制作他们的驱动程序
- 要使用新硬件的功能,必须安装厂商提供的驱动
- 驱动程序由厂商提供,与操作系统开发者无关

浙公网安备 33010602011771号