char *p = (char*) mmap(...);
....; /* check if p is not -1 */
a = *p;
运行最后一条语句时,发生页面错误。内核中的错误处理程序将在物理内存中分配页面,并将4K字节从文件复制到该页面中,然后修改页面条目。读取*p
的指令将在此次成功执行。调用mmap后文件的路径名称在哪里?
但是,错误处理程序如何知道与页面相关的文件名和路径。文件名(或fd
)在哪里存储?和文件中的偏移量。
如果一个进程的数据段中的一个页面被换出(我想是一个交换文件)会怎么样?内核如何知道从何时开始复制页面以后需要交换页面?
谢谢ShadowRanger。在这种情况下,我在这个线程中错了,是不是? http://stackoverflow.com/questions/38850533/how-does-the-page-fault-handler-know-where-to-get-the-4k-bytes/38975619#38975619我以为我找到了答案。 – xiaokaoy