私は1970年代にUnixの簡単な紹介を見ました(https://www.youtube.com/watch?v=7FjX7r5icV8 3Dアニメーションは1:56で始まり、Unixの一般的な3文字アーキテクチャを示す3Dアニメーションで終わります。 ovaall Linuxアーキテクチャの図を見たので混乱しています。
UnixとLinuxの両方の人物はカーネルを共有するが、Unixはシェルで、シェルはユーティリティで包まれている。対照的に、Linuxはユーザースペースにのみラップされ、シェルは何もラップせずにユーザースペース内の多くのプロセスの1つにすぎません。
UnixとLinuxは最も基本的なレベルでどのように異なり、共通点は何ですか? Unixは3階層、Linuxは2階層であるのはなぜですか? UnixのShellとLinuxのShellはまったく異なる概念ですか?
答え1
私にとっては、その区別はまだやや曖昧なので、これは非常に明確な答えではないかもしれません。私は実際の技術的な事実ではなく、私の主張を伝えようとしています。
まず、LinuxはUNIXに似たシステムであることを覚えておくことが重要です。これは、ほとんどの概念と実装がUNIXに触発され、時にはUNIXからインポートされたにもかかわらず、最初は2つのシステム間に共通のコードベースがなかったことを意味します。実際、Linuxは、Linus Torvaldsがライセンスにあまりにも制限的であると判断したもう1つのUNIX様システムであるMINIXに大きく触発されました。
Unixは3階層、Linuxは2階層であるのはなぜですか? UnixのShellとLinuxのShellはまったく異なる概念ですか?
私にとっては、両方とも2つの層です。シェルはカーネルと特権的な関係を持っていないので、そうではありません。最初の層は、すべてが可能なコア層である特権層です。 2番目の層は、権限のない層で、シェルや標準ユーティリティを含むさまざまなプログラムが実行されるユーザー層です。たとえば、ls
これらのプログラムはすべて、次のようにアクセスできます。UnixシステムまたはLinuxシステムコールセット(このリストは完全ではない可能性があります)
私の考えでは、これはUNIXまたはLinuxについて実際に言及する必要がある唯一の階層的な違いです。今、カーネルはシェルと他のプログラムの間に違いはないと思いますが、もちろん、ユーザーはこれを行います。彼がすべての人と対話する方法。シェルと他のプログラムを区別する必要がある場合、その区別はユーザーが行う必要がありますが、システムはまだそれを認識しません。
これは、今日のシステムユーザーよりもあなたのビデオでより目立つものです。端末を見てください。驚くほど小さく、今はこのようなものを使う考えが全くないでしょう(もちろん私もそうしたいのですが認めます)。問題は次のとおりです。当時、システムを起動してログインしたとき、シェルは最初で唯一のものでした。これ他のプログラムを実行するために必要な作業があります。おそらく違いは次のとおりです。カーネルの観点からは、シェルは他のプログラムと変わらないが、他のプログラムに対するユーザの玄関口である。そして、このゲートウェイは1970年代の「核心UNIXの全盛期」にさらに明らかになりました。
もちろん、これらの区別はもはや重要ではありません。おそらく、次の2つのことが原因です。
- 端末エミュレーション。実際、複数のシェルを同時にインポートして切り替えることができます。これはあなたに何かがあることを意味します今後これを制御できるシェルです。
- グラフィックインターフェイス。これで、端末を表示することなく、GUI、ウィンドウマネージャ、デスクトップ環境などでプロセスを開始できます。私たちはグラフィックプログラムもデザインしました。包むシェルインスタンスを囲み、使いやすく楽しくします。
私はチャートをうまく扱うことはできませんが、こう言いたいと思います。
私が言いたいことは:
- 点線は以下を表します。ユーザー対話。
- 点線は以下を表します。対話を処理するシェル(プロセス生成、プロセス間のI / Oフロー操作、...)
- 一般線は次を示します。システム相互作用。
その要素を除いてすべて削除する場合システム対話型では、次の2つで終わります。コアとユーザープログラム。システムコールを介して接続された2つのレイヤがあります。
これで、ユーザーとしてシェルを他のプログラムではなく別のプログラムのゲートウェイとして見ている場合は、次のように追加できます。ユーザー対話そして処理するシェル相互作用。今、私たちは3番目のレイヤーにありますが、カーネルには何も変更されませんでした。
答え2
私はあなたのソースが偽であると言いたいと思います。
「UNIX」と呼ばれるさまざまなオペレーティングシステムがありますが、どちらも他のユーザースペースユーティリティの基本層を形成する「特権」プロセスを持っていません。
シェルは別のユーザースペースプロセスです。