对应书《鸟哥的Linux私房菜》中第零章

计算机:辅助人脑的好工具

所谓的计算机,就是一种计算器,就是接受用户输入指令与数据,由CPU的数学与逻辑 单元运算处理或,以产生或存储成有用的东西

计算机硬件的五大单元

可以通过桌面计算机大致分为三个大部分:

(主存储器在PC上可以被简单的是作为内存)

  • 输入单元
  • 主机部分
  • 输出单元

主机部分的重点在于CPU(central processing unit),CPU是一个有特定功能的芯片,里面含有微指令集,如果想要主机经行某种特定的功能,就需要参考CPU是否有相关内建的微指令集。

由于CPU的工作主要在于管理和运算,因此在CPU内又可以分为两个主要的单元,算术逻辑单元和控制单元。算术逻辑单元主要负责程序运算和逻辑判断,控制单元则负责协调周边组件与各单元间的工作。

那么数据从哪里来呢?CPU读取的数据都是从主存储器来的。主存储器从输入单元获取数据给CPU;CPU把处理好的数据递给主存储器再送到输出单元。

所以说,通常加大内存确实可以获得相当好的效果,特别是在Linux服务器下

计算机五大单元

CPU的架构

软件所使用的CPU内部的微指令集主要有两种流行的设计理念,分别是:精简指令集(RISC)和复杂指令集(CISC)系统。

RISC

Reduced Instruction Set Computer,RISC

这种设计中,微指令集比较精简,时间短且动作简单,效能高,但是不能处理复杂问题。

常见的RISC指令集CPU有甲骨文(Oracle)公司的SPARC系列,IBM的Power Architecture系列,和ARM公司的ARM CPU系列等。

应用上,SPARC CPU的计算机常用于学术领域的大型工作站,包括银行金融体系的主服务器也有这类计算机架构; PowerPC常见的有Sony公司的Play Station3,和比较久的苹果电脑;ARM常见于手机、PDA、网络设备。

目前,世界上使用最广泛的CPU可能就是ARM架构

CISC

Complex Instruction Set Computer,CISC

于RISC不同的是,CISC的每个小指令都可以执行一些较低阶的硬件操作,指令数目多且复杂,每条长度也并不相同。因此执行较为复杂,时间消耗高,但是每个指令集可以处理的工作比较丰富。常见的CISC为指令集CPU主要有AMD,Intel,VIA等x86架构的CPU。

由于AMD,Intel,VIA开发的x86架构CPU被大量使用于个人计算机(Personal Computer)用途,因此常称PC为x86架构计算机。

为什么是x86架构呢?。。。。
当年英特尔发明的最早的CPU支持这个指令集的叫做8086,所以这种指令集架构就被称为了x86架构

03年以前由Intel开发的x86架构CPU由8位升级到16,32位,后来被AMD以此修改为新一代的64位。为了区别两者的差异,64位的PC的CPU又被统称为x86_64的架构。

所谓的…位指CPU一次数据读取的最大量。
64位表示CPU一次可以读写64bits,32位表示可以一次读取32bits。
受读取量的限制,一般的32位CPU能读写的最大数据量大概为4GB

那么不同的x86架构的CPU有什么差异呢?不同架构的CPU含有不同的为指令集,可以针对不同场景优化能耗。

常见的指令集:

指令集用途 指令集
多媒体微指令集 MMX,SSE,SSE2,SSE3,SSE4,AMD-3DNow!
虚拟化微指令集 Intel-VT,AMD-SVM
省电功能 Intel-SpeedStep,AMD-PowerNow!
64/32位兼容技术 AMD-AMD64,Intel-EM64T

以及这两年火爆的AVX2指令集,其目的是为了加速计算。

其他单元的设备

主机内的其他设备通过主板(mother board,main board)连接在一起,主板上面有一个连接所有设备的芯片组,可以让CPU更好的对设备下达指令。其常见的主要设备有:

  • 系统单元
  • 记忆单元
  • 输入、输出单元

计算机用途的分类

