关闭

操作系统之文件系统笔记

809人阅读 评论(0) 收藏 举报
分类:

 首先,文件文件系统是两个不同的概念,文件系统是管理,组织,存取文件和目录的方法系统。而文件则是数据按照不同的组织方式的集合。

     根据文件在逻辑上和物理上组织结构的不同分为逻辑文件和物理文件,本质上都是数据的集合。

     逻辑文件按照文件内容的组织方式:分为顺序文件流式文件

    顺序文件:文件内容由结构相同性质相同的记录组成的文件。如数据库文件等。

    流式文件:文件内容由字符二进制形式存在,无规则。如源文件,二进制文件,目标文件等。unix中的所有文件都是为流式文件。


    其中顺序文件由于记录中项内容的不同导致记录的长度差异又分为:定长记录顺序文件,不定长记录顺序文件

   为什么要分这么细呢?你一定会问!分这么细的原因是因为我们在查找文件的内容是可以根据不同的情况来使用不同的查找算法,这样更加灵活,时间更快,效率更高。尤其是在海量的数据查询时,效果更加明显,这些理由足够使你信服了吧!!


  1:  对于定长记录顺序文件,我们在查找某些文件内容时,只需知道文件首地址D,记录长度L。就可很快得出n条记录的地址!  M=D+(n*L)


   2:这时,问题出现了,对于不定长顺序文件,我们如果再用这种方法就不行了。因为记录长度不定!公式不再适 用。如果再用上述公式,查找第n条记录的地址,则要依次计算前n条记录的地址,这样做效率太低了!

    解决办法:很简单,就像我们平时翻字典一样,为记录创建一个索引就行了!索引中包含每条记录的首地址长度。这时新的问题出现了!当索引的数据量很大时,查找速度又会很低了。这时,我们可以再为索引创建一个二级索引。

创建索引的优点:使查找的速度大大提高!缺点:提高的存储的成本。这时典型的以空间换时间的做法


流式文件的查找不使用索引方式,对于流式文件采用指针指向当前字符的方式。这里不详叙。



讲完了文件内容的查找接下来是文件到底如何在磁盘上进行分配的呢!和内存相似,磁盘空间分配总共有三种分配方式:

  连续分配方式

     分配以盘块为单位(盘块即为扇区),一个盘块的数据大小为512B,当我们创建一个文件时,操作系统为这个文件在磁盘上分配连续的一定个数的盘块,然后将文件的第一个盘块的地址存入FCB(文件控制块中的物理地址字段),注意:FCB存放在磁盘上的!

   优点:在所有的分配形式中,连续分配的查找读取速度是最快的!

   缺点:由于,连续分配要事先知道文件的大小,现实中往往不是这样。这种分配方式容易导致文件小则碎片多,文件过大,则分配不成功,非常的不灵活。

     

    链接分配方式(os中使用的方式):

     隐式链接分配:

         当创建一个文件时,操作系统为文件分配若干个盘块,每个盘块中有一个链接指针,占4byte,所以一个盘块的实际数据大小为508Byte。指针指向下一个扇区。FCB中存放文件的第一个盘块的地址和最后一个盘块的地址。(存放最后一个盘块的地址是为了增加数据的方便)。

       优点:减小了磁盘碎片的空间,更加灵活。

       缺点:当指针断裂,文件就被破坏,非常不安全!查找某个盘快,要逐个的查找,查找效率极低!

 

    显式链接分配:

         相对隐式分配的缺点,显示分配在磁盘上创建一个文件分配表(FAT),按照盘块号从小到大排好序。当系统为一个文件分配多个盘块时,当前序号的盘块中的数据填入下一个盘块的序号,这样就将各个盘块链接起来。每当操作系统查找文件时,可以将FAT(file allocation system)调入内存,这样查找的速度大大提升!

       对于物理磁盘一个磁盘在这种方式下可以换分四个分区,每个分区都有相应的FAT。

       MS-DOS中使用的就是这种方式!FAT12指的就是分配表的宽度为12位,这样盘块大小为512b的磁盘分区容量为2MFAT16的磁盘分区容量为32M。但是这样对现代计算机的大硬盘容量来说远远不够用!

       因此,我们提出一个簇的概念。将簇作为分配的单位,一个簇可以包含1个盘块,2个盘块,4个盘块,8个,16个32个直到64个。这样FAT16的容量增加到2^16*64*512=2048M


      现代计算机的硬盘容量动辄上百个G,所以我们又将长度拓宽为FAT32,这就是windows中常用的文件系统。这样FAT32的容量可以达到2T至此FAT分配方式为最终模式。FAT32中簇的大小一般为4个盘块

       FAT32不能向下兼容FAT12和FAT16的文件系统,而且FAT32的最小分区为512M,最大单个文件容量为4G


   NTFS(new technology file system)是微软的一种全新的文件系统,它不与物理盘块直接关联,而是通过关联簇来管理磁盘,这样就可以适应不同大小扇区的磁盘。通常NTFS中的默认簇大小为4k也就是8个盘块。NTFS相比FAT32用来存储记录相关簇的信息更小。它使用一个叫MFT(主控文件表)来记录的簇的。MFT以文件的方式存在磁盘上。比FAT32的信息更小,查询更快。具体原理我也不清楚!

 

 

索引分配方式(linux中文件系统)

         如果稍加思考就会发现,FAT分配方式的缺点。首先,当文件分配表很大时,将表加载到内存会占用大量而且宝贵的内存资源!而且还要从表中顺序查找所有的盘块,耗费了大量的时间和空间。基于这种现实,我们又提出了另一种方法,索引分配方式

          索引分配方式将属于一个文件的所有盘号集中存放到一个叫索引块的数据结构中,然后我们只需在索引结点中加入一个指针指向索引块即可!当操作系统创建一个文件时,就为文件分配一个索引块,划分的基本单位为一个扇区,如果一个扇区的空间太小,一次递增。

       问题1:当文件过大时,一个索引块不够用,需要多个索引块时,我们就为索引块创建二级索引,甚至三级索引。 

       问题2:当文件过小时,不是会造成磁盘碎片吗?因为只要创建一个文件系统就分配一个索引块。其实实际中使用的混合模式,在索引结点中加入了直接地址,一级索引,多级索引指针。直接地址存放文件所在盘块的物理地址。大概可以存放十个地址。这样当文件占用的盘块少于十个时,我们就可以不用分配索引块。

 

 

 

 

 

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:100839次
    • 积分:2335
    • 等级:
    • 排名:第15997名
    • 原创:129篇
    • 转载:21篇
    • 译文:2篇
    • 评论:12条
    最新评论