论坛风格切换
正版合作和侵权请联系 sd173@foxmail.com
 
  • 帖子
  • 日志
  • 用户
  • 版块
  • 群组
帖子
购买邀请后未收到邀请联系sdbeta@qq.com
  • 1866阅读
  • 0回复

文件删除的机理 [复制链接]

上一主题 下一主题
离线天崖乱步
 
发帖
*
今日发帖
最后登录
1970-01-01
只看楼主 倒序阅读 使用道具 楼主  发表于: 2008-04-27 15:12:52
文件删除是一个很简单的操作,但它的机理却不是一两句话可以讲清楚的,我们必须要先了解下面两方面的知识:


1.文件的存储
我们知道,电脑中的文件一般是保存在一定的介质中,如磁盘、磁带等,目前我们最常用到的主要是软盘、硬盘、光盘等。下面笔者主要以我们日常用得最多的硬盘为例,介绍一下文件存储的机理。
硬盘驱动器是一种采用磁介质的数据存储设备,数据存储在密封于洁净的硬盘驱动器内腔的若干个磁盘片上。这些盘片一般是在以铝为主要成分的片基表面涂上磁性介质所形成,在磁盘片的每一面上,以转动轴为轴心、以一定的磁密度为间隔的若干个同心圆就被划分成磁道(track),每个磁道又被划分为若干个扇区存放在硬盘上(如图1所示)。在每一面上都相应地有一个读写磁头(head),所以不同盘片的所有相同位置的磁道就构成了所谓的柱面(cylinder)。传统的硬盘都是以柱面、磁头、扇区为寻址的(CHS寻址)。硬盘在上电后保持高速旋转(5400rpm以上),位于磁头臂上的磁头浮在磁盘表面,可以通过步进电机在不同柱面之间移动,对不同的柱面进行。硬盘上的数据按照其不同的特点和作用大致可分为五部分:MBR区、DBR区、FAT区、DIR区和DATA区。
硬盘的一个扇区(0道0头1扇区)被保留为主引导扇区(MBR区)。在主引导区内主要有两项内容:主引导记录和硬盘分区表。主引导记录是一段程序代码,其作用主要是对硬盘上安装的操作系统进行引导;硬盘分区表则存储了硬盘的分区信息。我们熟悉的是FAT(File Allocation Table文件分配表)区,在解释文件分配表的概念之前,我们先来谈谈簇(cluster)的概念。多个连续的扇区组成一个簇。文件占用磁盘时,基本单位不是字节而是簇。簇的大小与磁盘的规格有关,一般情况下,软盘每簇是一个扇区,硬盘每簇的扇区数与硬盘的总容量大小有关,可能是4、8、16、32、64……同一个文件的数据并不一定完整地存放在磁盘的一个连续的区域内,而往往会分成若干段,像一条链子一样存放。这种存储方式称为文件的链式存储(如图2所示)。硬盘上的文件常常要进行创建、删除、增长、缩短等操作。这种操作做得越多,盘上的文件就可能被分得越零碎(每段至少是1簇)。但是,由于硬盘上保存着段与段之间的连接信息(即FAT),操作系统在读取文件时,总是能够准确地找到各段的位置并正确读出。
在我们的Windows平台普遍应用的三种文件是FAT(16位文件分配表),FAT32(32位文件分配表)和NTFS(NT文件系统)。在FAT文件系统中,每个磁盘都分为固定大小的簇。最小簇容量是512字节,而每一个大点的簇容量是前者的两倍,最大达到32KB。FAT记录连接簇一起组成了一个文件,文件的目录记录包含了第一簇的索引位置。那一簇的FAT记录包含着下一簇的索引地址,并依此类推。文件的最后一簇的FAT记录含有一个特殊的文件结尾码。未使用的簇和有缺陷的簇都有它们自己的特殊编码作标记。FAT32文件系统几乎完全一样,但是簇更加小。
前面讲到,文件在硬盘上的保存是以簇为单位存储的。一般说来,一个文件在硬盘上的存储并不是连续存放的(特别是硬盘进行比较频繁的读写文件后),所以为了防止同一文件存储区块的杂乱无章,文件系统会在该文件存放的最开始的一个簇(俗称文件头)的簇尾指明存放该文件的下一个簇的位置,该文件存放的最后一个簇(俗
称文件尾)则记录了文件的结束标记。这样当我们要对该文件进行读取操作时,这个文件就会像一串链子一样被一个一个依次串了起来,我们才能读到这些分别存储于不同簇的整个文件。


2.文件怎样被删除
很多人会想当然地以为,我们删除文件时,系统会把我们删除文件的内容全部清除,即把的磁盘上的全部改写回“0”。其实这种想法是错误的,试想一下,如果我们删除一个较大(如几百MB)的文件将要花费多长时间,这样的系统工作效率将会是多么的低下。
事实上,当我们删除文件时,系统只是在该文件存放的最后开始的一个簇(即文件头)上做了一个删除标记,后面链接的簇保存着原文件的内容。当然,对于这些带有删除标记的文件,我们在操作系统下不借助于专门程序或软件是不能看到的,并且当你再次往硬盘中写入其他资料时,系统会自动覆盖这些被标记为删除的文件内容,也就是把这些还保存有被删除文件信息的区块改写入新的信息。这一点可以这样理解,磁盘是一黑板,文件删除并不是将“黑板”上存放的不要的信息的区块头上打上一个叉,告诉大家这些信息是不要的,有新的信息要写入时可以直接写在它。换句话说,文件删除其实只是对被删除文件作了一个删除标记,而被你删除的文件内容其实会一直保存下去直到你往硬盘中写入其他内容将它们覆盖为止.