前端必会的计算机组成原理(一)计算机体系结构

596

计算机组成原理读书笔记

1. 计算机发展简史

如下图所示,计算机发展经历了4个阶段 image.png

1.1 电子管(真空管)计算机

image.png 它不能像今天我们编写程序那样编程。只能执行预定的操作,操作信息通过硬连线发送到电路中。即使使用了接线电缆和开关,编程也只能通过重新连线完成。

1.2 晶体管计算机

1948年AT&T贝尔实验室的三个科学家发明了晶体管,之后发展出了半导体,它在功能上与真空管等效,但体积更小,功耗更低。晶体管的发明,使将多个晶体管放在一块硅片上构成一个完整的电路成为可能。 image.png

1.3 集成电路计算机

image.png

IBM推出了7094与1401,两者间主打功能不同,无法相互兼容。所以IBM推出了兼容的产System/360(也就是操作系统的雏形),导致了计算机体系结构这一概念的出现(即指令集体系结构)。

1.4 超大规模集成电路计算机

image.png

超标量处理和乱序执行的出现是计算机组成的另一个重要变化。超标量处理包括从存储器中读出几条指令且并行执行这些指令;乱序执行则是指以不同于程序中顺序的顺序执行指令,以避免等待某条指令的执行,从而加快指令的执行速度。乱序执行允许在当前指令等待正被使用的资源时执行程序中靠后的指令。用菜谱做类比,乱序执行就相当于在烹饪主菜的时候准备甜点。Intel在它的Pentum系列处理器中引入了乱序执行机制。

1.X=2 * C
2.y-C + 4
3.Z=X + Y
4.4-4 * C
5.P - C - 3
有时可以通过改变指令的执行顺序提高计算机的速度。在这个例子里,指令(4)和(5)可以在任何时候执行,但指令(3)必须在指令(1)和(2)结束后才能执行。

1.5 存储技术发展

20世纪30年代,约翰·文森特·阿塔纳索夫发明出一种最早的存储设备,这是一个覆盖着电容的旋转的磁鼓,能够充电并存储1和0。磁鼓旋转时,电容从一排触点下通过,它们的值会被读出。

20世纪40年代,汞超声延迟线被用来存放数据,就像一串超声脉冲沿着一条充满水银的细管传播一样。当脉冲信号从一端传递到另一端时,它会被放大并再次循环。这是真正的动态存储。第一个快速数据存储设备是由英国曼彻斯特大学的弗雷德里克·威廉姆斯(Frederick Williams)发明的。阴极射线管(最初用于雷达显示器,后来用于电视机)通过用电子束照射某个点进行充电,从而将数据存放在其表面(这是阿塔那索夫旋转磁鼓的电子版本)。第一代威廉姆斯管只能存储 1024 比特,后来翻倍为 2048 比特。

1949年,佛瑞斯特设计了铁氧体磁芯存储器。磁芯是一个很小的磁材料环,能够沿顺时针或逆时针方向磁化。到20世纪 70年代,铁氧体磁芯存储器已成为大型机的主流存储器。实际上,铁氧体磁芯存储器带给我们磁芯存储器(core store)这个名词,现在描述大容量外存储器时偶尔还会用到它。

20世纪 70年代,人们发明了半导体动态存储器用作磁芯存储器的替代品,现在已成为数据存储的标准手段。今天,我们可以很容易地用容量较小的DRAM模块(在一个小的电路板上集成几个存储芯片)实现8G字节的存储容量。

