web-dev-qa-db-ja.com

シェル、カーネル、APIの違いは何ですか

これがオペレーティングシステムと、実際のオペレーティングシステムではないものにどのように適用されるかを理解したいと思います。私は3つとその本質の違いを理解できません。 APIは呼び出すことができる関数ですが、シェルとは何ですか? APIがある場合、オペレーティングシステムのカーネルは正確に何ですか?オペレーティングシステムには変更されないコアがあり、このコアは典型的なOSの基本的な役割を果たしますが、同じカーネルでGUIやコマンドラインなどの異なるユーザーインターフェイスを持っている場合もあります。だから問題は、これらのことの違いを混乱させていることです。ああ!

Cのprintfやfopenなどの関数をAPI呼び出しと呼ぶことはできますか?

19
quantum231
  • Shellはコマンドインタープリターです。つまり、ターミナルエミュレーターで入力したコマンドを処理するプログラム(対話モード)またはシェルスクリプト(コマンドを含むテキストファイル)を処理するプログラム(バッチモード)です。初期のUnix時代には、ユーザーがマシンと対話するためのユニークな方法でした。最近では、ほとんどの一般ユーザーにとってグラフィカル環境がシェルに取って代わりつつあります。

  • kernelは、アプリケーションが実行されているハードウェア(CPU、RAM、ディスク、ネットワークなど)とインターフェイスする低レベルのプログラムです。仮想化では、それ自体が別のオペレーティングシステム上で実行される仮想マシン上で実行される複数のカーネルを持つことができますが、コンピューター上で実行される最低レベルのプログラムです。

  • [〜#〜] api [〜#〜]は、ライブラリとプログラミング言語を使用してコードを記述するときに開発者が使用する必要があるインターフェイスを定義する一般的な用語です。 カーネルにはAPIはありませんライブラリではないため。これらには[〜#〜] abi [〜#〜]があります。これは、他のことを超えて、アプリケーションがシステムコールを介してどのように対話するかを定義します。 Unixアプリケーション開発者は、標準Cライブラリ(例:libcglibc)を使用して、ABI準拠のバイナリを構築します。 printf(3)およびfopen(3)はシステムコールのラッパーではなく、_(g)libc_標準機能です。最終的に使用する低レベルのシステムコールは、write(2)およびopen(2)であり、場合によってはbrkmmapなどの他の呼び出しもあります。カッコ内の数字は、コマンドがどのマニュアルで見つかるかを示す規則です。

Unixマニュアルページの最初のボリュームには、Shellコマンドが含まれています。

2番目には、writeopenのようなシステムコールwrappersが含まれています。これらはkernelへのインターフェースを形成します。

3番目のものには、fopenprintfなどの標準ライブラリ(Unix標準[〜#〜] api [〜#〜])関数(システムコールを除く)が含まれています。これらは、特定のシステムコールへのnotラッパーですが、必要に応じてシステムコールを使用するコードです。

27
jlliagre

シェルは、コマンドラインでOSおよびカーネルと通信する方法です。シェルは、APIを呼び出すことによってこれを行います。カーネルは確かにOSの中核であり、メモリ管理、タスクスケジューリング、ファイルシステムでの処理、I/O処理などを行います。カーネルが行うすべてのことは、何らかの方法でOSが提供するAPIによって呼び出すことができます。

printfとfopenは、OSとカーネルによって提供されるシステムコール(API)をラップします。

6
hamon

シェル:オペレーティングシステムへのコマンドラインインターフェイスのようなものです。 ls、ps、killなどのコマンドを使用して、OSへの特定の操作を完了するように要求できます。 Windowsの「cmd」に似ています。

カーネル:すべてのオペレーティングシステムのメインコードです。シェルまたはGUIからのリクエスト(メモリ割り当て、ファイルのオープンなど)は、カーネルによって最終的に満たされます。

はい、あなたが述べた呼び出しはAPI呼び出しと見なされます。これらの呼び出しに対する要求もカーネルによって処理されます。 UNIXでAPI呼び出しを見つけるには、以下のリンクにアクセスしてください。 http://www.mkssoftware.com/docs/api_index.asp

これは、UNIX OSの全体像です。

アプリケーション=>(シェル+ライブラリルーチン)=>システムコール=>カーネル

最終的なリクエストハンドラはカーネルです。 THX!

4
rahul

たとえば、映画を見ているのはShellであり、実際にハードウェアで実行されるプロセスはkernelです。 Shellは、ユーザーおよびソフトウェアインターフェースのosのようにほぼ動作し、カーネルソフトウェアおよびハードウェアのosのそれとして動作します。

1
Sanket