操作系统之磁盘存储器

来源:互联网 发布:java核心技术 下载 编辑:程序博客网 时间:2024/05/21 15:02

扇区、盘块和簇

首先了解下这三个名词的概念:

  • 扇区——磁盘驱动去操作磁盘的最小单位,通常为512B
  • 盘块——操作系统操作磁盘的单位,但通常认为盘块和扇区是一个意思,都表示磁盘的基本单位,只不过在操作系统中多以盘块来表示。
  • 簇——这是在Windows中FAT12文件系统引入的一个概念,簇其实就是一组相邻的盘块(扇区),用簇作为一个虚拟盘块,这样操作系统就可以以簇为单位来进行盘块分配。通俗的说,就是让操作系统的基本分配单位看上去变大了,从一个盘块变成了几个盘块。簇的大小一般是2n(n为整数)个盘块。

磁盘存储器管理的主要任务和要求:

  1. 有效地利用存储空间。即采取合理的文件分配方式,为文件分配必要的存储空间。同时减少磁盘碎片。
  2. 提高磁盘I/O速度。例如磁盘高速缓冲(Disk Cache),廉价冗余磁盘阵列(Redundant Array of Inexpensive Disk,RAID)。
  3. 提高磁盘系统的可靠性。通常使用冗余措施和后备系统,


总而言之,磁盘存储器管理是为了更好的存放文件。文件的大小不一,但盘块的大小是固定的,对于大文件就需要多个盘块来存放,这些盘块对应的就是文件的物理结构。如何分配这些盘块就是外存的组织方式。通常有以下三种:

  • 连续组织方式,即为每一个文件分配一组相邻的盘块。采用这样的方式,可把逻辑文件中的记录顺序地存储在相邻的盘块中,这样所形成的文件结构称为顺序文件结构,此时的物理文件称为顺序文件。而为了保证OS能够找到文件的地址,需要在目录项(也就是文件控制块FCB)的“文件物理地址”字段中记录该文件的第一个记录所在的盘块号和文件长度。很明显,这样的组织方式让连续文件的访问非常容易且快速(磁头移动距离最少),但容易产生碎片而且不能灵活的删除和插入记录。
  • 链接组织方式。该方式通过指针来链接盘块,所以文件可以装到离散的盘块中。分为隐式链接(每个盘块都存放着指向下一个盘块的指针)和显示链接(将链接一个文件的盘块的指针显式地拿出来存放在内存中的一张链接表中,该表在整个磁盘只设置一张,表序号就是盘块号,表项为链接指针,不同表项之间通过链接指针链接起来。所以只要在文件的FCB的“文件物理地址”中填入该文件的第一个盘块号即可。因为分配给文件的所有盘块号都放在该表中,所以该表称为文件分配表FAT(Filel Allocation Table)。下左图为隐式链接结构,右图为显示链接结构)  

                              

       

FAT文件系统

        由显式链接就引出了Windows的文件系统FAT。(软考中偶尔会考到,所以借此机会稍微了解)

        微软早、中期的OS一直都采用的是FAT技术。即利用文件分配表FAT来记录每个文件中所有盘块之间的链接。

  • MS-DOS     12位FAT12和16位FAT16
  • Windows95和Windows98      32位的FAT32
  • Windows NT/2000/XP及以后的OS     新技术文件系统NTFS(New Technology File System)

         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所支持磁盘容量的对比。

12、16和32位对比块大小FAT12FAT16FAT320.5KB2MB  1KB4MB  2KB8MB128MB 4KB16MB256MB1TB8KB 512MB2TB16KB 1024MB2TB32KB 2048MB2TB        NTFS相比FAT技术有了更好的性能、在安全性和可靠性方面也得到了显著提升。缺点是兼容性不足,只能被Window NT所识别。

  • 索引组织方式。前面的链接组织方式虽然有其优点,但访问文件每次需要将整个FAT表调入内存来查找一个文件的所有盘块号,这无疑浪费了很多空间。因为打开某个文件,只需要将该文件的盘块号调入内存即可。所以将一个文件的所有盘块号集中放在一起,这就形成了一个索引块,只要在文件的目录项中添加指向该索引块的指针即可。这就是索引组织的方式。这中组织方式对于大文件的直接访问是很方便的。 

