2

Robert Loveの本から(システム呼び出しの実装で)

どういうわけか、ユーザースペースはトラップ中にパラメータをカーネルに中継する必要があります。これを行う最も簡単な方法は、syscall番号が渡されるのと同じ方法を使用することです。パラメーターはレジスターに保管されます。x86-32では、レジスタebx、ecx、edx、esi、およびediに、最初の5つの引数が順番に含まれています。6つ以上の引数がある場合は、1つのレジスタを使用してユーザーへのポインタを保持します。すべてのパラメータが格納されるスペース。

ただしasymlinkage、パラメータがシステムスタックにあることを期待するすべてのシステムコールには接頭辞が付きます。また、モード切り替えが発生した場合、パラメータがカーネルスタックにコピーされる方法は?

4

1 に答える 1

3

パラメータは、システムコールのグルーロジックによってスタックに配置されます。すべてのシステムコールは、単一の割り込みトラップを介して行われます(x86ではint 0x80だと思います)。この割り込みハンドラーのカーネルコードは、システムコールハンドラーのスタックにパラメーターを配置するために必要な作業を行います。

このFAQをチェックして、まさに質問に答えてください:http: //kernelnewbies.org/FAQ/asmlinkage

于 2012-07-20T13:39:46.327 に答える