一次从磁盘读取离散的页面集

时间:2011-07-23 20:03:16

标签: c database-design disk prefetch

问题如下: -

我在磁盘上有一个巨大的文件(比如一个兆兆字节),现在我想从磁盘上的这个文件中读取说N页(离散且不与大范围连续),并且磁盘读取次数最少(或者说我想通过最小化磁盘中的旋转和寻道延迟来最小化从磁盘读取这N个页面所花费的时间)。如果我开始从页面读取并且在磁盘上的旋转结束之前完成所有读取,那将是理想的。页面位置的差异很大,所以我不能简单地发出从第一页到最后一页的读命令,覆盖所有N页。这将占用大量的内存来存储。 (额外 - 我正在浏览一些材料并在数据库中遇到“list prefetching”机制。我仔细阅读,发现这样的实现可以解决我的问题。)

有人可以帮我解决C语言中的这个问题吗?提前谢谢!

1 个答案:

答案 0 :(得分:1)

你需要像 Page replacement algorithm ...预取的东西...你没有告诉我们你将如何操作页面,你需要多长时间才能使用它们但是我想你必须解决内存已满的情况,你需要从内存中释放一些页面。查看提到的算法( LRU MRU 等)。这是操作系统用于交换的。

您还可以考虑使用操作系统的内存映射文件 - 它们已经实现了页面替换算法,但现在还没有预取。 (很大程度上取决于操作系统,我认为在这个主题中linux将比windows更先进)。您可以通过这种方式节省大量工作,但可能不会针对您的情况进行全面优化。

关于磁盘访问优化...尝试阅读一些理论如何操作系统...查看磁盘调度算法,如 SCAN C-SCAN ,例如。 at this link