3

次のように単純にユーザーアプリを実行します。

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 は何ですか?

4

0 に答える 0