文章目录
1.冯·诺依曼体系结构
(1)冯·诺依曼体系结构思想
- 采用二进制逻辑。指令和数据用二进制表示。
- 程序存储执行。指令和数据以同等地位存于存储器,可按地址寻址。
- 计算机由五大部件组成(运算器、控制器、存储器、输入设备、输出设备)。
补充:
- 指令由操作码和地址码组成。操作码用来表示操作的性质,地址码用来表示操作数在存储器中的位置。
- 指令在存储器内按顺序存放。通常,指令是顺序执行的,在特定条件下,可根据运算结果或根据设定的条件改变执行顺序。
- 以运算器为中心。输入输出设备与存储器间的数据处理通过运算器完成(现代计算机已转化为以存储器为中心)。
(2)五大部件介绍
- 运算器:算术运算、逻辑运算。
- 存储器:存放程序和数据。
- 控制器:指挥程序运行。
- 输入设备:将信息转换成计算机能识别的形式。
- 输出设备:将结果转换成人们熟悉的形式。
(3)现代计算机逻辑架构
- 运算器和控制器合在一起称为中央处理器,简称CPU。
- 以存储器为中心。
2.现代计算机硬件图 和 CPU
(1)现代计算机硬件图
(2)CPU
运算器结构
- 运算器最少包括三个寄存器和一个算术逻辑单元。
- 算术逻辑单元 (Arithmetic&logical Unit,ALU):数据的算术运算和逻辑运算。
- 累加器(Accumulator,ACC):为 ALU 提供一个工作区,用来暂存数据。
- 乘商寄存器(Multiplier-Quotient Register,MQ):负责数据的乘法与除法运算并可保存运算结果。
- 操作数寄存器(X)。
- 程序状态寄存器(Program Status Word,PSW):存放两类信息:一类是体现当前指令执行结果的各种状态信息,如有无进位(CY位),有无溢出(OV位),结果正负(SF位),结果是否为零(ZF位),奇偶标志位(P位)等;另一类是存放控制信息,如允许中断(IF位),跟踪标志(TF位)等。
- 不同的计算机,部件组成是不一样的,下图为模型机例子。
运算器中算术运算的执行过程
加法运算:5 + 2
- 将存储器中的 5 取出,放到 ACC 中。
- 将存储器中的 2 取出,暂存到 X 寄存器。
- ALU 计算,将结果存放到 ACC 中。
(3)CPU中指令执行的过程
指令的组成
- 指令:操作码 + 地址码
一个指令周期的过程
- 程序计数器(Program Counter,PC)中存储的是下一条指令所在的内存单元地址(程序开始执行前,必须将它的起始地址,即程序的第一条指令所在的内存单元地址送入PC。在拥有 MMU 的情况下,其中存放的是程序中的虚拟地址,需要经过地址映射才能得到内存的真实地址,在无 MMU 平台中,其中存放的是内存的真实地址)。因为冯诺依曼体系结构计算机中的指令是顺序存储在内存中的,所以 PC 每一次加一就得到了下一条指令的内存单元地址。
- 指令寄存器(Instruction Register,IR)中存储的是即将执行的指令。
- 指令译码器(Instruction Decoder,ID)对指令中的操作码字段进行分析解释。
- 地址寄存器(Memory Address Register,MAR)用来存放预访问的指令在物理内存中的真实地址,其位数对应存储单元的个数。假如一个存储体中共有 8 个 存储单元,用 3 位二进制数就可以表示所有的地址,地址总线的个数为 3。
- 数据寄存器(Memory Data Register,MDR)用来存放从存储体某单元取出的代码。
- 时序部件:同步数字系统都需要“时钟” (Clock)。时钟是一种信号,它给数字系统中每一个时序逻辑指定一个开始工作的时间点。假想一条流水生产线:每一个加工步骤的工人在完成对一个部件的加工后, 如果啥也不管就直接扔给下一步骤的工人,同时下一步骤完成加工比前一工位慢;那么可以想见 ,部件就在比较慢的这个工位上堆积起来, 越堆越多, 最后造成生产线的阻塞。所以为了保持流水线流畅不阻塞的运转,我们需要找出最慢的工位, 并把最慢工位处理一个部件需要的时间作为 “时钟周期”(指令流水技术中的流水线周期),然后由工长通过哨音,每隔一个时钟周期吹响一次哨子,工人们只在哨子吹响的时候才把部件传递给下一工位,这样就可以保证流水线不再发生阻塞。时钟频率就是时钟周期的倒数,也就是上面例子中,每秒钟工长吹响哨子的次数。再扩展一下,如果这个流水线特别长,比如有数公里长,工长的哨音传播到每个工位的时间其实可以相差很久,这样一来哨音的同步作用就失效了。所以我们必须采取措施来保证每个工位能同时听到哨音。在实际的同步数字电路中,设计者采用专门的线路来传输时钟,并且通过对较短的路径插入时钟缓冲器来保证时钟到达每个时序元件的时间完全一致(延迟平衡)。异步系统不需要时钟,它一般用握手信号来保证系统的流畅运行。也就工位之间商量好了再传递部件。
取指:
- 程序计数器(Program Counter,PC)中存储的是指令的虚拟地址,送到总线上,去地址寄存器(Memory Address Register,MAR)找到指令的物理地址(现在的 MAR 已经集成到 CPU 中)。
- 根据地址映射表找到指令的物理地址。
- 把指令取出来放到数据寄存器(Memory Data Register,MDR)中(MDR 已经集成到 CPU 中)。
- 将指令从 MDR 送到指令寄存器(Instruction Register,IR)中。
分析:
- 从 IR 送到指令译码器(Instruction Decoder,ID)对指令进行翻译。
- CU 控制单元控制 CPU 做运算。
执行:
- 将 IR 中 “数字1” 的数据地址送到 MAR。
- 找到 “数字1” 的物理地址,将数据送到MDR。
- 将 MDR 中“数字1” 的数据送到累加器(Accumulator,ACC)中。
- 将 IR 中 “数字2” 的数据地址送到 MAR。
- 找到 “数字2” 的物理地址,将数据送到 MDR。
- 将 MDR 中“数字2” 的数据送到 X 寄存器中。
- ALU 计算,将结果存放到 ACC 中。
3.主存
(1)内存的物理结构
- 内存由一个大的存储体组成,存储体是由一个个的存储单元构成。
- 一个存储单元的容量大小一般是 8 bit(即1 Byte,1个字节)。一个 int 型变量占 4 个字节,那么需要用 4 个存储单元存储。变量的地址以存储单元的首地址为准 。
- 每个存储单元都有一个地址,地址用十六进制数表示(前缀表示:0x00000000,后缀表示:00000000H)。
- 冯诺依曼计算机把指令和数据以同等的地位存到主存(内存)当中。
(2)内存的寻址方式
- 总线可以分为控制总线、数据总线和地址总线。
- 地址总线:传递地址的信息。假如需要 n 位二进制来表示所有的地址,则地址总线的个数为 n。假如一个存储体中共有 8 个 存储单元,用 3 位二进制数就可以表示所有的地址,地址总线的个数为 3。
- 数据总线:传递数据的信息。CPU 一次能处理 n 位的数据,则数据总线的长度为 n 。n 的位数为一个字的长度。
(3)典型真题:内存容量计算
内存按字节编址:数据总线长度为 8。
地址总个数:CBFFFFH - A4000H + 1 = CC0000H - A4000H = 28000H 。
转为十进制数:28000H = 2 * (16 ^ 4)+ 8 * (16 ^ 3)= 2 ^ 17 + 2 * 15 = (2 ^ 7 + 2 * 5 )* (2 ^ 10)= 160 KB(个)。
芯片个数:160KB / 32KB = 5(个)。
内存按字节编址:数据总线长度为 8。
地址总个数:8FFFFH - 84000H + 1 = 90000H - 84000H = 0C000H 。
转为十进制数:0C000H = 12 * (16 ^ 3)= 48 * (2 ^ 10)= 48 KB(个)。
芯片个数:48 KB / 4 KB = 12(个)。
4.存储器
(1)存储器的分类
- 按照构成材料分类:机械硬盘和固态硬盘均属于外部存储设备,机械硬盘属于磁存储器,固态硬盘属于半导体存储器(闪存颗粒)。
- 按照工作方式分类:内存和外存属于 RAM。
- 按照访问方式分类:内存属于按照地址访问的存储器,Cache属于按照内容访问的存储器。
- 缓存补充
- 本地缓存(如 HashMap、Guava Cache),本地缓存没有成熟的超时机制;其次本地缓存使用的是jvm的内存;各个进程间的缓存不可以共享;这种缓存没有持久化机制,随着服务的重启,缓存所占用的空间会释放掉;
- 集中式缓存(如 redis),他们一般由成熟的 expire 超时机制;是和业务分离的独立的服务,使用的是 redis 本进程分配的缓存,不是 jvm 的缓存;这种缓存也叫分布式缓存,各个进程间可以共享,不需要在各个进程本地都缓存一份,可以保证各个进程间的缓存一致;支持持久化;
- 缓存补充
(2)典型真题:存储器的分类
(3)存储器之间的层级关系
5.校验码
- 在计算机领域,通信技术是十分重要的,对于数据的传输要求很严格。 数据的存取(存储器)和传输过程(通信)中有可能发生错误,而产生错误的原因有许多,有电路内部的因素,也有着外部干扰的因素。为了减少或者避免这种错误,不仅需要改善提高硬件的可靠性,同时也要在数据编码上进行校验。
- 校验码的思想:信息的错误无法避免,但是如果信息错了,能够发现并且纠正错误。
(1)码距与检错纠错公式(包含公式需记忆)
- 码距的判断:两个码字逐位比较,看有几位是不同的。e >= t。
- 校验码是在码距的原理上产⽣的,码距越⼤校验能⼒,纠错能⼒越强,所以奇偶校验码、海明码、CRC循环冗余校验其原理都是利⽤⼀系列规则提升⼀段码字的码距⽽已。
(2)码距与检错纠错举例
- 长度为 1 时不能检测纠错
- 长度为 2 时可以检测 1 个误码,不能纠错
- 长度为 3 时可以检测 1 个误码,纠正1 个误码
(3)奇偶校验码
- 偶校验:在信息的 最前面 或者 最后面 加上1个校验位,使得传输数据中1的个数变为偶数。
- 奇校验:在信息的 最前面 或者 最后面 加上1个校验位,使得传输数据中1的个数变为奇数。
- 奇偶校验码的码距为 2,检错 1 位。偶数个位出错时发现不了,奇数个位出错的时候能发现。
(4)海明码
- 奇偶校验码只能检错 1 位,原因在于奇偶校验码的校验位少,码距小。
- 海明码是建立在奇偶校验码的基础之上,但是不再是一串信息只加一个校验码,而是采用分组校验的方式(并不是简单的分组校验),具有检验并纠正 1 位错误的能力。
实例
现在有一个二进制编码 1011,求按偶校验配置的海明码:
(1)计算分组数(包含公式需记忆)
- 分组数 k 需满足公式: 2 ^ k >= n + k + 1(信息位是 n 位,校验位是 k 位)
- 公式可转换为 2 ^ k - 1 >= n + k,n + k 为海明码的位数
- k 应该取满足公式的最小值,以保证信息的传输速率
答:二进制编码 1011 的 n 为 4,k 为 3,分为 3 组。
(2)确定校验码位置
- 校验码的位置:必须是在 2 ^ n 位置(n 从 0 开始,分别代表从右边数起分别是1、2、4、8、16…)。
- 信息码的位置:非 2 ^ n 位置。
答:校验码在编码中的位置为:D4 D3 D2 P3 D1 P2 P1
(3)确定分组
位置(从右至左) | 所在位置的二进制编码 | 组 |
---|---|---|
P1(校验码) | 001 | 1 |
P2(校验码) | 010 | 2 |
D1 | 011 | 1,2 |
P3(校验码) | 100 | 3 |
D2 | 101 | 1,3 |
D3 | 110 | 2,3 |
D4 | 111 | 1,2,3 |
答:
- 第一组:P1(校验码),D1(值为1),D2(值为0),D4(值为1)
- 第二组:P2(校验码),D1(值为1),D3(值为1),D4(值为1)
- 第三组:P3(校验码),D2(值为0),D3(值为1),D4(值为1)
(4)计算偶校验时校验码的值
- 偶校验:看1的个数,如果是偶数,校验码为0,如果是奇数,校验码为1。
答:
- P1 = 0
- P2 = 1
- P3 = 0
D4(1) D3(1) D2(0) P3(0) D1(1)P2(1) P1(0),生成的海明码为:1 1 0 0 1 1 0。
(5)海明码纠正
假设传输中 D3 发生了错误,原码变为了: 1 0 0 0 1 1 0,如何检错纠错:
答:
- 第一组:P1(0),D1(1),D2(0),D4(1)
- 与校验值码值对比相同:0
- 第二组:P2(1),D1(1),D3(0),D4(1)
- 与校验码的值对比不同:1
- 第三组:P3(0),D2(0),D3(0),D4(1)
- 与校验码的值对比不同:1
检错结果的二进制编码为 110 ,转换为十进制为 6,即第 6 位发生了错误,纠正后为 1 1 0 0 1 1 0。
典型真题:海明码中校验位的数量
(5)CRC 循环冗余校验码
实例1
(1)化简多项式
- 把 X 都当成是 2,得到初步的结果。
- 把缺少的 2 ^ 3, 2 ^ 2 虚拟上去。
- 把题目中现有的 2 ^ 4、2 ^ 1、2 ^ 0 用二进制 1 代替,虚拟出来的 2 ^ 3、2 ^ 2 用 0 代替。
答:
多项式化简为:1 0 0 1 1。
(2)信息码加 0 ,做模二除运算(不进位加法)
- 信息码后面加 0 ,多项式最高是几,就加几个 0。
- 除数和被除数做模二除运算(不进位加法)
- 够除时商为 1,不够除时商为 0。
(3)得到的余数即为校验码
答:
余数为 1 1 0 0。
(4)用校验码替换信息码0的占位得到最终传输的数据
答:
最终传输的数据 = 信息位 + 校验位 = 1 0 1 1 1 1 1 0 0。
实例2
6.指令
(1)指令周期
- 指令周期:取出、解释并执行一条指令所需的全部时间。
- 一个指令周期可以大概分为:取指周期、分析周期、执行周期。
(2)指令执行的方式
(1)顺序方式
(2)重叠方式
- 假设每一段的执行时间是相同的。
(3)流水方式
指令流水技术
流水线建立时间与流水线周期
- 流水线周期:△t,执行时间最长的一段。如取指 2ns、分析 3ns、执行 1ns,则 △t 为 3ns。
- 流水线建立时间:第一条指令执行完毕所需的时间。理论上是各部分时间之和,即 t1 + t2 + … + tk,实践中每个部分的执行时间都是 △t,即 k * △t。
流水线的执行时间(包含公式需记忆)
- 理论公式:(t1 + t2 + … + tk) + (n - 1)* △t
- 实践公式:k * △t + (n -1 )* △t
- n 为 指令数,k 为执行一条指令的过程数。
典型真题:计算流水线的执行时间
答:
- 流水线周期是 2ns。
- 理论公式:(2 + 2 + 1)+ 99 * 2 = 203ns。
- 实践公式:3 * 2 + 99 * 2 = 6 + 204ns。
流水线的吞吐率、最大吞吐率、加速比(包含公式需记忆)
- 最大吞吐率:指令周期的倒数。
- 流水线加速比:串行方式执行时间 / 流水线方式执行时间
典型真题:流水线的吞吐率、最大吞吐率、加速比
答:
- 最大吞吐率 = 指令周期的倒数 = 1 / (3△t)
- 加速比 = (9△t * 10)/ (9△t + 9 * 3△t)= 90△t / 36△t = 5 : 2
7.高速缓冲存储器
(1)程序的局部性原理
一个优秀的程序、优美的代码,一般都具有良好的局部性。简洁、高效是每个程序员的追求。了解程序的局部性,能编写出更高效的代码。因为有良好局部性的程序能更好的利用缓存。
- 时间局部性(temporal locality):被引用过一次的存储器位置在未来会被多次引用(通常在循环中)。
- 空间局部性(spatial locality):如果一个存储器的位置被引用,那么将来他附近的位置也会被引用。
数据引用的局部性
- 图(a)中的 sum 具有良好的时间局部性。因为在 for 循环结束之前,每次执行循环体都有对 sum 的访问。sum 没有空间局部性,因为sum 是标量,即通过 sum 这个地址(可认为是基址)只能得到一个值。
- 循环体中对 a[][] 的引用具有良好的空间局部性。for循环体中,是以行序为主序对元素进行遍历,也就是说内层循环先访问第一行的元素,然后第二行。图 (b)中是二维数组的存储情况。可以看出,在存储器中也是按照行序为主序来进行存储的,存储顺序和访问顺序一致,所以对 a[][] 的引用有良好的空间局部性。对 a[][] 的引用没有时间局部性,因为每个元素只被访问一次。
- 按顺序、连续的对数组进行引用,我们称为步长为1的引用模式。同理,在一个连续的向量中,每隔 k 个元素对向量进行访问,称为步长为 k 的引用。一般来说,随着步长的增加,空间局部性会下降。对于多维数组而言,步长对空间局部性的影响显得尤为重要。例子中对a[][] 实行的是步长为1 的引用。
- 例子中交换了索引 i、j 的位置。也就是说在对 a[][] 进行遍历的时候,以列序为主序。即先访问第一列,在访问第二列。图 (b)中是二维数组的存储情况,可以看出,对 a[][] 的存储仍是行序为主序。这意味着每访问一个元素,就要跳过 k 个存储器才能访问下一个。于是得到一个简单的结论:该例中对 a[][] 的访问是以步长为 k 的模式(k 为每行的元素个数)没有良好的空间局部性。
- 在对向量的访问中,如果访问数序和存储顺序一致,并且是连续访问,那么这种访问具有良好的空间局部性。
取指令的局部性
- 指令存在于存储器中,cpu 要读指令就必须取出指令。所以也能评价对于取指令的局部性。
- 在 for 循环中,循环体内的指令多次被执行,所以有良好的时间局部性。
- 循环体中的指令是桉顺序执行的,有良好的空间局部性(指令在存储器中是顺序存放的)。
局部性小结
- 重复引用同一个变量有良好的时间局部性。
- 对于步长为 k 的引用的程序,步长越小,空间局部性越小。步长为 1 的引用具有良好的空间局部性。k 越大,空间局部性越差。
- 对于取指令来说、循环有较好的时间和空间局部性。
(2)Cache 与主存、CPU 的交互过程
- CPU 将数据的主存地址发送到地址总线上。
- 主存地址与主存Cache地址变换机构做映射(主存和 Cache 不是一一对应的关系,主存当中的第一页可能存在 Cache 中的任何一页当中,映射关系在操作系统章节)。
- 判断要找的数据在不在 Cache 当中。
- 命中:将映射到的 Cache 内块号与块内地址拼接起来得到信息在 Cache 中的真正地址,经过数据总线把数据取出来。
- 不命中:判断 Cache 中还有没有相应的空间,如果有,直接把主存中这部分内容装入 Cache。如果没有,经过 Cache 替换机构,用一定替换算法,把需要的内容替换到 Cache 中,不需要的数据替换出来,放入主存中。
(3)主存 Cache 地址映射方法
- 每一页映射的数量低,则地址变换速度快,冲突率高。
- 每一页映射的数量高,则地址变换速度慢,冲突率低。
直接映像
- 主存分为了 128 个区,每个区的大小相同。每个区分为 16 个页,每一页的大小相同。Cache 的大小等于每个区的大小。
- 每个区的第 0 页都映射到 Cache 的第 0 页,每个区的第 1 页都映射到 Cache 的第 1 页,以此类推。
- Cache 中除了划分的页,还有标记位(记录相映射的内存页数)。
- 优点:地址变换简单。
- 缺点:不灵活,页冲突率高。
全相联映像
- 主存和 Cache 不分区。
- 主存中的任何一页都可以映射到 Cache 中的任何一页。
- 优点:不会有冲突的情况。
- 缺点:不能从主存的页号直接获得 Cache 的页号,变换比较复杂,速度比较慢,需要查看所有标记位。
组相联映像
- 主存分页分区,每个区又划分成若干个组。Cache 的大小等于每个区的大小,内部也划分成组。
- 组间是直接映像,每个区的第 0 组都映射到 Cache 的第 0 组,每个区的第 1 组都映射到 Cache 的第 1 组,以此类推。
- 组内是全相联映像。
- 缺点:更加复杂。
小结
- 距离 CPU 近:直接映像或组相联映像,速度快。
- 距离 CPU 远:全相联映像。
(4)Cache 的性能
- Cache 的平均访问时间 = 访问命中率 * Cache 的存取时间 + (1 - 访问命中率)* 主存的访问时间 = 98% * 2ns + 2% * 5ns。
(5)Cache 的替换策略
(6)写策略
写回法
写直达法
标记法
8.磁盘存储器
(1)磁盘的特点
- 由一系列磁盘组成,沿着中心主轴旋转,每一个磁盘都有两个盘面。
- 组合臂带动着若干磁臂,每个磁臂上都有一个磁头,每个磁头对应着一个磁盘的盘面。
- 数据存放在盘面上,盘面由一圈一圈的磁道组成,磁道被划分为若干个扇区。数据的存取理论上先找到磁道,再找到扇区,实际上会把若干个扇区称之为一块,按照一块一块去存取。
- 每个盘面同一个磁道会组成若干个柱面。
(2)典型真题:磁盘读取时间
- R1:数据读取 = 3ms,记录处理时间 = 6ms,由于磁盘是不断旋转的,记录处理过程中磁盘旋转到了 R4 的位置,需要等待磁盘旋转到 R2,旋转时间 = 8 * 3 = 24ms。总耗时33ms。
- 处理 10 个记录的时间 = 33 * 9 + 9 = 306ms。
- 最少时间 = 9 * 10 = 90ms。
(3)典型真题:最短移臂调度算法
- 离 21 号磁道最近的是 23 号磁道,扇区从小到大排序。
9.计算机系统结构的分类
(1)Flynn(费林)分类定义
- 指令流:计算机能够执行的一系列指令的序列。
- 数据流:指令需要调用相应的数据,数据的序列叫做数据流。
(2)Flynn 分类中四类计算机系统
- SISD:对应于流水线技术中的顺序处理。典型代表:传统单核CPU计算机,奔腾2芯片属于SISD。
- SIMD:单一指令部件控制,按照同一指令流的要求为多个处理单元分配各自所需的数据。典型代表:阵列机(单控制单元发出指令,多处理单元执行,使用多数据单元),主要是服务器。
- MISD:多个处理单元,多条不同指令对同一数据流及其中间结果进行不同处理。只作为理论研究基础,没有真正投入应用。
- MIMD:典型代表:大型服务器,多核CPU计算机。
(3)指令系统
复杂指令系统 CISC(Complex Instruction Set Computer)
- 支持很多种寻址方式:指令的地址码可以直接跟着操作数,或者是操作数的内存地址,或者是操作数所在的寄存器地址。
- 以微程序控制为主。微程序是在操作系统之下。
- 可以对主存单元数据直接处理。
精简指令系统 RISC(Reduced Instruction Set Computer)
- 单周期指令执行,采用流水线技术。
- 以硬布线逻辑控制为主。
- 与寄存器交互,速度更快,增加了寄存器数量。
- 增加寄存器。
(4)典型真题:指令系统
10.总线
- 右图的总线类型:某一时候只允许一对设备在总线中传递数据。
- 所有设备共享的。
(1)总线的分类
相对于 CPU 或 其他芯片的位置
- 可分为内部总线和外部总线两种。
功能
- 可分为地址总线、数据总线、控制总线。地址总线用来传送地址信息、数据总线用来传送数据信息、控制总线用来传送各种控制信号。有的系统,地址和数据总线可能是共用的。
数据线的多少
- 可分为并行总线、串行总线。
- 并行总线:包含有多条双向的数据线来进行集成。这种传输过程当中,它的多条数据线一次性进行传输的时候,可以一次传输多个数据位,也就是传输多个比特位,这个传输的过程显然并行的效率会比较高。数据的传输效率高,但是各个数据线的传输特点可能存在一些区别,当数据发送之后,到达接收端之后,可能会有一些延迟、或者不一致,那这个传输可能会出现错误,那么我们就认为并行总线不宜过长,适合近距离的连接。
- 串行总线:只包含一条双向传输的数据线,或者两条单向传输的数据线。这种传输过程当中,会让数据按照各个比特位,以一定的速度和顺序进行串行的发送,这个串行发送过程中对数据线的要求就不是很高了,所以适合长距离连接进行传输。
(2)典型真题:总线的工作
- 单工总线:广播。发送端发送,接收端接收,反过来不行。
- 半双工总线:对讲机。都可以发送,接收。交替进行。
- 全双工总线:打电话。随时发送,接收。
11.廉价冗余磁盘阵列(Redundant Arrays of Independent Disks,RAID)
- 寻道时间和等待时间会拖垮计算机的性能。增加小的磁盘形成阵列的方式,每次读取时同时从这些阵列中读取,提升读取的速率,缩短了寻道的时间。
- 有一些 RAID 技术中存在校验技术,对磁盘中的数据起到保护的作用。
- 容量大的磁盘造价高,用小容量的磁盘组成大容量的磁盘,既能增加速度,增加容量,还能保护数据。
- 磁盘阵列技术是架构设计中硬件方面的一种冗余技术,用于提升系统可靠性。
(1)RAID 0(无冗余和无校验的数据分块)
- 没有冗余信息。是所有 RAID 级别中存储性能最高的。
(2)RAID 1(磁盘镜像阵列)
- 将数据完全一致的分别写到工作磁盘和镜像磁盘,磁盘空间利用率为 50%。
(3)RAID 2(采用纠错海明码的磁盘阵列)
- 采用了海明码纠错技术,用户需要增加校验盘来提供单纠错和双验错功能。
- 大量数据传输时IO性能较高,不利于小批量数据传输。
- 实际应用中很少使用。
(4)RAID3 和 RAID4 (采用奇偶校验码的磁盘阵列)
- 奇偶校验码存放在一个独立的校验盘上。
- 读数据很快,但因为写入数据时要计算校验位,速度较慢。
- RAID3 采用位交叉奇偶校验,适用于大型文件且 IO 需求不频繁。
- RAID 4 采用块交叉奇偶校验,适用于大型文件的读取。
(5)RAID5(无独立校验盘的奇偶校验码的磁盘阵列,出过考题)
- 无独立校验盘,校验信息分布在组内所有盘上。
- 大批量和小批量数据的读写性能都很好,适用于IO需求频繁的应用。
- 当有 N 块阵列盘时,用户空间为 N - 1 块盘容量。做 raid 5 阵列所有磁盘容量必须一样大,当容量不同时:最小的容量 * (N - 1 )。
(6)典型真题:RAID5
(7)RAID6(独立的数据硬盘与两个独立的分布式校验方案)
- 在 RAID5 基础上,为了进一步加强数据保护而设计的一种 RAID 方式。
- 当有 N 块阵列盘时,用户空间为 N - 2 块盘容量。
- 使用没有 RAID5 广泛。
(8)RAID7(最优化的异步高IO速率和高数据传输率)
- 完全可以理解为一个独立存储计算机,自身带有操作系统和管理工具,可以独立运行。
(9)RAID10(最可靠与高性能)
- RAID 1+0 也被称为 RAID10标准,是将 RAID0 和 RAID1 标准结合的产物。
- RAID1是冗余的备份阵列,RAID0 负责数据读写的阵列。
- 由于利用了 RAID0 极高的读写效率和 RAID1 较高的数据保护和恢复能力,使 RAID10成为了一种性价比较高的等级。