1956年IBM在它的统计控制随机存取方法(RAMAC)上引入了一种磁盘存储机制,将数据保存在一个旋转的磁盘的表面。RAMAC 305 磁盘能够存储大约SMB的数据,转速为1200 rpm。自那时起,磁盘性能开始提升。现在。磁盘的最大容量约为4T(2")字节。由于磁盘的机械特性,其典型转速为7200 rpm,仅有最初 RAMAC的6倍快。让我们再次说一次∶现代磁盘的容量是RAMAC的数百万倍,但其速度却仅是RAMAC 的6倍。这一细节指出了计算机发展过程中的瓶颈∶计算机各个组成部分的发展速度是不均衡的。不过。现在用来替代硬磁盘的固态盘技术具有非常快的、完全电子化的驱动器。

今天,个人计算机使用光存储器(DVD 或蓝光光盘)导入程序或存储数据。光存储技术将信息存放在透明聚碳酸酯盘上的螺旋轨道上。利用激光技术从可重写光盘上读出信息,或将信息写入可重写光盘。CD技术是在1958年(发明激光)~1978年(可用的光存储器)间发明的。DVD(1997年发明)是改进的CD,蓝光光盘(2006年)是改进的DVD。

2. 计算机的体系与结构

2.1 什么是计算机系统体系结构

媒体一直以来将一个微处理器(microprocessor)或者甚至是一块芯片(chip)称作计算机系统。实际上,计算机系统包括读取并执行程序的中央处理单元(central processing unit,CPU),保存程序数据的存储器,以及将芯片转换为实用系统的其他子系统。这些子系统会使CPU与显示器、打印机。intermet等外部设备之间的通信变得更加容易。

计算机中实际执行程序的部分叫作 CPU,或者更简单地被称作处理器。微处理器则是在单个硅片上实现的CPU。围绕着微处理器构建的计算机被称作微机。

尽管CPU是计算机的核心,计算机的性能既取决于CPU,也取决于其他子系统的性能。如果不能高效地进行数据传输,仅仅提高CPU的性能是毫无意义的。计算机科学家曾开玩笑说,提高微处理器的性能只不过是让CPU更平地开始等待来自存储器或磁盘驱动器的数据。计算机不同组成部分的性能提升速度是当前计算机系统设计者面临的主要问题,因为各个部分的性能提升速度并不一致。例如,过去几十年中,处理器的性能持续高速增长,而硬盘的性能(访问时间)在过去30年内几乎保持不变。不过随着固态盘(solidstatedisk,SSD)等半导体硬盘开始取代机械硬盘,这种窘境有可能结束。

下图描述了一个简单的通用计算机(如个人计算机或工作站)结构。除了CPU外,图中还有一些几乎所有计算机中都有的部件。信息(即程序和数据)保存在存储器中。为了实现不同的目标,真实的计算机会使用不同类型的存储器。下图就就有 Cache、主存、辅存等多个存储层次。注意的是,虽然图中的Cache位于CPU外,但目前绝大多数处理器都在CPU内集成了片上 Cache

image.png

2.2 冯诺伊曼体系

image.png

早期的数字计算机通过硬连线(hardwired)完成特定任务。硬连线是指计算机的功能(程序)只能通过重新布线来改变。 通用计算机把硬件(即实际的数字电路)按照程序的指示完成范围相当广泛的工作。

image.png

上图详细地描述了数字计算机的结构,它可被分为两部分∶中央处理单元存储器系统。CPU 读程序并完成程序指定的操作。存储器系统保存两类信息,程序、程序处理或产生的数据。

注意的是,很少有计算机像上图那样在CPU 和存储器之间设置两条独立的信息通路。大多数计算机在 CPU 和存储器系统之间仅有一条信息通路,数据和指令要轮流使用这条通路。之所以在上图中画出两条通路,是为了强调存储器中既保存了组成程序的指令,也保存了程序所用的数据。

冯诺依曼体系结构
• 必须有一个存储器
• 必须有一个控制器
• 必须有一个运算器
• 必须有输入设备
• 必须有输出设备
image.png

冯诺伊曼机特点:

  • 能够把需要的程序和数据送至计算机中
  • 能够长期记忆程序、数据、中间结果及最终运算结果的能力
  • 能够具备算术、逻辑运算和数据传送等数据加工处理的能力
  • 能够按照要求将处理结果输出给用户

现代计算机结构 image.png

2.3 指令执行过程

image.png

上图描述了一个执行z=x+y指令的过程。CPU必须首先从存储器中取出(fetch)一条货令。在CPU分析或解码这条指令之后。它会从存储器中读出这条指令所需的所有数据。第一条指令,LOAD x,从存储器中读出变量X的值,并将它暂存在寄存器中。第二条指令从存储器中读出变量Y的值并保存在另一个寄存内。然后在 CPU 读出第三条指令时,它会将这两个寄存器的内容相加,并将结果保存在第三个寄存器中。第四条指令会将加法的结果写回存储单元 Z。

要说一台计算机所做的就是从存储器中读数据,对数据进行计算(加、乘等),然后将计算结果写回存储器,也有一定的道理。计算机能做的另外一件事情是测试数据(即判断一个数是否为0,它的符号是正还是负),然后根据测试结果从两个候选的指令流中选出一个来执行。

6条基本指令

MOV A, b 将B的值复制到A;
LOAD A, B 将存储单元B的值复制到寄存器A中(将数据从存储器复制到 CPU)
STORE A, B 将寄存器B的值复制到存储单元A中(将数据从 CPU复制到存储器);
ADD A, b A与 B相加,结果保存到A中; (涵盖了所有的数据处理指令,如减法、乘法甚至返回 A与 B的最大值的指令)
TEST A 测试A的值是否为 0;
BEQ Z 若最后一次测试结果为 TRUE,执行地址Z处的代码,否则继续执行。

寄存器是(CPU内部用来存放数据的存储单元。时钟提供了脉冲流,所有内部操作都在时钟脉冲的触发下进行。时钟频率是决定计算机速度的一个因素)
寄存器是用来存放一个单位的数据或字数据的存储单元。寄存器通常用它所保存数据的位数来描述,典型的有8位、16 位、32 位和64位。寄存器与存储器中的字存储单元没有本质区别。二者的实际差别在于,寄存器位于 CPU内,它的访问速度远远快于站问CPU外的存储器。

时钟用来生成连线的间隔固定的电脉冲流。之所以被称作时钟,是因为可用这些电脉冲来计时或确定计算机内所有事件的顺序。例如,某处理器可能会在每个时触脉冲到来时执行一条新的指令。
时钟可用它的重复速率或频率来定义。计算机的典型时钟频率即范围在1MHz 至 4.5GHz之间。时钟也可以用时钟脉冲的宽度或持续时间来定义,即频率的倒数(f= 1/T)。例如,一个1MHz时钟信号的持续时间为 1μs,IGHz时钟信号的持续时间为 1×10-9s或 lns。一个5GHz时钟信号的周期为200ps(ps=皮秒)。光在200ps内大约传播2英寸。
事件由时钟信号触发的数字电路被称作同步的,因为它们由时钟信号来同步。有些事件则是异步的,因为它们可以在任何时间发生。例如,如果移动一下鼠标,它会向计算机发送一个信号。这是个异步事件。然而,计算机可以在每个时钟脉冲检测鼠标的状态,这是一个同步事件。

2.4 计算机编程语言

计算机上执行的代码表示为二进制1和0组成的串,被称作机器码(machine code)。每种计算机都只能执行一种特定的机器码。人类可读的机器码(例如ADD R0,Time)叫作汇编语言。能够在类型完全不同的计算机上运行,与底层计算机体系结构几乎没有关系的代码叫作高级语言(比如C或 Java)。在执行之前,高级语言程序必须首先被编译为计算机的本地机器码。

程序翻译与程序解释 image.png

image.png

计算机最终执行的指令都是L0

  • 翻译过程生成新的L0程序,解释过程不生成新的L0程序
  • 解释过程由L0编写的解释器去解释L1程序

程序翻译型语言:c/c++、Object-c、Golang等
程序解释型语言:Python、Php、JavaScript等
翻译+解释型:Java、C#

计算机层级 image.png

  1. 硬件逻辑层
  • 门、触发器等逻辑电路组成
  • 属于电子工程的领域
  1. 微程序机器层
  • 编程语言是微指令集
  • 微指令所组成的微程序直接交由硬件执行
  1. 传统机器层
  • 编程语言是CPU指令集(机器指令)
  • 编程语言和硬件是直接相关
  • 不同架构的CPU使用不同的CPU指令集
  • 微指令 < 微程序 = 机器指令
    • 一条机器指令对应一个微程序
    • 一个微程序对应一组微指令
  1. 操作系统层
  • 向上提供了简易的操作界面
  • 向下对接了指令系统,管理硬件资源
  • 操作系统层是在软件和硬件之间的适配层
  1. 汇编语言层
  • 编程语言是汇编语言
  • 汇编语言可以翻译成可直接执行的机器语言
  1. 高级语言层
  • 编程语言为广大程序员所接受的高级语言
  • 高级语言的类别非常多,由几百种
  • 常见的高级语言有:Python、Java、C/C++、Golang等

指令集体系结构包括∶数据类型(每个字的位数以及各个位的含义),用来保存临时结果的寄存器,指令的类型和格式,以及寻址方式(表示数据在存储器中存放位置的方法)。

微代码(Microcode)与微处理器无关。微代码定义了一组基本操作(微指令),通过执行这些操作可以解释执行机器码。ADD P,0,R是一条典型的机器指令,而微指令可能像"将数据从寄存器X移到总线Y上"那么简单。如何定义微指令是芯片设计者的职责。

外体系结构是指计算机体系结构较高层次的方面,如数据结构和指令集。前缀exo意为外部的,表示汇编语言程序员看到的计算机抽象。

内体系结构则表示计算机的内部组成,包括计算机基本单元的性能,各个部件是如何连接的,信息流的控制方式。也就是说,内体系结构在寄存器、加法器和控制电路等功能部件一级描述了处理器。

微体系结构,它描述了执行机器指令时必须完成的一些动作(例如将数据从一个寄存器复制到另一个寄存器中)。内体系结构执行的操作是由微体系结构实现的。例如,内体系结构只会关注加法器的功能,而微体系结构则会关注ALU是如何实现这些功能的。因此,外体系结构是程序员看计算机的抽象视图,它是由内体系结构实现的,而内体系结构又是由微体系结构通过执行微程序实现的。

外体系结构为最高层,表示程序员所看到的计算机视图。内体系结构为中间层次,从计算机的组成模块和模块间的互连等方面描述计算机组成。微体系结构(最低层次)则描述了如何在门级实现计算机的组成模块。

3. 存储程序计算机

3.1 模拟计算机执行程序

找出最大游程,即同一个数字连续出现的最大次数。 image.png

我们用R表示在同一序列状态,NR表示不在,如下图 image.png

i 串的当前位置
New_Digit 刚从数串中读出的数字的值
Current_Run_value 当前序列数值
Current_Run_length 当前序列长度 
Max_Run 目前为止的最大序列长度

根据以上定义数值,我们得出下图 image.png

以下是伪代码

1. 读出串的第一个数字,将其称为 New_Digit
2. 将 Current_Run_Value 的值置为 New_Digit
3. 将 Current_Run_Length 的值置为 1
4. 将 Max_Run 的值置为 1 
5. REPEAT
6. 读出序列中的下一个数字(即 read New_Digit)
7. IF 它的值与 Currenz_Run_Value 相同
8.    THEN Current Run Length = Crrent Run_Length+1
9.     ELSE {Curxent_Run_Length = 1
10.        Current_Run_Value = New_Digit}
11. IF Current_Run_Length > Max_Run
12.     THEN Max_Run = Current_Run_Length
13. UNTIL 读出了最后一个数字

第1行从串中读出一个数,这个串必须保存在计算机存储器中的某处。符号名 New_Digit指明了这个数在存储器中的位置。计算机必须确保它在任何需要使用当前序列的当前值的时候,都能访问到存储器的这个位置。
第2行是一个赋值操作,它将一个值赋给一个变量。同样,第3行和第4行也是赋值操作,它们分别将变量current_Run_Length 和Max_Run的值置为1。计算机必须能够完成从存储器中读出一个数,修改这个数并且将修改后的数写回存储器等操作。
第 5行包含关键字REPEAT,它告诉我们这里是一组将被执行1次或多次的操作的起始位置。这组操作以第 13 行的关键字 UNTIL 结尾。
第7、8和10行说明了条件执行,即要执行的操作类型取决于测试结果。 第7行比较从串中读出的数值与当前序列的数值是否相同(即比较New_Digit与 Current_Run_value是否相同)。然后根据比较结果执行下面两个操作中的一个。一个操作由第8行关键字THEN后面的文字指定,另一个则由第9、10两行ELSE后的文字指定。第 9和10两行包含在一对花括号中,说明执行时它们将被视作ELSE路径上的一个整体。

根据以上各部分的命名我们介绍下一些简单的定义

常量——指程序执行过程中不会被修改的值;例如,如果将圆的周长表示为c=2πr,那么2和π都是常量。
变量——指程序执行过程中会发生改变的值。在上面的例子中,c 和r都是变量。
符号名——为了便于记忆和理解而用来引用变量和常量的名字。例如,我们将国的周长称为C,将其半径称为r。圆周率3.1415926的符号名为π。当程序被编译为机器码的时候,符号名将被替换为实际的值。
地址——计算机将信息保存在存储器中,每个位置都有一个唯一的地址。例如,圆的半径可能被保存在存储地址为 1234的单元中。我们不会去记住每个变量存放在存储器中的地址,而是用不同的符号名来表示每一个地址;上面的地址 1234可以被称作r。 值和位置——表达式e=2πr中的r表示什么,值还是位置?人们将r视作代表圆半径值的符号名,比如5。但是,计算机却将r看作地址 1234的符号名,必须进行存储器读访问才能得到实际值。那么表达式r=r+1是表示修改半径的值(r= 5+1=6)还是修改地址的值(r=1234+1=1235)呢?区分存储单元的地址和它的内容非常重要,特别是在理解指针这个概念时。
指针——指针是个变量,它的值表示存储地址。修改一个指针后,它将指向一个不同的值。指针并不神秘。在传统算术中,符号xi中的i就是一个指针;不过我们通常将它称为索引。改变指针(或索引)的值(如x1、x2、x3和x4)就可以访问表、数组或矩阵中相应位置的元素。

3.2 存储器映射

存储器中的每个位置要么保存了指令要么保存了数据元素

我们模拟以下程序执行过程,为了简便起见,我们不得不省略了一些细节。例如,我们在地址10处放置了一条跳转指令,它告诉计算机忽略地址11 和12处的指令,直接执行地址 13的指令。这是必需的,因为如果执行了分支的THEN部分,那么必须忽略掉它的ELSE 部分。此处还说明了怎样用符号Memory(i)来访问每个数字,它表示存储器的第i个单元。i的值被初始化为21,并且循环在i等于 37时结束。

0i = 21
1New Digit = Memory(i)
2将变量 Current_Run_Value 的值置为变量 New_Digit的值
3将变量 Current_Run_Value 的值置为1
4将变量 Max_Run 的值置为1
5REPEAT
6i = i + 1
7New Digit = Memory(i)
8IF New Digit Current_Run_Value
9THEN Current_Run_Length = Current_Run_Length + 1
10跳转到13行
11ELSE Current_Run_Length = 1
12Current_Run_Value = New_Digit
13IF Current_Run_Length > Max_Run
14THEN Max_Run = Current_Run_Length
15UNTIL i = 37
16Stop
17New Digit
18Current_Run_Value
19Current_Run_Length
20Max_Run
212 串第一个数字
223
232
247
......
371 串最后一个数字

下图描述了存储系统的组成。处理器将一个放在地址总线上的地址以及一个用于选择读操作或写操作(它们有时也被称作读或写周期)的控制信号发送给存储器。在读周期中,存储器将数据放在数据总线上供CPU读取。在写周期中,放在数据总线上的数据被写人存储器。信息进入或离开存储器的位置(或计算机系统的其他功能部分)叫作端口。
虽然下图中的存储器是简化后的版本,它却准确地描述了将数据和指令连续存放的计算机存储器。一台真正的计算机会使用存储系统层次(每个层次都有可能采用不同的技术来实现)。这些层次包括保存频繁被访问数据的速度非常快的Cache、主存,以及速度非常慢的辅存,在这一层次中大量数据会一直保存在磁盘、光盘或DVD中,直到使用时才会被调入主存。

image.png

RTL 符号

在RTL语言中,我们通常用方括号[]表示存储单元的内容。表达式
[15] = Max_Run
的含义是"地址为 15 的存储单元保存了变量 Max_Run的值"。
左箭头符号←表示数据传送操作。例如,表达式[15]←[15]+1
的含义是"将地址为 15的存储单元的值加1,并将结果写回地址为15的存储单元"。考虑下面3 个 RTL表达式∶
a. [20] = 5
b.[20] ← 6
c.[20] ←[6]
表达式(a)表示地址为 20的存储单元的值等于数字5。表达式(b)将数字6写入(复制或载入)地址为20的存储单元。表达式(c)将地址为6的存储单元的内容复制到地址为20的存储单元。注意RTL符号←等价于传统赋值符号=,后者用于一些高级语言中。RTL并不是一种计算机语言,它只是一种用来定义计算机操作的符号。

从存储器中取出每条指令都需要进行一次访存操作(即读存储器) 在机器上执行一条指令需要至少两次访存。第一次访存是读取指令。第二次访存要么从存储器中读出指令需要的数据,要么将它之前的指令产生的或修改过的数据写回存储器.有时候也称存储程序计算机是按照读取/执行(fetch/execution)周期的两阶段模式工作的。

3.3 指令类型

  1. 三地址指令
    [Address1] ← [Address2] operation [Address3]
    它一共需要4次访存(即一次取指令,两次取两个源操作数,一次保存结果)。

image.png

下图描述了如何用操作码选择一个操作(四选一),用源地址选择两个存储单元、以及用目的地址选择写回操作数的存储单元。该图还说明了加法指令执行期间所产生的信息流。 image.png

  1. 两地址指令
    operation Address1,Address2
    这里Address2为源操作数,Address1既是源操作数也是目的操作数。这种指令格式意味着从存储器中读出源操作数,对其进行操作,并将结果写回存储器中第一个源操作数的位置。指令 ADD P,Q的 RTL定义为[P] ← [P] +[Q]

两地址指令会破坏它的一个操作数。也就是说,它会用结果替换源操作数P。

在实际的计算机中,一般都不会允许同一条指令中使用两个存储地址。绝大多数计算机(如 Pentium 或更现代一些的 Core i7处理器)都规定一个地址是存储器地址,另一个地址是寄存器。

  1. 单地址指令 由于指令中只提供了一个操作数地址而指令却需要至少两个地址,处理器不得不使用一个不需要显式地址的第二操作数。也就是说,第二个操作数来自 CPU 内一个叫作累加器(accumulator)的寄存器。

寻址方式是计算机指令集的一个重要特征,它是确定操作数位置的方法。例如,可以直接(即它的地址为1234)或间接(即寄存器5的内容是我们所需要的操作数的地址)给出操作数的位置

image.png

3.4 存储层次

计算机科学家将存储器视作一个巨大的通过地址访问的数组。

image.png

寄存器存放处理器的工作数据,Cache是缓存常用数据的快速存储器,DRAM存放工作数据块,硬盘则保存程序和数据。请注意,硬盘的容量是寄存器的 4000万倍,但其速度却比寄存器慢2000万倍。

处理器会访问快速的L1(一级)Cache,它是 CPU的一部分,并希望 92%的信息都会在那里找到。如果数据不在L1 Cache 中,则会去访问容量更大但速度更慢的L2(二级)Cache。也许在那里找到数据的概率为98%。如果这次访问也失败了,计算机也许还会去另外一个 Cache 中查找——三级 Cache。如果那里也没有,就只能从主存中取出这个数据了。

如何保持 Cache 存储器和磁盘中的数据一致,是计算机设计者所关注的主要问题。

3.5 总线

总线将计算机的两个或多个功能单元连接在一起并允许它们相互交换数据(例如CPU与显卡之问的总线)。总线还将计策机与外设迮接在一起(例如将打印机接入计机的USB总线)。

image.png

总线结构的问题在于,每次只有唯一一个设备能够与其他设备通信,因为这里只有一条信息通路。如果两个设备同时请求使用总线,它们不得不去竞争遂线的控制权。一些系统使用一个名为仲裁器的专用部件来决定允许哪个设备继续工作,而其他竞争者只能等待轮到自己。

宽度——一般用并行数据通路的数量来定义总线的宽度。一条 64位宽的总线一次能够传送64 位(8 个字节)信息。不过,这个术语也会用来表示构成总线的连接线的总数。例如,一条总线可能含有50条信息通路,其中32 条用来传输数据(其余的可能是控制通路或者甚至是电源线)。
带宽——总线带宽是衡量信息在总线上的传输速率的一项指标。带宽的单位要么是 B/s,要么是 b/s。在保持数据传输率不变的情况下增加总线的宽度,可以提高带宽。
延迟——延迟是从发出数据传输请求到实际数据传输的时间间隔。总线延迟通常包括传输开始之前进行总线仲裁的时间。

多总线系统

为什么要使用两条总线?首先,多条总线允许并发操作。例如,两个设备可以通过总线A相互通信,与此同时另一对设备可以通过总线 B相互通信。一个更重要的原因在于这些总线可能具有完全不同的特点和操作速度。 image.png

4. 计算机的计算单位

4.1 容量单位

  • 在物理层面,高低电平记录信息
  • 理论上只认识0/1两种状态,高电平记录1,低电平记录0,0/1称为bit(比特位)
  • 0/1能够表示的内容太少了,需要更大的容量表示方法

image.png

1G = 1024^3Bytes = 1024^3*8bits

4.2 速度单位

4.2.1 网络速度

为什么电信拉的100M光纤,测试峰值速度只有12M每秒?
这里的100M并不是内存,而是指速度为100M/s
网络常用单位为(Mbps)

  • 100M/s = 100Mbps = 100Mbit/s
  • 100Mbit/s=(100/8)MB/s=12.5MB/s

4.2.2 CPU频率

CPU速度就是指1/0电平每秒中变换次数

  • CPU的速度一般体现为CPU的时钟频率
  • CPU的时钟频率的单位一般是赫兹(Hz)
  • 主流CPU的时钟频率都在2GHz以上 Hz其实就是秒分之一(1s多少次),它是每秒中的周期性变动重复次数的计量,并不是描述计算机领域所专有的单位2GHz = 2*1000^3Hz = 每秒20亿次

image.png