一、问题背景
博主最近在浏览王道论坛的数据结构书籍,其中提到数据的存储结构有4种,其中之一就是顺序存储
,顺序存储可以实现随机存取,但只能使用物理地址上相邻的一整块存储单元,因此可能产生较多的外部碎片
。
说到碎片
,经常使用计算机的我们一定不陌生,我们总是会在各种电脑资讯网站看到类似的磁盘碎片清理的文章,例如知乎上的都说装了SSD固态硬盘,就不需要磁盘碎片整理,这是为什么呢?
今天博主查阅相关资料后,对磁盘碎片进行详细解释。
二、文件碎片的定义
电脑碎片即磁盘碎片,磁盘碎片应称为文件碎片
。文件碎片
是由于文件被分散保存到整个磁盘的不同地方,而不是连续地保存在磁盘连续的簇中而形成的。
如下图的磁盘碎片分析及整理软件Disk Defrag对博主电脑的D盘扫描后,图中红色的正方形块就是博主电脑的D盘中的文件碎片
。
三、文件碎片产生的原因
百度百科中对文件碎片产生列出了以下三大原因:
- 当应用程序所需的物理内存不足时,一般操作系统会在硬盘中产生磁盘临时交换文件,用该文件所占用的硬盘空间虚拟成内存。虚拟内存通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上。虚拟内存管理程序会对硬盘频繁读写,产生大量的碎片,这是产生硬盘碎片的主要原因。
- 还有一种情况就是当中间的一个扇区内容被删除后,新写入一个较小的文件,这样在这个文件两边就会出现一些空间,这时候再写入一个文件,两段空间的任意一部分都不能容纳该文件,这时候就需要将文件分割成两个部分,碎片再次产生了。
- 最常见的就是下载电影之类的大文件,这期间大家一般都会处理一下其它事情,而下载下来的电影文件被迫分割成若干个碎片存储于硬盘中。因此下载是产生碎片的一个重要源头。还有就是经常删除、添加文件,这时候如果文件空间不够大,就会产生大量的文件碎片,随着文件的删改频繁,这种情况会日益严重。
博主用自行画的示例图来演示一下文件碎片产生的原因:
四、清理文件碎片的原因(为什么要清理文件碎片?)
知道了文件碎片的产生原因之后,我们还有必要了解一下程序运行时磁盘的读写动作。一般运行一个程序时,磁盘驱动器的磁头所做的工作是先搜索该程序运行必需的文件,然后读取数据,最后做读后处理——将数据传送至磁盘高速缓存(Cache)和内存中。搜索时间在硬盘性能指标中被称为平均寻道时间(Average seek time),单位为毫秒(ms),当下主流硬盘的平均寻道时间小于9.5ms。如果能将应用程序的相关文件放在磁盘的连续空间内,磁头搜索的时间将会减少很多。读取时也是如此,磁盘读取位于磁头下方扇区的数据所需时间仅为将磁头移到另一地点再读取相同数据所需时间的五分之一。读盘时,系统先检查数据是否在高速缓存中,如果有则直接读取;如果没有则访问磁盘,也就是读盘。当需要多次读取同一份数据时,Cache的作用很大,但对于第一次读取某个文件,Cache就无能为力了。于是搜索时间和读取时间在很大程度上影响着程序执行的效率。
而磁盘碎片整理是将电脑使用中产生的碎片和冗杂的文件重新整理,让碎片文件融为一体,从而减少了磁盘的寻道时间,因此整体上使得电脑的运行速度得以提升。
下图便是文件碎片清理工具Disk Defragmenter对磁盘的文件碎片清理前后效果的对比图,我们发现:清理后的磁盘文件之间变得更加的紧凑了。
五、机械硬盘/固态硬盘都需要清理文件碎片吗?
先说结论:机械硬盘需要清理文件碎片,固态硬盘不需要清理文件碎片。
机械硬盘需要清理文件碎片的原因已经在上述的四、清理文件碎片的原因(为什么要清理文件碎片?)
解释了,因为磁盘碎片整理是将电脑使用中产生的碎片和冗杂的文件重新整理,让碎片文件融为一体,从而减少了磁盘的寻道时间,因此整体上使得电脑的运行速度得以提升。
而为什么说固态硬盘不需要磁盘碎片整理呢?
- 固态硬盘的擦写次数是有限的。闪存完全擦写一次叫做1次P/E,25nm的固态硬盘寿命约是3000次P/E。碎片整理会大大减少固态硬盘的使用寿命。其实,固态硬盘的垃圾回收机制就已经是一种很好的“磁盘整理”,再多的整理完全没必要。Windows的“磁盘整理”功能是机械硬盘时代的产物,并不适用于固态硬盘。
- 固态硬盘电荷寻道耗时几乎为0。固态硬盘不用磁头,又因为固态硬盘的存储单元是基于闪存颗粒的电子存储,所以寻道时间几乎为0。持续写入的速度非常惊人,大部分固态硬盘读写速度在500MB/s。
- 固态硬盘具有TRIM功能。这一功能充当了SSD的军师,它会发出指令让系统告诉固态硬盘哪些数据块不再使用了,否则SSD控制器不知道可以回收这些闲置的数据块。从某种意义上来说,这个功能已经是承担了磁盘碎片整理的工作了。
本文参考文献:
[1]都说装了SSD固态硬盘,就不需要磁盘碎片整理,这是为什么呢?
[2]Managing Disk Fragmentation
[3]电脑碎片-百度百科