文件存储空间的管理

       既然要为文件分配盘块,那必须知道磁盘上有哪些盘块是可用于分配的。这就需要为磁盘可分配的存储空间设置相应的数据结构,即一个磁盘分配表。常见的有下列几种:

  • 空闲表法。这个和内存的动态分配方式雷同,建立一张空闲表,表中记录序号、空闲区第一个盘块号及该区的空闲盘块数。然后采用首次适应算法和最佳适应算法来为文件分配空闲盘块。适用于小文件(1~4个盘块)。对于多媒体文件,为了减少寻道时间,也采用该方式。
  • 空闲链表法。将所有空闲盘块链接成一条链。
  • 位示图法。这个内容曾在软考中出现。位示图是利用二进制的一位来表示一个盘块的空闲与否,到底是“0”还是“1”表示空闲,不同系统有不同的做法,本质是一样的(都是用一位的两种状态来标志),这样可以把所有盘块对应的位构成一个集合,就称为位示图。通常用m*n个位数来表示,m*n等于盘块总数。因为位示图很小,可以放在内存中,节省了磁盘操作,所以常用于微型机和小型机中。如CP/M、Apple-DOS。

提高磁盘I/O速度的途径

       文件的分配已经搞清楚了,那还有一个关键问题是对文件的访问速度。我们都知道内外存的访问速度差别是巨大的,这种差别也成为了计算机系统的瓶颈。人们常用下面的方法来提高磁盘I/O速度。

       第一就是利用磁盘高速缓存技术,这里是指在内存中为盘块设置一个缓冲区,这个缓冲区保存某些盘块的副本。内存会优先查看这里。

       还有提前读、延迟写、优化物理块分布和虚拟盘(用内存模拟磁盘,RAM盘)等。

       这里引出一种非常有用的设计思想:如果使用一个组件对性能的改进受到了很大的限制,那么可通过使用多个相同的组件来获得性能的大幅度提高。

       一个典型代表就是廉价磁盘冗余阵列RAID(Redundant Array of Inexpensive Disk)。

      这个系统使用了很多台磁盘驱动器来组成一个大磁盘系统。不仅增加了磁盘容量,也提高了磁盘I/O速度和可靠性。

      因为有多个磁盘驱动器,所以可以将每一个子盘块的数据分别存储到各个不同磁盘中的相同位置,读取时可以采用并行传输方式输入内存。这就是并行交叉存取。

      同时因为有了多个磁盘,所以可以使用冗余数据和各种校验技术来保证磁盘的可靠性。RAID有很多级别,不同级别对应着不同性能。RAID0是最快速的,但没有冗余校验功能,所以不够可靠。RAID1采用镜像复制,提高了安全性,但降低了磁盘利用率。其余的也有各自的容错技术。

提高磁盘可靠性的技术

      影响文件安全性的因素有:人为因素、系统因素和自然因素。

      针对这三种因素分别有:存取控制机制、磁盘容错技术和建立“后备系统”的方式来防止危险。

      磁盘容错技术就是通过增加冗余的磁盘驱动器、控制器等方法来提高可靠性。也被称为系统容错技术SFT,可分为三个级别:

      第一级是低级容错技术,主要用于防止因磁盘表面缺陷造成的数据丢失,包含双份目录、双份FAT以及写后读校验(在将数据写入磁盘后,立马再读出来与内容缓冲区在写后仍保留的数据对比,一致则认为写入成功,否则写入失败进行重写)。

      第二级是中级容错技术,主要用于防止磁盘驱动器和磁盘控制器故障。  使用磁盘镜像(一条通道,一个控制器,两个驱动器)和磁盘双工(两条通道,两个控制器和驱动器。)

     第三级是基于集群技术的容错功能。


0 0
原创粉丝点击