admin管理员组

文章数量:1571949

计算机组成概览

计算机硬件的五大单元

在介绍计算机硬件基础之前,我们必须了解一下计算机硬件的五大单元(注意这里说的是硬件的五大单元并不是计算机五大单元):

  1. 输入设备:无论是计算机五大单元还是计算机硬件的五大单元,这其中必须包含的东西肯定是输入设备,在计算机日常使用中,输入设备无非就是将我们需要的数据传给计算机的媒介,输入设备常见的由鼠标、键盘、游戏手柄等。

  2. 输出设备:输出设备顾名思义就是显示计算机处理数据的媒介,例如显示屏、打印机等都是输出设备。

  3. 算术逻辑单元:在介绍算术逻辑单元之前,我们必须了解一下什么是CPUCPU是一个具有特定的功能的一个芯片,每个CPU都包含一堆的指令集。算术逻辑单元就是CPU的一部分,它负责程序的运算以及逻辑判断。

  4. 控制单元:同样的控制单元也是CPU的一部分,它负责协调各个周边的组件和各个单元的工作。

主存(内存)

CPU是负责各种复杂的运算工作的,由于其计算速度非常快,而存储数据硬盘速度非常慢,所以为了能够向CPU及时投递数据,避免CPU经常空闲造成CPU空转,我们就加了内存这个东西。

需要了解是,内存空间是有限的,所以当内存找磁盘读取数据时发现自己空间已满,就会采用置换算法将某些不需要的数据移除内存。

CPU(中央处理器)

CPU是包含特定指令集的芯片,而指令集大概可以分为精简指令集和复杂指令集:

  1. 精简指令集(RISC):,精简指令集特点很明显,它能够处理简单的一些动作,并且执行效率极高,常用的常见就是导航系统、导航网络设备(路由器、交换机)等。
  2. 复杂指令集(CISC):我们日常计算机所用x86架构所用的CPU就是包含复杂指令集的CPU,它所能处理的动作可以是非常复杂,所以执行效率相对精简指令集而言会低一些。常见的CISC微指令就是AMD,Intel这些。之所以我们管现代所用的计算机结构叫x86的原因也正是因为Intel早年开发的一些列CPU代号都是86结尾。
    随着CPU的不断发展,计算机也从原来的32位发展到现在的64位,这就意味着CPU一次可以读写的数据也从原来的32位(32/8=4G)变为现代的64位(64/8=8G),也意味着所能表示的内存地址从原来的4g变为8g。

用人的构建来理解计算机的运作流程

了解了计算机硬件的组成部分,我们就可以通过人的构建来了解一下计算机的工作流程,我们都知道人是通过大脑进行思考和处理外界的传递的数据的,计算机中的CPU就可以理解为人脑,通过CPU计算机就是将主存传入的数据进行运算,并交由输出单元传送出去。

人脑进行运算的数据有可能是从五官感知到的,也可能是从自己的记忆中拿到的,通过记忆获得信息速度远比再次通过五官去感知要快速的多。而主存就好比人类的记忆,CPU正是通过主存快速获取数据并完成运算。

人类对于日常工作处理所需要的数据大部分都来自记忆,而记忆是大部分来自长期存储的数据。计算机也一样的,硬盘就扮演着存储长期数据的角色,当计算机需要某些数据的时候,主存就会去硬盘中获取这些数据交给CPU处理。

知道了数据处理的地方,那么我就该知道新的数据是从何处进行输入输出的,正如人类一样,人类是通过五官感知外界。而计算机则是通过输入和输出设备完成数据的运输,输入设备可以是鼠标、键盘等。输出设备可以是打印机、显示屏等。

串联起来:

  1. 计算机通过输入设备将数据存储到硬盘。
  2. 主存从硬盘读取数据。
  3. CPU从主存中快速读取数据并完成运算。
  4. 运算结果或是通过输出设备输出,或是返回给主存,主存再次写回磁盘中。

计算机上常用的计算单位

  1. 容量单位:容量单位的进率都是1024,但是bit和byte的进率是8。
1T=1024G
1G=1024M
1M=1024K
1K=1024Byte
1Byte=8bit
  1. 速度单位:速度单位最常见的就是网络速度,例如我们日常购买宽带时运营商都会告知宽带为百兆带宽。实际上百兆带宽就是100Mbps,这里的b是bit,所以换算成byte,百兆带宽的实际速度为100/8=12.5Mbyte

计算机设备硬件组成详解

主板架构

聊到计算机组成我们基本是以AMD或者Intel两个主流派系,随着发展两者的架构几乎是一样的。

早期的主板会将结构分为南北桥两个部分,北桥负责桥接各种读取速度快的组件间的交互,例如主存、CPU、显示适配器等。而南桥负责桥接较慢的装置接口,例如硬盘、网络卡、USB等。

这也导致内存和CPU交互都需要经过北桥,大大占用了北桥的带宽,于是设计者将北桥内存控制器加到CPU中,现如今的x86架构就一直延续了这个设计。

