Linuxでのライブラリコールとシステムコールの違いは何ですか?


13

Linuxでのライブラリコールとシステムコールの違いは何ですか。両方の背後にある概念をよく理解するための指針は大歓迎です。

回答:


9

本当に「ライブラリ呼び出し」のようなものはありません。共有ライブラリにリンクされている関数を呼び出すことができます。そして、それは単に、ライブラリパスが実行時に検索され、呼び出す関数の場所を決定することを意味します。

システムコールは、カーネルによって処理される低レベルのカーネルコールです。


だから誰かが上記の質問をした場合、私はそれをシステムコールと関数コールの違いとして解釈できます。
セン

「man ltrace」は「A library call tr​​acer」を提供します:)
ysdx

8

man manシェルを入力すると、マニュアルセクションのリストが表示されます。

2システムコール(カーネルによって提供される機能)

3ライブラリ呼び出し(プログラムライブラリ内の関数)

たとえば、をchmod入力すると、マニュアルのセクション2に表示されますman chmod。そしてfprintfセクション3。


3

システムコールはカーネルによって直接処理されます。

ライブラリー呼び出しは、動的(または静的にリンクされた)ライブラリーによって処理されます。ライブラリ呼び出しを行うプログラムは、呼び出しが機能する前に、まずそのライブラリをインポートする必要があります。ライブラリコール自体は、システムコールを使用できます。

ライブラリがシステムコールの「フロントエンド」として提供され、カーネルでは提供されない追加機能や使いやすさを提供する場合があります。


ライブラリー呼び出しは、必ずしも動的ライブラリーによって処理されるとは限りません。ライブラリは静的にリンクできるため、インポート(ロード)は不要です。
jlliagre

本当です。その情報を追加しました。
ローレンス

半分だけ
...-jlliagre

頭だけのファイルで機能するべきではなく、ライブラリ呼び出しの一部ですか?
陳力

1

システムコールは、アプリケーションが使用するためにオペレーティングシステムが提供する機能です。一方、math.h、string.hなどの関数は、オペレーティングシステムとのインターフェイスとは何の関係もない関数です。


1

基本的に、Linuxカーネルには2つのモードがあります。

  1. ユーザーモード、
  2. カーネルモード。

Linuxカーネルは、これら2つのモード間を自動的に切り替えます。一般に、ライブラリ呼び出しユーザーモードで実行され、システム呼び出しカーネルモードで実行されます。オペレーティングシステムの用語では、カーネルモードは本質的にアトミックであり、監視モードです。 ほとんどすべてのライブラリ呼び出しは、そのタスクを実行するためにカーネルの助けを必要とします。各ライブラリー呼び出しは、基礎となるシステム呼び出しを順番に呼び出します。次の例を使用して、アイデアをより明確にします。

  1. fopen():ライブラリー呼び出し、
  2. open():システムコールです。

cプログラムでは、ヘッダーファイルからfopen()を使用します。プログラミング環境は、カーネルからシステムコールopen()を呼び出し、ファイルを開くタスクを実行します。実行後も、制御フローはユーザーモードに戻ります。

これを説明するには、次のタスクを実行します

  1. man man:ここでは、1〜8のマニュアルセクションにそれぞれ特定の目的があります。
  2. 実行man fopen:としてポーズが表示されますFOPEN(3)。ここで3は、Cライブラリ呼び出しセクションであるマニュアルページのマニュアルセクション3を示します。
  3. 実行man openOPEN(2)ここで2はシステムコールセクションであるマニュアルページのマニュアルセクション2を示します。

    概念を理解してください。


カーネルには、カーネルモードという1つのモードしかありません。ユーザープロセスには、ユーザーランドとカーネルの2つの操作モードがあります。
jlliagre

1

他の回答でここで言及した違いに追加するだけです。

ライブラリ呼び出しは単なる関数呼び出しであるため、ユーザー空間からカーネル空間への切り替えは発生しません。一方、システムコールはカーネルモードで動作するため、システムコールはユーザー空間からカーネル空間に切り替わります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.