有没有与Linux的预读系统调用相当的Windows系统?
编辑:
如果可能的话,我想要一个完整的函数签名,显示等效的偏移/计数参数(或下/上)。
例如: Linux函数签名是:
ssize_t readahead(int fd, off64_t *offset, size_t count);它的用法的一个例子是
readahead(file, 100, 500);其中" file“是先前由mmap之类的函数设置的文件描述符。此调用正在读取索引100处的500字节。
编辑2:如果你不确定预读是怎么做的,请阅读以下内容:http://linux.die.net/man/2/readahead
发布于 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
发布于 2013-07-25 21:59:41
从Windows8开始,或多或少存在一个与madvise(MADV_WILLNEED)直接等效的系统,这实际上是一回事(Windows有一个统一的VM/缓存系统)。
假设您已经对文件进行了内存映射,因此可以使用PrefetchVirtualMemory来预取它。
这仍然比您希望的要稍微复杂一些,但远没有DeviceIoControl那么苛刻。还请注意,您可以轻松地预取几个独立的、不连续的范围。
https://stackoverflow.com/questions/2135638
复制相似问题