2009-02-21 31 views

答えて

30

システムコールは、UNIXの場合と同様に、malloc()関数がsbrk()システムコール(プロセスメモリ空間のサイズ変更用)の上に構築されています。

ライブラリはオペレーティングシステムの一部ではなく、複数のOSで使用できることが多いアプリケーションコードです。基本的には、自分のプログラム内の関数呼び出しと同じです。

この行は少しぼやける場合がありますが、システムコールはカーネルレベルの機能として表示されます。

12

システムコールは、ユーザーレベルコードとカーネルの間のインターフェイスです。 Cライブラリルーチンは他のライブラリ呼び出しと同じように、まったく一般的に提供されています(かなり普遍的な)。標準ライブラリルーチンの多くは、システムコールの周りのラッパー(薄型またはそれ以外のもの)で、ラインを少しぼかしてしまいがちです。

どのようなものを使用するかは、原則として、お客様のニーズに最も適したものを使用してください。

6

マニュアルの第2章で説明した呼び出しは、実際にカーネルにトラップするシステムサービスへの実際の呼び出しの周りに比較的薄いラッパーです。マニュアルのセクション3で説明されているC標準ライブラリルーチンは、実際にシステムコールを使用する場合も使用しない場合もあるクライアント側ライブラリ関数です。

This postingには、システムコールとカーネルへのトラップ(わずかに異なるコンテキスト)の説明があり、システムコールの背後にあるメカニズムといくつかの参照があります。

11

共通関数のライブラリは、システムコールインタフェースの上に構築されますが、アプリケーションは両方を自由に使用できます。

システムコールは、カーネルリソースを使用するためのアクセス権を持つ認証キーのようなものです。画像の上

enter image description here

先進のLinuxプログラミングからであり、ユーザーのアプリケーションがカーネルとの対話方法を理解するのに役立ちます。

+0

awesome pic。非常に明確な – henryyao

3

原則として、常にCライブラリのバージョンを使用する必要があります。彼らはしばしば信号の再起動(あなたがそれを要求した場合)のような難解なことを処理するラッパーを持っています。これは、すでにライブラリにリンクしている場合に特に当てはまります。すべてのルールには壊れる理由があります。ダイレクトコールを使用する理由、

  1. あなたは欲しいlibcアングロスティック;たぶんインストーラで。このようなコードは、使用されるライブラリにかかわらず、Android(bionic)、uClibc、およびより伝統的なglibc/eglibcシステム上で動作する可能性があります。また、デュアルAndroid/Linuxバイナリを可能にする、実行時のglibc/bionicレイヤを作成するためのラッパーによる動的ローディング。
  2. 極端なパフォーマンスが必要です。これはおそらくまれであり、誤っている可能性が高いです。おそらく問題を考え直すことでパフォーマンスが向上し、ではなくを呼び出すと、多くの場合パフォーマンスが向上することがあります。libcはときどき実行できます。
  3. initramfsまたはinitコードをライブラリなしで作成しています。より小さなイメージを作成したり、より速く起動することができます。
  4. 新しいカーネル/プラットフォームをテストしていて、完全なファイルシステムで人生を複雑にしたくない場合は、 initramfsと非常によく似ています。
  5. プログラムの起動時に非常に迅速な処理を行いたいが、最終的にはlibcルーチンを使用したい。
  6. libcの既知のバグを避けるためです。
  7. 機能はlibcで利用できません。

申し訳ありませんが、ほとんどの例はLinux固有のものですが、合理的なものは他のUnix版にも適用されます。最後の項目は、新しい機能がカーネルに導入されたときには非常に一般的です。例えば、最初に導入されたkqueueまたはepollの場合、それらをサポートするためのlibcはありませんでした。これは、システムに古いライブラリがあり、新しいカーネルがあり、この機能を使用したい場合にも発生する可能性があります。

ご使用のプロセスでlibcが使用されていない場合は、システム内の何かが持つ可能性が最も高いです。独自のバリアントをコーディングすることで、同じ最終目標に2つのパスを提供することによってキャッシュを無効にすることができます。また、Unix はプロセス間でコードページを共有します。一般に、libcバージョンを使用しない理由はありません。

その他の回答は、すでにlibcとシステムコールの違いについて、恒星の仕事をしています。

関連する問題