首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows相当于Linux的预读系统调用?

问Windows相当于Linux的预读系统调用?
EN

Stack Overflow用户
提问于 2010-01-26 05:08:36
回答 2查看 3.3K关注 0票数 16

有没有与Linux的预读系统调用相当的Windows系统?

编辑:

如果可能的话,我想要一个完整的函数签名,显示等效的偏移/计数参数(或下/上)。

例如: Linux函数签名是:

代码语言:javascript
复制
ssize_t readahead(int fd, off64_t *offset, size_t count);

它的用法的一个例子是

代码语言:javascript
复制
readahead(file, 100, 500);

其中" file“是先前由mmap之类的函数设置的文件描述符。此调用正在读取索引100处的500字节。

编辑2:如果你不确定预读是怎么做的,请阅读以下内容:http://linux.die.net/man/2/readahead

EN

回答 2

Stack Overflow用户

发布于 2010-01-26 05:15:54

是。它是FileSystemControl FSCTL_FILE_PREFETCH。

在Windows Vista及更高版本中,它用于在应用程序启动和启动时进行预取。

它也被SuperFetch技术使用,该技术使用启发式方法在大约一天中通常使用它们的时间加载应用程序。

FSCTL_FILE_PREFETCH本身在MSDN上没有文档,但是通过检查应用程序启动时进行的DeviceIoControl调用,很容易弄清楚参数格式:只需在调试器中启动一个在c:\Windows\Prefetch目录中已有.pf文件的应用程序,然后在DeviceIoControl上中断(或者,如果您使用的是内核调试器,则在NTFS驱动程序收到它的第一个FSCTL_FILE_PREFETCH时中断)。检查传入的缓冲区,并将其与.pf文件和后面实际使用的范围进行比较。出于好奇,我这样做了一次,但没有记录细节。

如果您不熟悉DeviceIoControl和IRP_MJ_FILESYSTEM_CONTROL,这里有一些链接可供查看:

IRP级别的

的FileSystemControl IRPs

  • Structure
票数 11
EN

Stack Overflow用户

发布于 2013-07-25 21:59:41

从Windows8开始,或多或少存在一个与madvise(MADV_WILLNEED)直接等效的系统,这实际上是一回事(Windows有一个统一的VM/缓存系统)。

假设您已经对文件进行了内存映射,因此可以使用PrefetchVirtualMemory来预取它。

这仍然比您希望的要稍微复杂一些,但远没有DeviceIoControl那么苛刻。还请注意,您可以轻松地预取几个独立的、不连续的范围。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2135638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档