碎片:linux vs windows, 内存/硬盘

找了一堆资料,稍微整理了下,具体的引用我都已经附上连接。欢迎大家讨论

什么是碎片
internal fragmentation,内部碎片
    Files come in any size. They don't end on block boundaries. So with every file a part of the last block of every file is wasted. Assuming that file sizes are random, there is approximately a half block of waste for each file on your disk. Tanenbaum calls this " internal fragmentation" in his book "Operating Systems".
    这段的大意就是说,为了更好的利用存储空间和寻找的效率,系统里面是将可用的存储空间看成是一个个簇的单位概念。比如指定簇的空间是4K,你的文件大小是7K,那么就需要2个簇8K大小的空间。这样在文件的末尾浪费了1KB。

external fragmentation,外部碎片
    Noncontiguous placement of blocks in a file is bad for performance, since files are often accessed in a sequential manner. It forces the operating system to split a disk access and the disk to move the head. This is called " external fragmentation" or simply "fragmentation" and is a common problem with MS-DOS file systems
在Windows系统里面,文件一开始是以紧密的方式排序,但随着增删的增多,文件就被分割成几个部分在存储设备各个部分。比如,
一开始是在0x0000-0x00ff存储了A文件,0x0100-0x1ff存储了B文件,接着将A文件删掉,再写入一个体积是2A的文件,那么这个2A就被分布成前面一半,中间跨过B,后面一半这样的存储方式。这样的链表式存储被成为碎片的分布。

碎片的影响
    使用效率:比如内部碎片,一定程度上影响了使用效率。当然你不可能把簇分成1KB,那样寻址的效率大大打折。所以在分配上,别以为你分了1KB就是节省空间,得视簇的单位来定。
    读取效率:也就是windows下的定义,使得文件在磁盘上呈现一种跳跃式的存储,这样对整个硬盘的I/O从寻找可利用空间到写入,都是非常大的影响。
    碎片对内存的影响:直接引用CU论坛上一位牛人的话(红色),页面地址附后
    而且从物理内存的角度看,从来也不存在硬盘上的那种所谓的碎片,应该说至少在win下,所有进程所申请并被提交的内存全都是碎片,而且就算你把分页文件关了,OS不做DROP页面操作,单进程(和可被换页的OS内核部分)所引用的物理内存同样是全都是碎片,因为除非你锁定了内存,否则不开分页文件OS内核同样在不断的修改你所引用的物理内存的页面(直接修改页表的指向就可以了),这玩意(至少我保证在win下)完全就分布在物理内存的各处,而且运行中还在不断的移动(虽然不会很频繁).
    这个东西很久以前就被批判了很多次了(参考《windows internal》),现代操作系统(我至少保证WIN32),从来就没有碎片,也不需要碎片整理,如果碎片整理有效,哪么这玩意早就会集成在内核中了。

   其次,在碎片方式下造成的影响会使得无法分配到足够的内存。但是在个人PC现在这么大的内存和页面存储下,可以忽略不计。

linux和windows硬盘的存储方式的不同
    在方式上附后的ubuntu帖子描述得非常详细,大家可以看看。一句话的概括就是,linux在文件写入的时候,前后都会预留出空间来进行文件的写入,删除等操作。

如此看来,windows硬盘方式一定就输给linux?
    本来打了一大段话,后来想想又删了,都是讨论一些技术细节,这种争辩永远不休。
    首先我们从一个博论的角度分析,两家都是非常顶尖的公司,如果真的技术存在如此大的缺陷,肯定会加以改善。所以光从这点上,就值得我们仔细思考windows硬盘碎片论。
    其次,做为用户肯定要了解产品适用的地方。微软起先的设计只是为了用户的PC使用,存储方式也是以速度为主,FAT32的格式早就是几年前的速度型代表,所以有个碎片整理功能不足奇怪。现在用的NTFS,我从来就没做过什么磁盘整理,也没觉得读取慢了多少,只是之前的碎片论一直成为人群中的阴影。
   

主要参考地址:
linux和windows存储方式的区别可以看这里:
http://forum.ubuntu.org.cn/viewtopic.php?f=120&t=27451
内存碎片的讨论可以看这里:
http://bbs.chinaunix.net/viewthread.php?tid=1155588&extra=&page=2

你可能感兴趣的:(linux,windows,PHP,ubuntu,OS)