根据计算机的复杂度和运算能力经行分类的话,可以分为如下几类:

  • 超级计算机(Supercomputer)

    超级计算机是运算速度最快的计算机,但是维护、操作费用极高。一般用于国防军事,气象预测,太空科技,模拟的领域较多

  • 大型计算机(Mainframe Computer)

    例如大型企业的主机,全国性的证券交易所,大型的企业数据库

  • 迷你计算机(Minicomputer)

    迷你计算机仍然保持着大型计算机支持多用户的特性,一般用作科学研究,工程分析与工厂流控等等

  • 工作站(Workstation)

    工作站是针对特殊用途的计算机,在PC效能没有提高前,工作站的性能与性价比是最佳的,一般用于学术研究与工程分析,当然还有做视频qwq

  • 微电脑(Microcomputer)

    PC就属于这个分类,也是本章讨论的目标。分为笔记本和台式机两种。

计算机上常用的计算单位

容量单位

0/1这样的二进制码称之为bit,我们把8各bit称之为byte

回忆一下,一个int,32个bit,4个byte

由于数据量十分的大,我们用一些常见的缩写表示,一般来说每一级的倍率是1024

位进制 Kilo Mega Giga Tera Peta Exa Zetta
二进制 1024 1024k
十进制 1000 1000k

一般来说,文件容量是二进制方式,所以1Gbytes的文件的实际大小是,1*1024*1024*1024 Bytes 这么大。

有个很有趣的事情,比如你买了500Gbyte的硬盘,其真实容量只有460GB左右的容量,为什么呢?参考下文硬盘扇区(sector)部分。

速度单位常用十进制,1GHz就是 1*1000*1000*1000 Hz 的意思。

速度单位

CPU的指令集周期一般用MHz或者GHz之类的单位表示,Hz表示秒分之一。

在网络传输中,使用bit作为单位,因此常见速度单位总是 Mbps,其真实含义就是 Mbits per second。

转换的话,1:8 的转换就好了,举个例子,20M的宽带,最高每秒2.5Mbyte的速度。

PC架构与相关设备组件

一般消费者说的计算机,就是指x86的PC。

Linux最早发展的时候,就是依据PC架构开发的。按照我最喜欢的Intel来说吧

intel-z390-chipset-guru3d-block-diagram

这是截至今天台式机最新的芯片组z390的架构。

目前这块主板上只有Chipset(芯片组,即之前的南桥),负责USB啊,SATA接口,网卡啊之类的。

早期其实还有北桥,由于性能低下直接被整合进入了CPU之中。

看个好玩的事情,有没有发现直接链接CPU的PCI通道只有16条,南桥可以分出来24条。看卡来好像传输速率差不多吼,但是通过芯片组的传输的时间对于电脑来说是相当长的了,所以目前高端主板对于mutiGPU的情况,宁可2*8 PCI3.0 直接连接CPU,也不从芯片组分出来分出来更多的PCI通道。

CPU

CPU只要插槽正确就可以使用了(PC上面可以这么说)。

CPU的频率就和上文说的一样,指代的是CPU每秒可以经行的工作次数。比如一颗3.6GHz的CPU,一秒内可以完成3.6*10^9次工作,每次工作可以完成少量的指令集。

请不要以频率直接的判断CPU的性能强弱,因为CPU的微指令集不同,架构不一样,二缓和三缓的大小不同,每次工作的指令集数量不同。所以,频率只能来比较同款CPU的速度。

频率

说到CPU频率,就必须说说内频率和外频了。

早期的CPU设计中,外频指CPU与外部组件经行数据传输时候的速度,倍频是CPU内部用来加速工作效能的倍数,两者相乘就是CU最终的速度。

总线宽度

我们知道CPU的数据来源于主存储器,如果主存储器给CPU越多,那么系统应该会比较快。如何直到主存储器能提供的数据量呢?我们用前端总线速度(FSB,Front Side Bus)来说明。

比如说CPU的内存控制芯片最高达到1600Mhz,那么如果是64位的CPU,一次可以传递64个bit进入CPU,把64称之为宽度。因此,CPU可以从这样的内存中取得的最大带宽就是:1600MHz*64bit = 1600Mhz * 8 bytes = 12.8Gbyte/s

超线程

