すでに私この質問への回答としてしかし、システムコールとライブラリ機能の違いはよくわかりません。概念的には、2つの違いは何ですか?
ベストアンサー1
概念的には、ライブラリ関数はプロセスの一部です。
実行時に実行コードとそのコードが依存するライブラリ(libc.soなど)のコードは単一のプロセスにリンクされます。したがって、これらのライブラリから関数を呼び出すと、その関数はプロセスの一部として実行され、同じリソースと権限を持ちます。これは、自分が書いた関数を呼び出すのと同じアイデアです(PLTおよび/またはトランポリン関数などの例外はありますが、興味がある場合は参照できます)。
概念的には、システムコールは、コード(通常は権限がない)からカーネル(必要に応じて権限を拡大する権限がある)を呼び出すために使用される特別なインタフェースです。
たとえば、Linuxを参照してください。マニュアル。 Cプログラムがmalloc
メモリ割り当てを呼び出すと、glibcのライブラリ関数が呼び出されます。
すでに割り当て可能なスペースが十分な場合プロセス内部、必要なヒープ管理を実行し、呼び出し元にメモリを返します。
それ以外の場合、glibcはカーネルからより多くのメモリを要求する必要があります。brk
glibc関数は(おそらく)brk
システムコールを呼び出します。システムコールを使用すると、制御がカーネルに渡された後にのみグローバル仮想メモリ状態を変更して、より多くのメモリを予約し、それをプロセスのアドレス空間にマッピングできます。