首先了解下这三个名词的概念:
磁盘存储器管理的主要任务和要求:
总而言之,磁盘存储器管理是为了更好的存放文件。文件的大小不一,但盘块的大小是固定的,对于大文件就需要多个盘块来存放,这些盘块对应的就是文件的物理结构。如何分配这些盘块就是外存的组织方式。通常有以下三种:
由显式链接就引出了Windows的文件系统FAT。(软考中偶尔会考到,所以借此机会稍微了解)
微软早、中期的OS一直都采用的是FAT技术。即利用文件分配表FAT来记录每个文件中所有盘块之间的链接。
FAT中引入了“卷”的概念,就是将一个物理磁盘可以分为四个逻辑磁盘,每个逻辑磁盘就是一个卷(也称分区),每个分区都可以像一个物理磁盘一样的使用。对一个硬盘,早期只支持分为C、D、E、F四个卷,现在已经没有这种限制了。
FAT后面带有的数字的意思是:文件分配表中每个表项所占据的位数。
FAT12中一个表项就是12位,所以最多可以表示4096(2^12)个表项,如果以盘块为基本分配单位(512B),这也意味着最多可以表示4096(2^12)个盘块,那么,一个磁盘分区的容量为 2MB(4096+512B),四个分区加起来也才8MB。这能表示的大小太小了,当磁盘超过8MB时,该如何表示呢?这就引入了新的分配单位——簇。
因为增加单个盘块的容量很不方便,所以选择了将多个盘块看成一个簇来作为操作系统的磁盘分配单位。这样,当一个簇包含8个扇区时,在12位的FAT中最大磁盘容量可以达到64MB。后续的16位,32位也是为了表示扩大表示磁盘的容量。
FAT32虽然相比前两代可以支持更小的簇来支持大容量,提高了存储器利用率。但过大的文件分配表,导致FAT32运行速度比FAT16要慢;其次,FAT32有最小管理空间的限制,FAT32卷必须至少有65537个簇,所以FAT32不支持容量小于512MB的分区;因为目录项中文件长度只有四个字节,所以单个文件不能超过4GB。不能向下兼容。
下表给出在不同分配单元大小下,3中FAT所支持磁盘容量的对比。
块大小 | FAT12 | FAT16 | FAT32 |
0.5KB | 2MB | ||
1KB | 4MB | ||
2KB | 8MB | 128MB | |
4KB | 16MB | 256MB | 1TB |
8KB | 512MB | 2TB | |
16KB | 1024MB | 2TB | |
32KB | 2048MB | 2TB |
既然要为文件分配盘块,那必须知道磁盘上有哪些盘块是可用于分配的。这就需要为磁盘可分配的存储空间设置相应的数据结构,即一个磁盘分配表。常见的有下列几种:
文件的分配已经搞清楚了,那还有一个关键问题是对文件的访问速度。我们都知道内外存的访问速度差别是巨大的,这种差别也成为了计算机系统的瓶颈。人们常用下面的方法来提高磁盘I/O速度。
第一就是利用磁盘高速缓存技术,这里是指在内存中为盘块设置一个缓冲区,这个缓冲区保存某些盘块的副本。内存会优先查看这里。
还有提前读、延迟写、优化物理块分布和虚拟盘(用内存模拟磁盘,RAM盘)等。
这里引出一种非常有用的设计思想:如果使用一个组件对性能的改进受到了很大的限制,那么可通过使用多个相同的组件来获得性能的大幅度提高。
一个典型代表就是廉价磁盘冗余阵列RAID(Redundant Array of Inexpensive Disk)。
这个系统使用了很多台磁盘驱动器来组成一个大磁盘系统。不仅增加了磁盘容量,也提高了磁盘I/O速度和可靠性。
因为有多个磁盘驱动器,所以可以将每一个子盘块的数据分别存储到各个不同磁盘中的相同位置,读取时可以采用并行传输方式输入内存。这就是并行交叉存取。
同时因为有了多个磁盘,所以可以使用冗余数据和各种校验技术来保证磁盘的可靠性。RAID有很多级别,不同级别对应着不同性能。RAID0是最快速的,但没有冗余校验功能,所以不够可靠。RAID1采用镜像复制,提高了安全性,但降低了磁盘利用率。其余的也有各自的容错技术。
影响文件安全性的因素有:人为因素、系统因素和自然因素。
针对这三种因素分别有:存取控制机制、磁盘容错技术和建立“后备系统”的方式来防止危险。
磁盘容错技术就是通过增加冗余的磁盘驱动器、控制器等方法来提高可靠性。也被称为系统容错技术SFT,可分为三个级别:
第一级是低级容错技术,主要用于防止因磁盘表面缺陷造成的数据丢失,包含双份目录、双份FAT以及写后读校验(在将数据写入磁盘后,立马再读出来与内容缓冲区在写后仍保留的数据对比,一致则认为写入成功,否则写入失败进行重写)。
第二级是中级容错技术,主要用于防止磁盘驱动器和磁盘控制器故障。 使用磁盘镜像(一条通道,一个控制器,两个驱动器)和磁盘双工(两条通道,两个控制器和驱动器。)
第三级是基于集群技术的容错功能。