私はオペレーティングシステムのシステムコールについて非常に混乱しています。 「Operating System Concepts、9th Edition」(63ページ)の本によると:
しかし、ほとんどのプログラマーはこれらのレベルの詳細を見たことがありません。通常、アプリケーション開発者はアプリケーションプログラミングインターフェース(API)に基づいてプログラムを設計します。
API を構成する関数は通常、アプリケーション・プログラマーに代わって実際のシステム呼び出しを実行します。
これは、プログラマとしてシステムコールを直接使用しないことを意味します。ところで、このようにシステムコールを直接使用する方法を教えてくれる映像を見ました。一つここで、read|() および write() システムコールにアクセスします。それでは、システムコールを直接使用できますか、それともAPIを使用できますか、またはその両方を使用できますか? ?
ベストアンサー1
追加の文脈がなければ、この引用がどのレベルの抽象化を議論しているかは完全には明確ではありません。しかし、オペレーティングシステムのデザインコンセプトについて話している場合は、低いレベルを話すこともできます。
実際に何が何であるか、自分に尋ねたことがありますか?発生する電話するときwrite()
?システムライブラリはこれらの値に対していくつかの完全性チェックを実行し、最終的にオペレーティングシステムカーネルに渡すことができます。
ここから本格的に雑草に陥り始めます。これを行う正確な方法は、オペレーティングシステムと実行中の特定のプロセッサアーキテクチャによって異なります。たとえば、Linuxの内部使用syscall()
カーネルにシステムコール信号を送信します。しかし、もう一度尋ねることもできます。syscall()
今はどうですか?概して、パラメータを標準化された形式でどこかに保存し、特権モードに切り替えて、オペレーティングシステムのカーネルのどこかにあるシステムコールハンドラにジャンプする特別なプロセッサコマンドを実行します。
これで、これらすべてのブローカーを削除し、パラメーターを正しいプロセッサー・レジスターに入れ、コマンドを直接実行するのを防ぐ方法はありません。君にはルールがない〜しなければならないwrite()
、でも使用してくださいsyscall()
。これらの機能は、プロセッサに関係なくすべてのLinuxおよびオペレーティングシステムに関係なく、すべてのシステムでsyscall()
実行されるという点で便宜のためです。write()
私はおそらくあなたの本がオペレーティングシステムの設計について話しているならば、それはまさにその内容であると思います。あなた開発者としてはしないでください。必要これらの機能を使用しますが、ほとんどの場合〜したい。ただし、その場合、オペレーティングシステム標準ライブラリの設計者は機能自体を実装する必要があります。 API自体は、プロセッサ内部を処理する必要がないように標準化されたインターフェイスです。