Hyper-Thread, HT技术

超线程提出的目的是为了处理CPU某个核心执行单一问题时,指令集没有被完全使用,那么空余的指令集就可以被继续使用。反正CPU的算力没有用完,为什么不能利用呢?

如何实现HT呢?在每一个CPU内部将寄存器(register)分成两部分,让程序分别使用这两个寄存器,也就是说,有两个程序同时“抢夺计算机的计算能力“,而并非使用操作系统的多任务。这样的过程可以让CPU多出来一个核心的样子。比如i9-9900k只有8个核心,却能被系统堪称16个核心。

在许多测试中,HT虽然可能提高效能,不过有些情况可能导致效能降低。

内存

前面提到的CPU主存储器(main memory)在PC中就是动态随机存取内存(Dynamic Random Access Memory,DRAM),随机存取内存在通电时才可以使用,断电后消失,这种RAM被称位挥发性内存。

DRAM根据技术可以分为好几代,使用上广泛的有SDRAM和DDR SDRAM这两种。这两种除了针脚和点药不同外,DDR指支持双倍数据传输速度(Doube Data Rate),可以在一次工作周期内经行两次的数据传输。

DDR2则是4倍,DDR3是8倍,DDR4则是16倍。请注意的是,这都是DDR内存,所以其真实频率是其一般。

除了频率,贷款,内存的容量也是十分重要的。对于服务器而言,内存的容量大于之前所说的。

多通道设计

所有的数据都必须放到主存储器中,所以主存储器的数据宽度固然越大越好。传统的宽度仅为64bit,为了加大这个,两只内存同时使用的话就是128bit了。

关于多通道的实际使用参考主板说明

DRAM和SRAM

除了主存储器外,PC中还有许许多多的内存存在,最常见的就是CPU内的第二层高速缓存(L2 cache)和跨整个CPU的第三层高速缓存(L3 cache)。其结构如图所示:

缓存与寄存器

L2和L3的速度与CPU相同,这是DRAM无法达到的速度(其实在DDR4的高阶一点的内存已经实现,比如我的电脑/doge),所以必须使用SRAM(Static Random Access Memory,静态随机存取内存)帮忙了。SRAM在设计上使用的晶体管数量更多,微型,价格高,不容易做成大容量,所以直接整合到CPU内部是最好的。

ROM

ROM(Read Only Memory) 只读存储器

PC中最常见的ROM就是BIOS了,另外就是一些硬件的Firmware(固件)。这两个东西可以通过写入缓存的方式或EEPROM的方法写入。

显示适配器

PC中间的来说就是显卡了

CPU通过PCIe通道和显卡相互连接。PCIe(PCI-Express)使用的类似管线的方法处理。其带宽如下:

规格 1x 带宽 16x 带宽
PCIe 1.0 250MB/s 4GB/s
PCIe 2.0 500MB/s 8GB/s
PCIe 3.0 ~1GB/s ~16GB/s
PCIe 4.0 ~2GB/s ~32GB/s

AMD把PCIe4.0带入其实emm效果并没有那么理想,目前PC的CPU并不能在一般任务中产生32GB/s的数据流

硬盘与存储设备

计算机总是需要记录和读取数据的,不可能每次都通过键盘打字输入。那么就需要存储设备了。计算机上面的存储设备主要包含有:硬盘,CD,DVD,磁带,闪存,大型的SAN,NAS等等。

硬盘

硬盘我们首先讨论它如何存储,然后讨论如何访问

存储

其根本结构如图:

A9Rcmq9dp_s2p17d_rs

实际工作过程就是在具有磁性的磁盘上,通过在机械臂上的读取头来读写数据。工作时,主轴马达让磁盘转动,机械手臂可以改变角度从而使用读取头来读取数据。近年来,能买到的最大的磁盘做到了14TB级。

关于磁盘的保存方法又有一堆,这里不再赘述。

那么硬盘上如何保存数据的呢?如图所示:

A9Rpvor8g_s2p17g_rs

