2016-05-24 4 views
0

syscallイベントが発生したときにアプリケーションを実行すると、そのsyscallイベントはnet-link経由でカーネルに渡されますか?またはnetlinkがシステムコールに関連している場合は、私に知らせてください。NetlinkはSyscallイベントの媒体ですか?

答えて

2

ユーザスペースプログラムは、syscallの要求に従ってレジスタeax、ebx、ecx、edx、esi、ediに少数の値をコピーした後、コマンドint 0x80を実行します。

int 0x80が実行されると、PCはそのsoftirqのISRにジャンプします。

システムコールのルーチンはset_system_trap_gate(MY_SYSCALL_VECTOR, entry_INT80_32);で設定されています。ここで確認できますarch/x86/kernel/traps.c

カーネル内のSyscallのエントリポイントはentry_INT80_32であり、これはarch/x86/entry/entry_32.Sにあり、リンカスクリプトENTRY(entry_INT80_32)で定義されています。

このエントリポイントから、レジスタeax、ebx、ecx、edx、esi、ediの値がどのようにコピーされているかを確認できます。その後、システムコール番号ごとに特定のシステムコールに移動し、実行してユーザ空間に戻します。

+0

お返事ありがとうございます。netlinkとの関連性はありますか? –

+1

ユーザスペースとカーネルスペースの間の通信にもnetlinkが使用されますが、システムコールの場合は使用されません。システムコール中のカーネルとユーザ空間間のデータ転送には、eax、ebx、ecx、edx、esi、およびediレジスタのみが使用されます。 –

+0

ありがとうございましたsamrat :) –

関連する問題