存储系统三

4.存储系统三,虚拟存储器,磁盘阵列技术
(1)虚拟存储器
虚拟存储器又称为虚拟存储系统,由主存储器和辅助存储器共同组成。它把辅助存储器作为主存储器的扩充,对应用程序员来说,好像微机系统有一个容量很大的主存。
计算机在运行程序时,需将代码加载入内存中,CPU读取内存中的代码并执行。
早期的计算机在没有引入 虚拟存储器之前,需将整个待运行的程序加载到内存中,因为内存空间有限,当待加载的程序过大时就会出现问题(多进程,则需要占用更多的内存空间)。现代计算机引入虚拟存储器的概念,通过将对内存进行抽象,将其作为存储在硬盘上数据的高速缓存,只将当前进程部分代码缓存到主存中(当前进程的程序较少时,可以全部缓存在主存中),从而提高了主存的利用率,使其同时可以容纳更多的进程同时运行。
1.地址空间及地址
  CPU只能执行已装入主存的那一部分程序块,与此同时,为了提高主存的空间利用率,还应及时释放已不使用的信息所占用的空间,以便装入其他有用的信息。这样,随着程序的运行,各种信息就会在主存与辅存之间不断地调入、调出。
在虚拟存储器中要注意如下三个概念。
  ① 虚拟地址空间。又称为虚存地址空间,是应用程序员用来编写程序的地址空间,与此相对应的地址称为虚拟地址或逻辑地址。
  ② 主存(内存)地址空间。又称为实存地址空间,是存储、运行程序的空间,其相应的地址称为主存物理地址或实地址。
  ③ 辅存(外存)地址空间也就是磁盘存储器的地址空间,是用来存放程序的空间,相应的地址称为辅存地址或磁盘地址。
  不难看出,主存与辅存的关系极类似于主存与高速缓存的关系,但主存—cache体系和主存—辅存体系还有一些差别。
  ① 主存—cache体系的目的是满足程序对速度的要求,而主存—辅存体系是为了满足容量的要求。所以前者容量小,传送信息块的长度短,读/写速度快;而后一种体系容量大,传送数据块的长度长,读/写速度相对较慢。
  ② 在主存—cache体系中,CPU可以直接访问cache和主存;而在主存—辅存体系结构中,CPU不可以直接访问辅存。
  ③ 为了保证速度,主存—cache体系的存取信息过程、地址变换和替换策略全部采用硬件来实现,而主存—辅存体系基本上由操作系统的存储管理软件辅助一些硬件进行数据块的划分来实现主存—辅存之间的调度,所以需要设计存储管理软件来实现这些功能。
2.工作原理
  虚拟存储器的工作原理是:在执行程序时,允许将程序的一部分调入主存,其他部分保留在辅存。即由操作系统的存储管理软件先将当前要执行的程序段(如主程序)从辅存调入主存,暂时不执行的程序段(如子程序)仍保留在辅存,当需要执行存放在辅存的某个程序段时,由CPU执行某种程序调度算法将它们调入主存。
  虚拟存储器由硬件和软件(操作系统)自动实现对存储信息的调度和管理,其工作过程如图所示。
