假设一种情况,一个大盒子里要放数种口味不同的瓜子,不同口味的瓜子不能混放,还要能够非常方便的计算出每种瓜子的重量,我们会怎么做?
有这样一种方法,在盒子里做出很多大小相同,又相互隔离的格子,每个格子内能够存放的瓜子的重量是一定的,假设是5o克,我们依次把每一种瓜子放到这些格子里,比如,五香味的占了五个完整的格子,第六个格子没有占满,我们要想知道瓜子的重量,只需要把第六个没占满的格子里的瓜子称一下就可以了,如果对重量精度要求不高的话,我们甚至可以直接将最后未满的格子中的瓜子也计算为5o克,这样的话,瓜子重量的计算就会更加方便快捷。 ≧
按照这种方法,其他口味的瓜子从第七个格子开始存放,通过数格子的方法测重,依此类推。
这时候,只考虑有瓜子的格子,我们就有一个问题,在我们把所有的瓜子都放到盒子里后,必然会有很多的格子并没有被占满,也就是空间的利用率不是百分百,那些未被利用而浪费掉的空间,我们可以将之称为空间碎片。
计算机操作系统中,对磁盘文件进行管理的功能模块叫做文件系统,不同的文件系统对磁盘文件的管理方式虽然是不一样的,但是有一点是相同的,那就是所有的文件系统,在磁盘中存放文件的时候,都会把磁盘存储空间划分成大小相同的格子,这种格子在计算机专业中有一个术语,叫做磁盘扇区,给磁盘画格子的过程,就是我们平时所常说的格式化。
和瓜子重量计算相似,文件系统对文件大小的计算,一般都是按照扇区为单位的,不满一个扇区的,也会按照一个扇区进行计算。
和前面讲述的盒子里放瓜子道理一样,因为文件大小是随机的,不可能正好是磁盘扇区大小的整数倍,所以任何文件系统对磁盘空间的利用率都不可能是百分之一百,那些无法利用的磁盘空间,就是我们常说的磁盘碎片。
虽然每一个磁盘碎片浪费掉的磁盘空间都非常小,但是我们知道,磁盘中的文件数量是极其庞大的,因此,磁盘碎片的数量也是极其庞大的,如此一来,数量庞大的磁盘碎片,对磁盘空间的浪费就非常可观了,这些磁盘碎片不仅会造成磁盘空间浪费,还对磁盘读写效率有很大影响,这其中的原因比较复杂,这里不再讲述。
因此,任何文件系统,都会有一种机制对磁盘碎片进行处理,较为先进的文件系统,比如indosnT上使用的nTFs,对磁盘碎片的管理能力较强,能够极大的减少磁盘碎片对空间的浪费,比nTFs更为先进的文件系统,甚至能够随着磁盘使用时间的推移,碎片越来越少。
然而,在微软的操作系统indos98上使用的fat32,却是一种憋足的文件系统,这种系统对磁盘碎片的管理能力极弱,以至于随着磁盘使用时间推移,碎片越用越多,然后不得不利用一些外在的磁盘碎片整理工具,对磁盘文件进行重新规划安排,以达到减少磁盘碎片的目的。
我们通常认为磁盘碎片是无法被利用的,但是一些计算机高手,却能够通过某种高明的手段,对这些碎片加以利用,以达到其特殊的目的。
病毒感染磁盘文件,一般会导致磁盘文件体积增大,但是我们想像一下,如果病毒文件在感染磁盘文件时,不占用新的磁盘扇区,而是把自己存放在那些未存满被感染文件数据的磁盘扇区中,而文件系统又是按照扇区为单位对磁盘文件大小进行计算的,会产生什么结果?
这个很容易理解,这个时候,虽然病毒文件将自己写入了文件中,但是磁盘文件的大小却没有改变,这种现象就像我们往一桶沙子里到了一盆水一样,水倒进去了,桶内沙子的体积却没有增加。
顾狼把曲别针扔进梅丽的盘子里,曲别针掉进光盘盒之间的缝隙里,也是这个道理。
顾狼想到的更远,因为cIh病毒感染文件,本身利用的就是这种机制存储自身的,而他们得到的病毒原体,也是从被感染文件的磁盘碎片中提取出来的,但是他和所有人都忽略了一点儿,那就是病毒原体自身在占据磁盘碎片之时,同样会产生新的磁盘碎片,如果病毒编写者把病毒的核心代码又塞进了这些病毒原体产生的新的磁盘碎片中,并利用某种手段,将之隐藏的话,那么,前面他们对病毒原体进行反汇编得不到其变异代码,以及专杀工具把病毒清除不干净,也就可以理解了。
广告位置下