CPU详解

以华硕主机来聊聊CPU这个东西,下图所指的位置就是CPU的插槽,使用不同的指令集CPU的执行效率都会有所不同。但在同款CPU性能比较下,频率也是CPU性能的一个重要指标,例如一个CPU的执行频率为 3.6GHz,这就代表着这个CPU理论上一秒可以执行36亿个指令(3.6 10001000*1000 =36亿)。

上文我们也提到了,早年的CPU和主存是通过北桥来交互数据的,但是CPU的执行效率远远高于主存的传输速度,所以为了平衡这一点,北桥还设置了一个叫FSB的东西来连接两者。

并且为了适配CPU和其他组件的交互速度,CPU还将自己传输分为内频和外频。外频的速度适配外部组件的传输速度,内频则是CPU自己的速度,通过所以早年的CPU可以说是自己内部速度非常快,而外部还在不紧不慢和其他组件缓慢交互。

所以早年我们还会提到一个叫超频的概念,例如我们当前CPU外频率为300MHz,倍频为9,那么CPU的内频就是300*9≈3GHz。假如所以有些计算机硬件发烧友为了能够提高CPU的内频速度,会将外频率速度提高例如将外频率提高为500MHz,那么内频则被提高为4.5GHz,但是这么快的速度确实非正常设置,很可能会导致主机运行时出现宕机的情况。

随着时代的发展,Intel使用DMI技术,AMD使用 Hyper Transport,使得CPU和主存以及其他组件交互都无需经过北桥了,所以现在的CPU都是自动超频的。

现代计算机中一个CPU不止一个核心,双核心一起参与运算,处理效率显著提高。而且我们都知道CPU的数据都是从主存中获取的,而CPU和主存之间数据传入也是通过内存控制的FSB(前端总线频率)。假如内存控制芯片对主存的工作频率为1600Mz,以64位计算机而言,那么CPU最快带宽为1600Mhz64位8byte=12.8Gbyte/s

关于CPU性能提升还有一点就是超线程的概念,我们都知道CPU运算速度非常快,但是进行运算操作时势必是要经过从主存中获取数据的步骤,这就使得单个CPU在读取主存数据时,逻辑运算单元只能干等着。

对此设计者们就提出一个超线程的概念,这个概念与操作系统多任务切换类似,就是将CPU内部的register分成两个,这样一来CPU就有了两个缓存器,当一个缓存器使用逻辑运算单元时,另一个缓存器就会去主存获取数据,两个齐头并进的工作着,执行效率就会高很多。

这也就是我们现在笔记本明明只有8个CPU核心,却有16个逻辑核心的原因。

关于CPU信息,我们可以在Linux系统上键入以下命令查看

more /proc/cpuinfo

以笔者的云服务器为例,我们可以看到以下内容

# 逻辑处理器唯一标识符
processor       : 0
# 代表处理器类型,下面这段配置就代表这个cpu为英特尔的
vendor_id       : GenuineIntel
cpu family      : 6
model           : 79
model name      : Intel(R) Xeon(R) CPU E5-2682 v4 @ 2.50GHz
stepping        : 1
microcode       : 0x1
cpu MHz         : 2499.994
cache size      : 40960 KB
physical id     : 0
# siblings     和cpu cores之间有一个对应关系,如果siblings 是cpu cores的两倍,那就说明当前cpu支持超线程,反之就有可能是CPU不支持超线程或者说超线程的功能未开启
siblings        : 1
core id         : 0
cpu cores       : 1
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 20
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant
_tsc rep_good nopl nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c r
drand hypervisor lahf_lm abm 3dnowprefetch invpcid_single pti ibrs ibpb stibp fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm rdseed adx smap xsav
eopt arat
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs taa itlb_multihit
bogomips        : 4999.98
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:

当然若想查看当前系统物理cpu个数,可键入以下命令

more /proc/cpuinfo |grep 'physical id'|sort

以笔者为例,当前服务器就会输出以下信息,这就意为着笔者的服务器为有16个物理CPU


physical id     : 0
physical id     : 10
physical id     : 12
physical id     : 14
physical id     : 16
physical id     : 18
physical id     : 2
physical id     : 20
physical id     : 22
physical id     : 24
physical id     : 26
physical id     : 28
physical id     : 30
physical id     : 4
physical id     : 6
physical id     : 8

若我们想查看每个CPU内核个数,我们可以键入以下命令

more /proc/cpuinfo |grep 'cpu cores'

可以看到笔者使用的服务器的CPU都是单核心的


cpu cores       : 1
cpu cores       : 1
cpu cores       : 1
cpu cores       : 1
cpu cores       : 1
cpu cores       : 1
cpu cores       : 1
cpu cores       : 1
cpu cores       : 1
cpu cores       : 1
cpu cores       : 1
cpu cores       : 1
cpu cores       : 1
cpu cores       : 1
cpu cores       : 1
cpu cores       : 1

