カーネルメモリポインタに格納されたユーザーコンテキストデータを持っているとします。私もuser-space char *へのポインタを持っているとします。それから私はカーネルスレッドを作成し、カーネルスレッドはこれらの2つのポインタを持つことができます。スレッドから、ポインタを使用してユーザー空間データにアクセスできますか?私はシステムコールでそれらにアクセスできますが、問題はカーネルスレッドからアクセスできますか? Workqueueからそれらにアクセスするのはどうですか?ユーザーの仮想メモリにアクセスするためのLinuxユーザープロセスコンテキスト
は私userprocessは、私はすべての1 seceondに "これはデータである" 印刷するkt_funcたい
void sys_340(void* p) {
th = kthread_run("kth", kt_func, p);
//might also store process context as I am in system call!! How?
}
void kt_func(void *p) {
while(1){ printk("Line: %s\n",p); sleep(1000); }
}
システムコールハンドラでシステムコール
//User Application
char* abc = "This is data.";
syscall(340, p);
を呼び出すと言います。
同期の問題を忘れてしまいます。問題は、syscallがカーネルに戻った後、もはやpが指す正しい値を取得していないことです。 pはユーザ空間仮想アドレスであり、プロセッサコンテキストを使用して物理アドレスに変換できます。カーネルスレッドは、異なるプロセッサコンテキストで実行されます。だから、* pを使うだけで、値にアクセスすることはできません。私の質問は、私はどのように私は、ポインタpと一緒にプロセスの現在のポインタtask_structを保存することができます提供された値にアクセスすることです。 – max