这里写图片描述
当应用程序访问虚拟存储器时,必须给出逻辑地址(虚拟地址)。首先进行内部地址转换(过程①),如果要访问的数据在主存中(也就是内部地址转换成功),则根据转换所得到的物理地址访问主存储器(过程②);如果内部地址转换失败,则要根据逻辑地址进行外部地址转换(过程③),得到辅存地址。与此同时,还需检查主存中是否有空闲区(过程③),如果没有,就要根据替换算法,把主存中暂时不用的某块数据通过I/O机构调出,送往辅存(过程④),再把由过程③得到的辅存地址中的块通过I/O机构送往主存(过程⑤);如果主存中有空闲区域,则直接把辅存中有关的块通过I/O机构送往主存(过程⑤)。
块是主存与辅存之间数据传送的基本单位。根据对虚拟存储器不同的管理方式,块可以具体化为段、页和段页三种形式,可相应地形成段式存储器、页式存储器和段页式存储器。
分段存储管理:
分段存储管理的基本原理是:按程序的逻辑结构,以段为单位划分,各个段的长度因程序而异。为了说明逻辑段的各种属性,系统为每一个段建立一个段表(驻留在内存),记录段的若干信息,如段号、段起点、段长度和段装入情况等。CPU通过访问段表,判断该段是否已调入主存,并完成逻辑地址与物理地址之间的转换。分段地址转换如图5.34所示。
逻辑地址由段号S和段内地址W组成,段号S相当于逻辑段的段名,它表示该逻辑段的起始地址。在进行地址转换时,操作系统用S检索段表,段表中记录的信息1表明该段已调入主存,b是S段装入主存的起始地址,因此该逻辑地址对应的物理地址为b+W。
在分段存储管理方式中,由于段的分界与程序的自然分界相对应,所以具有逻辑独立性,易于程序的编译、管理、修改和保护,也便于多道程序共享。但是,因为段的长度参差不齐,起点和终点不定,给主存空间分配带来了麻烦,容易在段间留下不能利用的“零头”,造成浪费。
这里写图片描述
分页存储管理
分页存储管理的基本原理是:将主存空间和辅存空间分别等分为大小相等的若干页,页的大小为个字节,如(1KB),(2KB),(4KB)等,并且为每个页按顺序指定一个页号,即0页、1页、2页、…。为了叙述方便,把主存的页(物理页或绝对页)称为页面。例如,若主存空间为8KB,辅存空间为16KB,页的大小为1KB,则主存空间可分为8个页面,其页面号为0~7;辅存空间可分为16个页,其页号为0~15,如图5.35所示。当程序运行时,以“页”为单位进行地址映射,即操作系统以页为单位把逻辑页从辅存调入主存,存放在物理页面上,供CPU执行。在分页存储管理机制中,把逻辑页对应的逻辑地址称为线性地址。
这里写图片描述
在分页存储管理中,需要解决的关键问题是:选择哪一个物理页存放调入的逻辑页?如何将线性地址转换为物理地址?为了解决这些问题,系统为每一个页建立一个页表,保存在主存中,存放页的若干信息,如页号、容量、是否装入主存、存放在主存的哪一个页面上等。
CPU访问某页时,首先要查找页表,判断要访问的页是否在主存,若在主存为命中,否则为未命中。然后将未命中的页按照某种调度算法由辅存调入主存,并根据逻辑页号和存放的物理页面号的对应关系,将线性地址转换为物理地址。分页存储管理的地址转换如图5.36所示。
这里写图片描述
页表在存储器中的位置由页表地址寄存器定位。图5.36的页表中记录的状态信息为:第1项页号指示逻辑页;第2项特征位记录该逻辑页是否装入主存,“0”表示未装入,“1”表示已装入;第3项记录该逻辑页装入主存所存放的物理页的页面号,即1号逻辑页从辅存调入主存后,存放在第7号物理页面上。
存储单元的物理地址由页面号和页内地址两部分组成,如图5.37(a)所示。8KB主存的页内地址由地址线A9~A0提供,可寻址1KB的页内存储空间,地址范围为0~1 023;页面号由高3位地址线A12~A10提供,8个页面的页面号为0~7。由此可以看出,页面存储单元的物理地址为
  物理地址=页的大小×页面号+页内地址
  线性地址的确定方法与物理地址的确定方法完全相同,也是由页号和页内地址两部分组成,如图5.37(b)所示。16KB辅存空间可分为16页,页内地址由地址线A9~A0提供,其页号0~15由高4位地址线A13~A10提供。
