次のように単純にユーザーアプリを実行します。
char *buf = malloc(sizeof(int) * 100000);
int *a = (int *)buf;
int i = 0;
for(; i < 100000; i++)
{
a[i] = i;
}
malloc はこのデータに触れるまで実際の物理スペースを割り当てないため、ページフォールトが確実にトリガーされると思います。
そして、Linuxカーネル(3.17.6) mm/memory.c : handle_pte_fault() を次のように変更しました
if (targetPid == current->pid)
printk(KERN_ALERT "soso : targetPid : %d, current->pid : %d\n", targetPid, current->pid);
ここで、「tartgetPid」はカーネルに渡したユーザー アプリ pid、「current」はカーネルのマクロです。
ただし、カーネルがページ フォールトを処理する場合、現在の pid はページ フォールトをトリガーするユーザー アプリの pid ではないため、この行はトリガーされませんでした。
ユーザー アプリケーションでページ フォールトが発生した場合、カーネルがこのフォールトを処理するときの現在の pid は何ですか?