システムコールとライブラリ関数の違い

システムコールとライブラリ関数の違い

すでに私この質問への回答としてしかし、システムコールとライブラリ機能の違いはよくわかりません。概念的には、2つの違いは何ですか?

ベストアンサー1

概念的には、ライブラリ関数はプロセスの一部です。

実行時に実行コードとそのコードが依存するライブラリ(libc.soなど)のコードは単一のプロセスにリンクされます。したがって、これらのライブラリから関数を呼び出すと、その関数はプロセスの一部として実行され、同じリソースと権限を持ちます。これは、自分が書いた関数を呼び出すのと同じアイデアです(PLTおよび/またはトランポリン関数などの例外はありますが、興味がある場合は参照できます)。

概念的には、システムコールは、コード(通常は権限がない)からカーネル(必要に応じて権限を拡大する権限がある)を呼び出すために使用される特別なインタフェースです。


たとえば、Linuxを参照してください。マニュアル。 Cプログラムがmallocメモリ割り当てを呼び出すと、glibcのライブラリ関数が呼び出されます。

すでに割り当て可能なスペースが十分な場合プロセス内部、必要なヒープ管理を実行し、呼び出し元にメモリを返します。

それ以外の場合、glibcはカーネルからより多くのメモリを要求する必要があります。brkglibc関数は(おそらく)brkシステムコールを呼び出します。システムコールを使用すると、制御がカーネルに渡された後にのみグローバル仮想メモリ状態を変更して、より多くのメモリを予約し、それをプロセスのアドレス空間にマッピングできます。

おすすめ記事