这里写图片描述
在进行地址转换时,由于逻辑页和物理页的大小相等,它们的页内地址是相同的,所不同的是页号,只要将线性地址的页号转换为物理地址的页面号即可。在图5.36中,给出1号逻辑页中某条指令访问数据的逻辑地址为1024×1+452=1 476,它存入主存7页面上所对应的物理地址为 1 024×7+452=7 620。
段页存储管理:
分页存储管理的主要特点是主存利用率高且对辅存管理容易,但模块化性能差;分段存储管理的主要特点是模块化性能好,但主存利用率不高且对辅存的管理比较困难。段页存储管理是将分段存储管理和分页存储管理结合起来的一种折中方案。它首先将程序按其逻辑结构划分为若干个大小不等的逻辑段,然后再将每个逻辑段划分为若干个大小相等的逻辑页。主存空间也划分为若干个同样大小的物理页。辅存和主存之间的信息调度以页为基本传送单位,每个程序段对应一个段表,每页对应一个页表。CPU访问时,段表指示每段对应的页表地址,每一段的页表确定页所在的主存空间的位置,最后与页表内地址拼接,确定CPU要访问单元的物理地址。段页地址转换如图5.38所示
这里写图片描述
段页存储管理方式综合了段式管理和页式管理的优点,但需要经过两级查表才能完成地址转换,消耗时间多。
(2)磁盘阵列技术
磁盘阵列(DiscArray)是由许多台磁盘机或光盘机按一定的规则,如分条(Striping)、分块(Declustering)、交叉存取(Interleaving)等组成一个快速,超大容量的外存储器子系统。
RAID(Redundant Array of Inexpensive Disks)称为廉价磁盘冗余阵列。RAID 的基本原理是把多个便宜的小磁盘组合到一起,成为一个磁盘组,使性能达到或超过一个容量巨大、价格昂贵的磁盘。用RAID的好处简单的说就是:安全性高,速度快,数据容量超大。 某些级别的RAID技术可以把速度提高到单个硬盘驱动器的400%。磁盘阵列把多个硬盘驱动器连接在一起协同工作,大大提高了速度,同时把硬盘系统的可靠性提高到接近无错的境界。这些“容错”系统速度极快,同时可靠性极高。
目前 RAID技术大致分为两种:基于硬件的RAID技术和基于软件的RAID技术。
RAID级别
一般常用的RAID阶层,分别是RAID 0、RAID1、RAID 2、RAID 3、RAID 4以及RAID 5,再加上二合一型 RAID 0+1﹝或称RAID 10﹞。我们先把这些RAID级别的优、缺点做个比较:
RAID 0 存取速度最快 没有容错
也称为条带模式(striped),即把连续的数据分散到多个磁盘上存取,如图所示。当系统有数据请求就可以被多个磁盘并行的执行,每个磁盘执行属于它自己的那部分数据请求。这种数据上的并行操作可以充分利用总线的带宽,显著提高磁盘整体存取性能。因为读取和写入是在设备上并行完成的,读取和写入性能将会增加,这通常是运行 RAID 0 的主要原因。但RAID 0没有数据冗余,如果驱动器出现故障,那么将无法恢复任何数据。
这里写图片描述这里写图片描述
要实现RAID0必须要有两个以上硬盘驱动器,RAID0实现了带区组,数据并不是保存在一个硬盘上,而是分成数据块保存在不同驱动器上。因为将数据分布在不同驱动器上,所以数据吞吐率大大提高,驱动器的负载也比较平衡。如果刚好所需要的数据在不同的驱动器上效率最好。它不需要计算校验码,实现容易。它的缺点是它没有数据差错控制,如果一个驱动器中的数据发生错误,即使其它盘上的数据正确也无济于事了。不应该将它用于对数据稳定性要求高的场合。如果用户进行图象(包括动画)编辑和其它要求传输比较大的场合使用RAID0比较合适。同时,RAID可以提高数据传输速率,比如所需读取的文件分布在两个硬盘上,这两个硬盘可以同时读取。那么原来读取同样文件的时间被缩短为1/2。在所有的级别中,RAID 0的速度是最快的。但是RAID 0没有冗余功能的,如果一个磁盘(物理)损坏,则所有的数据都无法使用。
RAID 1 完全容错 成本高
RAID 1 又称为镜像(Mirroring),一个具有全冗余的模式,如图所示。RAID 1可以用于两个或2xN个磁盘,并使用0块或更多的备用磁盘,每次写数据时会同时写入镜像盘。这种阵列可靠性很高,但其有效容量减小到总容量的一半,同时这些磁盘的大小应该相等,否则总容量只具有最小磁盘的大小。
这里写图片描述这里写图片描述
对于使用这种RAID1结构的设备来说,RAID控制器必须能够同时对两个盘进行读操作和对两个镜象盘进行写操作。通过下面的结构图您也可以看到必须有两个驱动器。因为是镜象结构在一组盘出现问题时,可以使用镜象,提高系统的容错能力。它比较容易设计和实现。每读一次盘只能读出一块数据,也就是说数据块传送速率与单独的盘的读取速率相同。因为RAID1的校验十分完备,因此对系统的处理能力有很大的影响,通常的RAID功能由软件实现,而这样的实现方法在服务器负载比较重的时候会大大影响服务器效率。当您的系统需要极高的可靠性时,如进行数据统计,那么使用RAID1比较合适。而且RAID1技术支持”热替换”,即不断电的情况下对故障磁盘进行更换,更换完毕只要从镜像盘上恢复数据即可。当主硬盘损坏时,镜像硬盘就可以代替主硬盘工作。镜像硬盘相当于一个备份盘,可想而知,这种硬盘模式的安全性是非常高的,RAID 1的数据安全性在所有的RAID级别上来说是最好的。但是其磁盘的利用率却只有50%,是所有RAID级别中最低的。
RAID 2 带海明码校验,数据冗余多,速度慢
从概念上讲,RAID 2 同RAID 3类似, 两者都是将数据条块化分布于不同的硬盘上, 条块单位为位或字节。然而RAID 2 使用一定的编码技术来提供错误检查及恢复。这种编码技术需要多个磁盘存放检查及恢复信息,使得RAID 2技术实施更复杂。因此,在商业环境中很少使用。下图左边的各个磁盘上是数据的各个位,由一个数据不同的位运算得到的海明校验码可以保存另一组磁盘上,具体情况请见下图。由于海明码的特点,它可以在数据发生错误的情况下将错误校正,以保证输出的正确。它的数据传送速率相当高,如果希望达到比较理想的速度,那最好提高保存校验码ECC码的硬盘,对于控制器的设计来说,它又比RAID3,4或5要简单。没有免费的午餐,这里也一样,要利用海明码,必须要付出数据冗余的代价。输出数据的速率与驱动器组中速度最慢的相等。
这里写图片描述
RAID 3 写入性能最好 没有多任务功能
RAID 3 是将数据先做XOR 运算,产生Parity Data后,在将数据和Parity Data 以并行存取模式写入成员磁盘驱动器中,因此具备并行存取模式的优点和缺点。进一步来说,RAID 3每一笔数据传输,都更新整个Stripe﹝即每一个成员磁盘驱动器相对位置的数据都一起更新﹞,因此不会发生需要把部分磁盘驱动器现有的数据读出来,与新数据作XOR运算,再写入的情况发生﹝这个情况在 RAID 4和RAID 5会发生,一般称之为Read、Modify、Write Process,我们姑且译为为读、改、写过程﹞。因此,在所有 RAID级别中,RAID 3的写入性能是最好的。
RAID 3 的 Parity Data 一般都是存放在一个专属的Parity Disk,但是由于每笔数据都更新整个Stripe,因此,RAID 3的 Parity Disk 并不会如RAID 4的 Parity Disk,会造成存取的瓶颈。
RAID 3 的并行存取模式,需要RAID 控制器特别功能的支持,才能达到磁盘驱动器同步控制,而且上述写入性能的优点,以目前的Caching 技术,都可以将之取代,因此一般认为RAID 3的应用,将逐渐淡出市场。
RAID 3 以其优越的写入性能,特别适合用在大型、连续性档案写入为主的应用,例如绘图、影像、视讯编辑、多媒体、数据仓储、高速数据撷取等等。
这里写图片描述
这种校验码与RAID2不同,只能查错不能纠错。它访问数据时一次处理一个带区,这样可以提高读取和写入速度,它像RAID 0一样以并行的方式来存放数据,但速度没有RAID 0快。校验码在写入数据时产生并保存在另一个磁盘上。需要实现时用户必须要有三个以上的驱动器,写入速率与读出速率都很高,因为校验位比较少,因此计算时间相对而言比较少。用软件实现RAID控制将是十分困难的,控制器的实现也不是很容易。它主要用于图形(包括动画)等要求吞吐率比较高的场合。不同于RAID 2,RAID 3使用单块磁盘存放奇偶校验信息。如果一块磁盘失效,奇偶盘及其他数据盘可以重新产生数据。 如果奇偶盘失效,则不影响数据使用。RAID 3对于大量的连续数据可提供很好的传输率,但对于随机数据,奇偶盘会成为写操作的瓶颈。 利用单独的校验盘来保护数据虽然没有镜像的安全性高,但是硬盘利用率得到了很大的提高,为n-1。
RAID 4 具备多任务及容错功能 Parity 磁盘驱动器造成性能瓶颈
创建RAID 4需要三块或更多的磁盘,它在一个驱动器上保存校验信息,并以RAID 0方式将数据写入其它磁盘,如图所示。因为一块磁盘是为校验信息保留的,所以阵列的大小是(N-l)*S,其中S是阵列中最小驱动器的大小。就像在 RAID 1中那样,磁盘的大小应该相等。
如果一个驱动器出现故障,那么可以使用校验信息来重建所有数据。如果两个驱动器出现故障,那么所有数据都将丢失。不经常使用这个级别的原因是校验信息存储在一个驱动器上。每次写入其它磁盘时,都必须更新这些信息。因此,在大量写入数据时很容易造成校验磁盘的瓶颈,所以目前这个级别的RAID很少使用了。
RAID 4 是采取独立存取模式,同时以单一专属的Parity Disk 来存放Parity Data。RAID 4的每一笔传输﹝Strip﹞资料较长,而且可以执行Overlapped I/O,因此其读取的性能很好。
但是由于使用单一专属的Parity Disk 来存放Parity Data,因此在写入时,就会造成很大的瓶颈。因此,RAID 4并没有被广泛地应用。
这里写图片描述这里写图片描述
RAID4和RAID3很象,不同的是,它对数据的访问是按数据块进行的,也就是按磁盘进行的,每次是一个盘。在图上可以这么看,RAID3是一次一横条,而RAID4一次一竖条。它的特点的RAID3也挺象,不过在失败恢复时,它的难度可要比RAID3大得多了,控制器的设计难度也要大许多,而且访问数据的效率不怎么好。
RAID 5 具备多任务及容错功能 写入时有overhead
在希望结合大量物理磁盘并且仍然保留一些冗余时,RAID 5 可能是最有用的 RAID 模式。RAID 5可以用在三块或更多的磁盘上,并使用0块或更多的备用磁盘。就像 RAID 4一样,得到的 RAID5 设备的大小是(N-1)*S。
RAID5 与 RAID4 之间最大的区别就是校验信息均匀分布在各个驱动器上,如图4所示,这样就避免了RAID 4中出现的瓶颈问题。如果其中一块磁盘出现故障,那么由于有校验信息,所以所有数据仍然可以保持不变。如果可以使用备用磁盘,那么在设备出现故障之后,将立即开始同步数据。如果两块磁盘同时出现故障,那么所有数据都会丢失。RAID5 可以经受一块磁盘故障,但不能经受两块或多块磁盘故障。
RAID 5也是采取独立存取模式,但是其Parity Data 则是分散写入到各个成员磁盘驱动器,因此,除了具备Overlapped I/O 多任务性能之外,同时也脱离如RAID 4单一专属Parity Disk的写入瓶颈。但是,RAI?D 5在座资料写入时,仍然稍微受到”读、改、写过程”的拖累。
由于RAID 5 可以执行Overlapped I/O 多任务,因此当RAID 5的成员磁盘驱动器数目越多,其性能也就越高,因为一个磁盘驱动器再一个时间只能执行一个 Thread,所以磁盘驱动器越多,可以Overlapped 的Thread 就越多,当然性能就越高。但是反过来说,磁盘驱动器越多,数组中可能有磁盘驱动器故障的机率就越高,整个数组的可靠度,或MTDL (Mean Time to Data Loss) 就会降低。
由于RAID 5将Parity Data 分散存在各个磁盘驱动器,因此很符合XOR技术的特性。例如,当同时有好几个写入要求发生时,这些要写入的数据以及Parity Data 可能都分散在不同的成员磁盘驱动器,因此RAID 控制器可以充分利用Overlapped I/O,同时让好几个磁盘驱动器分别作存取工作,如此,数组的整体性能就会提高很多。
基本上来说,多人多任务的环境,存取频繁,数据量不是很大的应用,都适合选用RAID 5 架构,例如企业档案服务器、WEB 服务器、在线交易系统、电子商务等应用,都是数据量小,存取频繁的应用。
RAID5是一种旋转奇偶校验独立存取的阵列。它和RAID1、2、3、4各盘阵列的不同点,是它没有固定的校验盘,而是按某种规则把其冗余的奇偶校验信息均匀地分布在阵列所属的所有磁盘上。于是在同一台磁盘机上既有数据信息也有校验信息。这一改变解决了争用校验盘的问题,因此DAID5内允许在同一组内并发进行多个写操作。所以RAID5即适于大数据量的操作,也适于各种事务处理。它是一种快速,大容量和容错分布合理的磁盘阵列。
这里写图片描述这里写图片描述

