【发布时间】:2016-08-04 11:07:16
【问题描述】:
char *p = (char*) mmap(...);
....; /* check if p is not -1 */
a = *p;
在运行最后一条语句时,发生页面错误。内核中的故障处理程序将在物理内存中分配一个页面并将文件中的 4K 字节复制到该页面中,然后修改页面条目。读取*p的指令将再次执行,这次成功。
但是故障处理程序如何知道与页面关联的文件名和路径。文件名(或fd)存储在哪里?以及文件中的偏移量。
如果进程的数据段中的一个页面被换出(我猜是交换文件)怎么办?当页面需要稍后换入时,内核如何知道从哪里复制?
【问题讨论】: