0

问题如下:-

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

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

4

1 回答 1

1

您将需要诸如页面替换算法之类的东西...带有预取...您没有告诉我们如何操作页面,在内存中需要多长时间等。但是我想您必须解决当内存已满并且您需要从内存中释放一些页面时的情况。查看提到的算法(LRUMRU等)。这是操作系统用于交换的内容。

您还可以考虑使用操作系统的内存映射文件——它们已经实现了页面替换算法,但现在不涉及预取。(取决于操作系统,我想在这个主题中 linux 会比 windows 先进得多)。您可以通过这种方式节省大量工作,但它可能不会针对您的情况进行完美优化。

关于磁盘访问优化......尝试阅读一些操作系统如何做到这一点的理论......看看磁盘调度算法,如SCANC-SCAN,例如。在这个链接

于 2011-07-23T20:15:47.273 回答