\r\n\r\n
システムコールとライブラリコールは、コンピュータのオペレーティングシステムに関連しています。コンピュータは、ユーザーモードとカーネルモードの2つのモードで動作することができます。システムコールとライブラリコールの大きな違いは、システムコールはカーネルが提供する機能で、カーネルモードに移行してハードウェア資源にアクセスするのに対し、ライブラリコールはプログラミングライブラリが提供する機能であることです。例えば、open()はシステムコールで、fopen()はライブラリコールです。C言語でfopen()を使用する場合、stdio.hヘッダーライブラリが使用されます。そして、カーネル内でシステムコール「open()」が使用され、ファイルオープン作業が完了する。
1. 概要と主な違い 2. システムコールとは 3. ライブラリの意味 4. システムコールとライブラリコールの類似点 5. 横並び比較 - システムコールとライブラリコールを表形式で表示 6. まとめ
コンピュータは2つのモードで動作します。ユーザーモードとカーネルモードである。コンピュータのシステム上では、いくつかのプロセスが動作しています。プロセスとは、実行中のプログラムのことです。アプリケーションの実行中は、コンピューターはユーザーモードです。ハードウェア資源が必要な場合、プロセスはカーネルに要求を送り、コンピュータはカーネルモードに入る。これらのリクエストは、システムコールを使って送信されます。コンピュータは、この2つのモードを頻繁に切り替えています。タスクが完了すると、コンピュータはカーネルモードからユーザーモードに戻ります。このモードの切り替えを「コンテキストスイッチ」と呼びます。システムコールは、オペレーティングシステムとユーザープログラムとの間のインターフェースです。
図01:システムコール
システムコールには様々な種類があります。プロセスの作成と終了、プロセスの実行、メモリの確保と解放は、「プロセス制御システムコール」を使って行うことができます。ファイル管理システムコール」は、ファイルの作成、削除、読み込み、書き込み、オープン、クローズに使用することができます。プロセスは、その実行を完了するためにいくつかのリソースを必要とします。デバイスの要求と解放は、デバイス管理システムコールで行われます。"情報管理システムコール "は、システムデータ、プロセスおよびデバイスのプロパティを取得するために使用することができます。プロセスは互いにコミュニケーションしている。この通信は、「通信システムコール」によって行われます。ステータス情報の送信、通信コネクションの生成・削除、メッセージの送受信は、すべて通信システムコールを使って行うことができます。
ライブラリコールは、プログラミングライブラリが提供する関数で、ライブラリを呼び出す前にインポートする必要があります。ライブラリコールは、システムコールに依存する場合があります。
C言語では、ヘッダーファイルをインクルードすることで、これらの関数をプログラム内で使用することができます。ヘッダーファイルをインクルードするには、プリプロセッサー指示文#includeを使用します。プリプロセッサは、ソースファイルの残りの部分を処理する前に、指定されたファイルをスキャンします。一般的なライブラリ関数には次のようなものがある。「math.h」ライブラリには数学演算に関連する関数が含まれている。stdio.h "ライブラリは、入出力を行うための関数を提供します。"fopen() "は、指定されたファイル名を開きます。"fclose() "はファイルを閉じます。"printf() "は、フォーマットされた出力を標準出力に送信するために使用されます。"fprintf() "は、フォーマットされた出力をストリームに送信するために使用されます。"scanf() "は、標準入力からフォーマットされた入力を読み取るために使用します。時刻・時間管理機能を提供します。
システムコールとライブラリコール | |
システムコールとは、ハードウェア資源にアクセスするために、カーネルが提供するカーネルモードへの移行機能です。 | ライブラリコールは、プログラミングライブラリが提供する機能です。 |
実行方法 | |
システムコールはカーネルモードで実行されます。 | ユーザーモードでライブラリコールを実行する。 |
モード変換 | |
ユーザーモードからカーネルモードへのシステムコール切り替え。 | ライブラリコールでユーザーモードからカーネルモードへの切り替えはできません。 |
携帯性 | |
システムコールはポータブルではありません。 | 図書館の電話は携帯可能です。 |
システムコールはカーネルに、ライブラリコールはユーザースペースに実装されています。システムコールとライブラリコールの違いは、システムコールはカーネルがハードウェア資源にアクセスするためにカーネルモードに入るために提供する機能、ライブラリコールはプログラミングライブラリが提供する機能であることです。open()、fork()、cd()はシステムコールの例、fopen()、fprintf()はライブラリコールの例です。
この記事のPDF版をダウンロードし、引用の仕方に従ってオフラインで使用することができます。PDF版をダウンロードしてください。以下、システムコールとライブラリコールの違いについて説明します。