Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> Linuxカーネルサービスルーチンとシステムコールインタフェース

Linuxカーネルサービスルーチンとシステムコールインタフェース

  
1。マクロを使ったシステムコールルーチンの生成高水準言語アプリケーションは、一般にカーネル関数に直接アクセスすることはできません。カーネルトラッピングを達成するためにアセンブリ言語プログラムを作成させるのであれば、安全でもなく、オペレーティングシステムをセットアップするという当初の意図にも準拠していないため、明らかに不適切です。ユーザーはジュースプラットフォームを設定するためのフレンドリーなプログラムを提供します。カーネルサービスルーチンをカプセル化するために使用されるシステムコールルーチンは固定フレームワークを持っているので、カーネルサービスルーチンのパッケージ化を単純化するために、Linuxは上級ユーザーが使用できる_sysca110〜_sysca115から6つのマクロを定義します。必要なカーネルサービスルーチンをシステムコールルーチンとしてラップします。上記の6つのマクロの名前の後の数字は、カプセル化されたカーネルサービスルーチンが使用できるパラメータの数(システムコール番号を除く)を示します。上記のマクロがカーネルサービスルーチンをカプセル化するとき、Linuxはマクロに渡されるパラメータの数がカーネルサービスルーチンによって必要とされるパラメータの数に2を足したものに2を加えたもの、すなわち2(n + 1)であることを指定します。システムによって呼び出されたパラメーターの数です。言い換えれば。カーネルサービスルーチンの各パラメータに対して、2つのパラメータをマクロで使用する必要があります。パラメータを示す名前と、パラメータを示すタイプです。システムコールの戻り値の名前と型を表す2つのパラメータも追加されています。たとえば、マクロを使用してカーネルサービスルーチンwrite()をカプセル化する場合は、マクロsyscall3を次の形式で呼び出す必要があります。_syscall3(int、write、int、fd、cONst char *、buf、unsingnde int、count)ここで、intそしてwrlteは戻り値の型と名前、intとfdはパラメータfdの型と名前、const char *とbufはパラメータbufの型と名前、unsigned lntとcountはパラメータ数の型と名前です。 2。システムコールインタフェース一般に、確立されたオペレーティングシステムとして、ユーザアプリケーションに直接同様の名前を使用させるつもりはありません。システムのsvsxyz()形式はカーネルサービスルーチンを呼び出すためにルーチンを使用します。そのため、通常はシステムコールルーチンより上位の高級言語で通常の機能と共通のインタフェースを用意する必要があります。このインタフェースを介してシステムサービスを利用する場合、通常の機能を利用するのと同じ感覚です。
Copyright © Windowsの知識 All Rights Reserved