RAID 0+1/RAID 10 速度快、完全容错 成本高
RAID 0+1/RAID 10,综合了RAID 0 和 RAID 1的优点,适合用在速度需求高,又要完全容错,当然经费也很多的应用。 RAID 0和RAID 1的原理很简单,合起来之后还是很简单,我们不打算详细介绍,倒是要谈谈,RAID 0+1到底应该是 RAID 0 over RAID 1,还是RAID 1 over RAID 0,也就是说,是把多个RAID 1 做成RAID 0,还是把多个 RAID 0 做成RAID 1?
RAID 0 over RAID 1
假设我们有四台磁盘驱动器,每两台磁盘驱动器先做成RAID 1,再把两个RAID 1做成RAID 0,这就是RAID 0 over RAID 1:
(RAID 1) A = Drive A1 + Drive A2 (Mirrored)
(RAID 1) B = Drive B1 + Drive B2 (Mirrored)
RAID 0 = (RAID 1) A + (RAID 1) B (Striped)
RAID 1 over RAID 0
假设我们有四台磁盘驱动器,每两台磁盘驱动器先做成RAID 0,再把两个RAID 0做成RAID 1,这就是RAID 1 over RAID 0:
(RAID 0) A = Drive A1 + Drive A2 (Striped)
(RAID 0) B = Drive B1 + Drive B2 (Striped)
RAID 1 = (RAID 1) A + (RAID 1) B (Mirrored)
在这种架构之下,如果 (RAID 0) A有一台磁盘驱动器故障,(RAID 0) A就算毁了,当然RAID 1仍然可以正常工作;如果这时 (RAID 0) B也有一台磁盘驱动器故障,(RAID 0) B也就算毁了,此时RAID 1的两磁盘驱动器都算故障,整个RAID 1资料就毁了。
因此,RAID 0 OVER RAID 1应该比RAID 1 OVER RAID 0具备比较高的可靠度。所以我们建议,当采用RAID 0+1/RAID 10架构时,要先作RAID 1,再把数个RAID 1做成RAID 0。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值