-1

http://www.makelinux.net/ldd3/chp-2-sect-3#chp-2-ITERM-4135このリンクでは、ユーザー空間とカーネル空間の通信について説明しています。カーネルオブジェクトにリンクして通信(値の送信/受信)するcの単純なユーザー空間アプリケーションプログラムで誰かがそれを説明できますか?

4

2 に答える 2

0

ほとんどのLinuxマシンで利用可能なプログラム(ただし、実行するにはsudo権限が必要)は、システムコールinsmodを介して指定されたモジュール(カーネルオブジェクト)をロードするようにカーネルに指示します。 init_module

より一般的には、ユーザースペースプログラムは、これらのシステムコールを介してカーネルと通信します。これらのシステムコールは、基本的にユーザースペースからカーネルへの要求です。Cで作成するアプリケーションは、システムと対話するために何らかの方法でシステムコールを使用する必要があります(たとえば、内部でシステムコールをprintf使用しwriteて、画面に文字を配置します)。

于 2012-08-24T07:32:33.820 に答える
0

でファイルを開くだけですopen(2)。コンパイラは、関数の引数をスタックに置き、特定の方法でクラッシュさせるこの呼び出しのコードをアプリケーションに追加します (システム コールを参照)。カーネルはすべてのクラッシュをキャッチして処理します。

これは「正常な」クラッシュであるため、カーネルは呼び出す関数を検索し、スタックから引数を取得して関数を呼び出します。

この複雑なアプローチの理由はセキュリティです。「クラッシュ」によって、アプリケーションは制御を完全に放棄します。CPUも別のモードに切り替わります。このモードでは、ハードウェアにアクセスできます (「アプリケーション」モードでは、ハードウェアへのアクセスは「不正アクセス」クラッシュにつながり、アプリが終了します)。

関数自体はopen(2)あまりできません。代わりに、どのファイル システムが要求を処理できるかをチェックし、ファイル システムの open 関数を呼び出します。ファイル システムは、カーネル モジュールとして実装されます。

于 2012-08-24T07:38:53.423 に答える