问题如下:
我在磁盘上有一个非常大的文件(例如1TB),现在我想用最少的磁盘读取次数从磁盘上的这个文件读取N个页面(离散的,不连续的,具有巨大的扩展)(或者说我想通过最小化磁盘中的旋转和寻道延迟来最小化从磁盘读取这N个页面所需的时间)。理想的情况是,我从一个页面开始读取,并且在磁盘上的轮换结束之前完成了所有读取。页面位置的差异是巨大的,所以我不能简单地从第一页到最后一页发出一个读取命令,覆盖所有N个页面。这将占用大量的内存来存储。(额外-我正在浏览一些材料,在数据库中遇到了"list prefetching“机制。我通读了一下,发现这样的实现可以解决我的问题。)
有没有人能帮我用C语言解决这个问题?提前感谢!
发布于 2011-07-24 04:15:47
你将需要像这样的东西...使用预取...你没有告诉我们你将如何操作页面,你将在内存中需要多长时间等等。但我想你将不得不解决当内存已满时的情况,你需要从内存中释放一些页面。看看上面提到的算法(LRU,MRU等)。它是操作系统用于交换的。
你也可以考虑使用OS的内存映射文件-他们已经实现了页面替换算法,但现在不考虑预取。(这取决于操作系统,我想linux在这个话题上会比windows高级得多)。您可以通过这种方式节省大量工作,但它可能不会针对您的情况进行完美的优化。
关于磁盘访问优化...试着读一些OSes如何做到这一点的理论...看看磁盘调度算法,如SCAN或C-SCAN,例如。at this link。
https://stackoverflow.com/questions/6802976
复制相似问题