Linux Cのライブラリ関数とシステム呼び出しの違いの詳細な解析

2120 ワード

プログラムの完成した機能から見ると、関数ライブラリが提供する関数は通常オペレーティングシステムのサービスを必要とせず、関数はユーザー空間内で実行され、関数がI/O操作などに関連しない限り、一般的にコア状態には切断されない.システム呼び出しは、オペレーティングシステムがユーザにプロセスを提供し、システムのハードウェアリソースや敏感なソフトウェアリソースなどに関連するサービスを提供することを要求する.
関数ライブラリの関数、特に入出力に関連する関数は、Linuxのシステム呼び出しで完了しなければならないことが多い.したがって、関数ライブラリの関数をアプリケーション設計者とシステム呼び出しプログラムとの間の中間層とすることができ、この中間層を通じて、一貫したインタフェースでシステム呼び出しを安全に呼び出すことができます.これにより、プログラマは、コードを1回書くだけで、異なるバージョンのlinuxシステム間で蓄積種を使用して、完全に異なるシステム呼び出しを具体的に実現することができる.異なるシステム呼び出しの互換性をどのように実現するかについては,関数ライブラリ開発者が関心を持っている問題である.
プログラム実行効率から見ると,システム呼び出しの実行効率の多くは関数よりも高く,特に入出力を処理する関数である.処理するデータ量が比較的小さい場合、関数ライブラリの関数実行効率は比較的良好である可能性がある.関数ライブラリのやり方は、処理するデータをバッファ内に先に格納し、バッファがいっぱいになるまで待ってから、データを一度に書き込みまたは読み出しすることである.この方法は、小量のデータを処理する場合に効率が高いが、システム呼び出しを行う場合、ユーザプロセスがユーザモードからシステムコアモードに入るため、コンテキスト切替と呼ばれる多くの追加タスクの切替作業に関連し、このような追加作業はシステムの実行効率に影響を与える.しかし、処理するデータ量が比較的大きい場合、例えば、入出力のデータ量がファイルシステム定義の寸法を超える場合、システム呼び出しを利用してより高い効率を得ることができる.
プログラムの移植性の観点から,C言語の標準的なバックアップライブラリ(ANSI C)は,システム呼び出しに対して移植性が高く,異なるシステム環境ではわずかな修正さえすれば,通常は修正を必要としない.
Linux Cのライブラリ関数とシステム呼び出しの区別ライブラリ関数は上位レベルであり、ユーザー空間で完全に実行され、プログラマに実際のトランザクションを背後で完了するシステム呼び出しを呼び出すより便利なインタフェースを提供する.システムコールはカーネル状態で実行され、カーネル自身が提供します.標準Cライブラリ関数printf()は汎用的な出力文と見なすことができるが、実際にはデータをフォーマットに合致する文字列に変換し、システム呼び出しwrite()を呼び出してこれらの文字列を出力する.
printf()がどのシステム呼び出しを使用しているか見てみましょうか.これは簡単です.次のコードをコンパイルします.
 
  
#include
int main(void)
{ printf("hello"); return 0; } 

コマンドgcc-Wall-o hello helloを使用します.cコンパイル.コマンドstrace helloで実行可能ファイルを追跡します.驚いたか?各ローは、システム呼び出しに対応します.straceは、プログラムがどのシステム呼び出しとこれらのシステム呼び出しのパラメータを使用して値を返すかを示す非常に有用なプログラムです.これはプログラムが何をしているのかを見る価値のあるツールです.出力の最後に、このような行write(1,「hello」,5 hello)が表示されます.これが私たちが探しているものです.仮面に隠れたprintf()の正体.ほとんどの人がライブラリ関数を使用してファイルI/Oを操作している以上(fopen,fputs,fcloseなど).man説明の第2部では、コマンドman 2 writeを使用しています.man説明の第2部では、kill()およびread()のようなシステム呼び出しについて説明する.manの説明の第3部では、cosh()やrandom()のような、よりよく知っているライブラリ関数について説明します.
私たちが間もなく行うように、コードを作成してシステム呼び出しを上書きすることもできます.ハッカーはよくこのようにしてシステムに裏口や木馬をインストールします.しかし、カーネルが誰かがファイルを削除するたびに「Tee hee,that tickles!」を出力するように、より有益なことをすることができます.の情報