磁盘在设计的当初,就是在同心圆面上切出一个一个小小的区块,这些小区快整合成一个圆形,用机器臂上的读取头读取。这个小区快就被称为扇区(sector),同一个同心圆扇区组合成的圆就是所谓的磁道(track)。由于一块硬盘里面可能含有多个磁盘,所有磁盘上面的同一个磁道可以组合成所谓的磁柱(cylinder)。

由于外圈的周长比内圈的周长打,可以放下更多的区块,意味着磁盘最外面的读取速度最快,里面较慢。默认来说,都是从外往里写。

同时原本的扇区是设计为512byte大小,由于容量越来越大,为了减少数据量的拆解,所以新的高容量硬盘采用了4Kbyte的扇区设计。

同时在分区方面有旧的MSDOS模式,较新的GPT模式。在GPT模式下,磁盘的分区根据扇区号码来设计,而不是磁柱来设计。详见第七章。同时GPT硬盘给操作系统提供了新的引导方式。

硬盘厂商通常的1TB,500TB都是基于十进制的,所以在二进制的计算机下看起来会不一样。

接口
  • SATA接口
    一个电源口,一个数据口,其带宽如表

    版本 带宽(Gbit/s) 速度(Mbyte/s)
    SATA 1.0 1.5 150
    SATA 2.0 3 300
    SATA 3.0 6 600

    SATA每一代都向下兼容。

    同时因为SATA算法的原因,传输10位编码,仅有8位是数据,剩下两位为校验用。所以贷款计算中,bit转byte变成了1:10而不是1:8。

普通的机械硬盘并不能达到这个水准,目前最快的是(本人亲测)是希捷的酷狼8tb款,空盘写入速度最快350MB/s。

为了速度更快,固态硬盘出现是必要的。(其实之前是通过万转硬盘实现的,最快的能达到2w转,读取速度达到了400MB/s,坎比固态硬盘。但是由于其噪声过大和运行环境要求极高,被固态硬盘代替)

  • SAS接口

    长得和SATA接口完全完全一样,只是算法不同,带来了更加安全,更加快速的传输方案。

    其带宽如下

    版本 带宽(Gbit/s) 速度(Mbyte/s)
    SAS 1 3 300
    SAS 2 6 600
    SAS 3 12 1200

    同时SAS协议原生态支持热插拔等等。

    但是普通PC主板并不支持SAS协议,需要购买拓展卡。

  • USB接口
    旧的USB速度很慢,但是新的emm不是一般般的快,特别是英特尔开源了雷电协议,usb4自带了雷电,能够达到40Gbit/s的速度。

    好玩的事情,雷电协议目前基于4个PCIe通道的,目前使用PCie3.0的极限是40Gbit/s,考虑一下使用了PCIe4.0之后的雷电协议qwq,80Gbit/s不是问题啊。

    USB总的传输速度如表

    版本 带宽(Mbit/s) 速度(Mbyte/s)
    USB 1.0 12 1.5
    USB 2.0 480 60
    USB 3.0 5G 500
    USB 3.1 gen1 5G 500
    USB 3.1 gen2 10G 1000
    USB 4.0 40G 4000

你知道最牛逼的是什么么,USB走的是芯片组,SATA走的是芯片组,NVME固态走的是芯片组,意味着他们的延迟还是一样的!!!USB要升天

ta ta xi wa
算法上的延迟是相同的,但是线缆的传输延迟和雷电三两次转码的延迟导致USB接口还是无法代替直接的PCIe通道。这句话在实际过程中反映到的,就是外接显卡坞性能低下的主要原因!

  • NVMe

    NVM Express(NVMe),叫做非易失性内存主机控制器接口(Non-Volatile Memory express),走PCIe通道,一般占用4个,Intel高阶的固态部分占用8个,对应带宽4GB/s,8GB/s

计算机操作系统

关于计算机语言部分跳过,参考博客中初识c语言一文。

对于一个操作系统,其最主要的功能有如下几个

  • 系统呼叫接口(System Call Interface)
  • 程序管理(Process Control)
  • 内存管理(Memory management)
  • 文件管理系统(File system management)
  • 驱动(Decive drivers)

老婆的图

emm终于完了。累死了

你们你们谁让我老婆伤心,我就打死谁!

哼唧^

TIM图片20191008003503