主题:能自己开发出磁盘碎片整理软件吗?
hawkjxr
[专家分:0] 发布于 2006-08-30 20:45:00
一般的磁盘工具整理速度慢,效率不高,
能否通过分析磁盘的文件结构,提出某种最优原则,
建立切实可行的数学模型,找到一种高效的整理文件的算法!
问题可以如下描述:
给出一个很大的棋盘,上面摆放有很多颜色的棋子,
其中各个颜色的棋子都有号码表示,从1到n.
每个棋子占用一个格子.如果棋盘按行来给予每一格子编号,
那么对棋子来说,其顺序是杂乱无章的,
现在需要做一件事,就是把同颜色的棋子放到一块去,
并且同颜色的棋子按顺序摆放.
试给出一种算法,移动最少的棋子使得棋盘上棋子顺序化!
其实如果理解有些问题的话,想想这个题目原是磁盘碎片整理的另一种描述,
各位大师应该就能看懂题目了吧,颜色则表示文件,棋子编号应该是文件
块的号码,而棋盘号码则是硬盘分区号码.
希望大家可以讨论讨论!
提供一个好的解法
回复列表 (共12个回复)
沙发
nully [专家分:110] 发布于 2006-08-31 00:19:00
操作系统为什么需要这种工具?
问题出在微软。
板凳
jyf1987 [专家分:930] 发布于 2006-08-31 07:05:00
这不是说讨论就讨论得起来的
3 楼
hawkjxr [专家分:0] 发布于 2006-09-02 20:40:00
很多事明知不可为而为之,为什么不试着做一个呢?
不过是讨论一下这个问题嘛
4 楼
mythology [专家分:500] 发布于 2006-09-05 16:07:00
先问几个问题好吗?
你是否想过用何种方式操做硬盘内数据?用绝对地址?还是其他方式?
你对文件管理系统有多了解?例如怎么取得一个大文件不同块在硬盘上分配的地址.
你对fat16,fat32标准是否有过深入研究,例如标志信息在哪个位置?硬盘上每个block多少字节?
如果你不了解,那么去做个清理棋盘游戏吧,这样更实际一些.
5 楼
hawkjxr [专家分:0] 发布于 2006-09-05 23:57:00
其实我在这里讨论的主要东西是探讨算法,尽可能让外存中的数据移动次数减少
至于怎么实现,我想这个暂时不应该是主要的问题,所以我才要抽象出棋盘的事例说明这个问题.mythology似乎对我的目的有些偏激的想法.
如果您有什么好的想法,敬请赐教!
6 楼
hawkjxr [专家分:0] 发布于 2006-09-06 14:52:00
期待各位的想法
7 楼
mythology [专家分:500] 发布于 2006-09-07 11:59:00
晕死,怎么说我有偏激的想法?
编过程的都知道内存碎片吧?没有好的内存池,不断的new然后delete.最终流下大量的小块不连续内存,再分配大的块就分配不了了.
硬盘碎块产生的原因跟这个类似.只不过硬盘对文件系统分配时候分了好多级别,先找连续的大块存储区,没有找页,再没有找块.
其实内存碎块整理不是要把同一文件放在连续存储区内(实际上大部分文件都是放在连续存储区域内的),而是把那些夹在大块存储区内的小块存储区用数据添满.
现在问题就出现了:多大的存储区算碎块?例如:一块新盘,你连续下3个1G的电影,然后把第二个删除了,那1G的存储区肯定不算随块,也不用整理.
:用什么数据填满它?这个数据要在什么位置,数据要多大都才满足添碎块的条件(这部分是最重要的,决定了操作的多少).
当然还有太多的其它问题了.
所以说你用棋盘描述硬盘碎块,这个创意是不错的.但是你把每块都设置为同样的大小,并且不以块的大小为是否移动的一个判断条件,还以把同一文件放在连续存储区为目的本身就是错误的.
如果想做内存碎块整理的算法(仅仅是算法),也必须要知道很多东西(我是不知道,网上应该有的).而你那个算法也仅仅是个棋盘整理算法而已.
8 楼
mythology [专家分:500] 发布于 2006-09-07 12:02:00
当然了,你也说了在这里仅仅是讨论算法,那就按你说的那个棋盘来吧.
9 楼
hawkjxr [专家分:0] 发布于 2006-09-07 16:06:00
hehe,对不起,言语上有些不当
只是我想说明并不是没有讨论的必要
就当算法不可行,作为软件工程的过程也需要
经过可行性分析来决定的
整理碎块以后的结果是所有文件都顺序放置的,
因为这样可以节省磁头来回寻道的时间,
所以mythology的意思我把"每块都设置为同样的大小,
并且不以块的大小为是否移动的一个判断条件,
还以把同一文件放在连续存储区为目的本身就是错误的"的说法值得商榷,
只是我不能找到一个移动比较少的算法来移动块而已.
还是那句话,期待大家的热烈回应
10 楼
jyf1987 [专家分:930] 发布于 2006-09-08 10:58:00
我觉得磁盘碎块产生的类型不同
怎么可能用一种算法来整理呢
所以不存在最少的步骤
只有一个适合各类型的最优算法
我来回复