我们也可以键入以下命令查看逻辑CPU个数以及超线程个数的总和,通过输出可知我们知道最终总数为16

cat /proc/cpuinfo | grep "processor" | wc -l
16

内存详解

CPU和主存决定的计算机执行效率,所以我们再来聊聊主存,内存一般都是一条条芯片,以华硕主机为例子,他会被插在下图所示的插槽中,对于需要被处理的数据都必须加载到内存中才能被执行,而且内存中的数据如果在断电前没有写回磁盘的话,数据是会丢失的。

而内存分为SD RAMDDR RAM两种,他们的带宽都是频率*宽度/8,可以看到DDR的频率比较高所以带宽也相对大些,现在主流的主存都是使用DDR4的内存了。

同时内存还需要考虑的另一个因素就是容量,只有足够大的容量还能保证从辅存中读取的数据会在处理前呆在内存中,不会因为内存不足而被置换出去,直到被CPU执行。从上文我们也看到内存插槽有4个,之所以有这么多就是因为通过增加插槽数目可以增加更多的内存条,从而提高容量的通信也增加了通道,假如一支内存只有64位,那么两条内存条带宽就会达到128位。那么容量就是16G了。

除此之外现代计算机为了保证常用数据会快速被响应执行,就在CPU中增加了一个二级缓存,所以当从主存读取的数据执行完成后,有可能会缓存在CPU二级缓存中,二级缓存的执行速度和CPU是一样的,这就是使得计算机的执行性能再次提高。

BIOS

有一段重要的程序BIOS,他存储的计算机的硬件信息以及开机设备等选择项,他原本是存在ROM(只读存储器)中,BIOS所有数据都会长期保留在内存中且不会修改,但是现代计算机发展速度太快了,这种做法带来了很大的不便,所以为了能够修改这段程序,BIOS现在一般都存到闪存(flash)或者EEPROM中。

显示适配器

显示适配器又称为VGA,因为显示的图形图像的颜色会占用内存,所以显示适配器的容量就会决定图像显示的质量。
而且现如今社会,大量的3D特效出现,这些特效都是需要运算的,如果全部交给CPU,极有可能出现大量程序卡顿的情况,所以显示适配器的厂商如今都会在显示适配器中内嵌一个加速芯片来完成运算,这就是所谓的GPU,参见下图所示位置。

除此之外,显示适配器也也需要和CPU等组件进行沟通,所以数据的传输效率也决定的显示的效率,主流的显示适配器的规格如下,基本都是采用PCIe,这就使得传输速度也是很不错的。

所以,如果我们需要看到pcie规格所对应的显示适配器的信息,我们完全可以键入以下命令查看

lspci

可以看到笔者服务器所对应的显示适配器为Cirrus Logic GD 5446这个型号的

硬盘与存储设备

最后就是硬盘了,早期的辅存设备就是硬盘,如下所示

他对数据的读写都是通过转动磁头来进行的,而且因为磁盘外圈大的原因,所以这种硬盘写数据都是从外往内写的。

同样的磁盘传输速度也是非常重要的,传统磁盘连接界面包括有 SATA, SAS, IDE 与 SCSI 等等,但如今SATA已将IDE取代,而SAS已将SCSI 取代。如下图所示,这就是SATA的插槽。

不同版本的SATA传输速度如下

虽然SAS传输速度比SATA好,但碍于价格过于昂贵,所以个人计算机不常用,对此我们对SAS速度做个了解就好了。

USB相比大家都知道了,这里我们也就做不多做介绍了。

最后我们就来介绍主流的辅存设备了——固态硬盘(SSD),如今的电脑基本都是使用固态硬盘的,与传统磁盘不同的是,他不需要马达以及转动获取数据,他都是透过内存随机存取的。所以读取速度基本没有延迟,如今的笔记本基本都是使用固态硬盘了。在2016年的时候Intel顶级的SSD已经可以达到500Mbyte/s,这已经可以比肩SATA3了。更何况今日呢?所以传统磁盘已主键被淘汰,我们日常使用个人计算机的基本都是使用SSD了。

关于这些辅存设备信息,我们同样可以使用lspci查看,如下所示,这就笔者服务上所能看到的usb接口、SATA接口等各个接口对应的设备信息。


00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02)
00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II]
00:01.2 USB controller: Intel Corporation 82371SB PIIX3 USB [Natoma/Triton II] (rev 01)
00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03)
00:02.0 VGA compatible controller: Cirrus Logic GD 5446
00:03.0 Ethernet controller: Red Hat, Inc. Virtio network device
00:04.0 Communication controller: Red Hat, Inc. Virtio console
00:05.0 SCSI storage controller: Red Hat, Inc. Virtio block device
00:06.0 Unclassified device [00ff]: Red Hat, Inc. Virtio memory balloon

参考文献

鸟哥的Linux私房菜:https://book.douban/subject/4889838/

循序渐进Linux(第2版):https://book.douban/subject/26758194/

本文标签: 小结计算机硬件知识