多くのWebサイトで「unixのような」という用語に頻繁に出会います。
標準はありません。それはちょうどそれが動作する方法です。
しかし、もし私がゼロからカーネルを開発するなら、何がそれを「unixのような」とみなしたでしょうか?
基本的に、Unixのような記述されたコードを作成するものは何ですか?
多くのWebサイトで「unixのような」という用語に頻繁に出会います。
標準はありません。それはちょうどそれが動作する方法です。
しかし、もし私がゼロからカーネルを開発するなら、何がそれを「unixのような」とみなしたでしょうか?
基本的に、Unixのような記述されたコードを作成するものは何ですか?
回答:
標準はありません。それはちょうどそれが動作する方法です。
私はほとんど「Unixライクな」OSのが付着する非常に深刻な努力作るのですかと考えているPOSIX標準にも制御人、オープングループによって監督され、シングルUNIX仕様「真UNIX」を定義します。前者は後者の中核です。
そのため、実際には、Unixライクなオペレーティングシステムの実用性を定義する標準があります。POSIXに関するウィキペディアの記事の最後にある「完全に」および「ほぼ」に準拠したOSのリストをご覧ください。
特にLinuxがSingle Unix Specification(SUS)によって完全に準拠または認証可能であると見なされない明らかな理由がいくつかありますが、これらのLinuxシステムは必ずしも互換性がないためではありません。ウィキペディアの記事では、このように仕様を要約しています。
SUSv3の合計は約3700ページで、テーマ別に4つの主要部分に分かれています。
基本定義(XBD) -仕様で使用される定義と規則のリスト、および準拠システムによって提供される必要があるCヘッダーファイルのリスト。合計84個のヘッダーファイルが提供されます。
シェルとユーティリティ(XCU) -ユーティリティのリストとシェルの説明、sh。合計160個のユーティリティが指定されています。
システムインターフェイス(XSH) -システムコールまたはライブラリ関数として実装されるさまざまな関数の仕様が含まれています。合計で1123個のシステムインターフェイスが指定されています。
根拠(XRAT) -標準の背後にある説明。
標準のユーザーコマンドラインおよびスクリプトインターフェイスはPOSIXシェルであり、Kornシェルの初期バージョンに基づいたBourneシェルの拡張機能です。
他のユーザーレベルのプログラム、サービス、およびユーティリティには、awk、echo、ed、vi、その他数百ものものが含まれます。必要なプログラムレベルのサービスには、基本的なI / O(ファイル、ターミナル、およびネットワーク)サービスが含まれます。
テストスイートは標準に付属しています。PCTSまたはPOSIX Certification Test Suiteと呼ばれます。
さらに、SUSには372個の関数と3つのヘッダーファイルを指定するCURSES(XCURSES)仕様が含まれています。全体として、SUSv3は1742個のインターフェイスを指定します。
これは明らかに、Linuxカーネルの一部ではない多くのユーザーランドコンポーネント(シェルなど)を明確に指します。そのため、linux.org et。等 カーネルのみを認証することができます-この意味で、それはオペレーティングシステムではありません。もちろん、カーネルを使用して特定のシステムの認証を試みることもできますが、これは一般的な配布スキームを考慮すると意味がありません:カーネルとそれを維持する人々は、ユーザーランドコア(GNU)を維持する人々から独立しています実際に組み立てられたOSディストリビューション(Debian、Fedoraなど)を維持している人々から独立しています。
DebianまたはFedora自体が認証プロセスに関与できると思います(たとえば、RedHat Enterpriseは「認証されたUNIX」になる可能性があります)が、これは実際には望ましいという疑問を投げかけます。SUSシステムの主な理由は、そのために書かれた(商用規模、非消費者)ソフトウェアを実行することであると推測します。これは、単にLinuxのニッチではありません。なぜなら、彼らはまた、システム上で実行したい追加ソフトウェアに対しては、ライセンスごとに数十万ドルから数十万ドルを払っているからです。一方、Linuxおよびその他の外れ値は、商業目的での単純なコンプライアンスを超えて設計目標を追求しており、これにはさまざまな例があります。http://en.wikipedia.org/wiki/STREAMS):
STREAMSは、Single UNIX Specificationバージョン1(UNIX 95)および2(UNIX 98)に準拠するために必要でしたが、BSDおよびLinux開発者がSTREAMSの提供を拒否した結果、[要出典]はPOSIXのオプションとしてマークされました。バージョン3のAustin Groupによる準拠(UNIX 03)。
SUSとThe Open Group!= linux、!= BSDなどのポイントを強調する興味深い宿泊施設
POSIXについての最初の答えを拡張し、「unixのような」の意味を理解するには、まずUNIXが何であるかを正確に理解する必要があります。Unix商標を所有するOpen Groupのドキュメントを見ると、Single UNIX仕様の進化に関する詳細がわかります。ここにUNIX03があります。
UNIX 03製品標準は、Single UNIX Specificationのバージョン3に準拠するシステムのマークです。これは、UNIX 98製品標準の大幅に強化されたバージョンです。必須の機能強化には、ISO / IEC 9989:1999 Cプログラミング言語、IEEE Std 1003.1-2001およびISO / IEC 9945:2002との整合が含まれます。この製品規格には、次の必須の製品規格が含まれています。国際化システムコールおよびライブラリ拡張V3、コマンドおよびユーティリティV4、C言語V2、および国際化ターミナルインターフェイス。
UNIX 98製品標準は、UNIX 95製品標準の大幅に強化されたバージョンです。必須の機能強化には、(1)スレッドインターフェイス、(2)マルチバイトサポート拡張(MSE)、(3)大容量ファイルのサポート、(4)動的リンク、(5)ハードウェアデータ長の依存関係または制限を削除するための変更、および(6 )2000年の変更。さらに、次のオプションの拡張機能が含まれています。ソフトウェア管理機能およびリアルタイムサポート用のAPIセット。この製品標準には、次の必須の製品標準が含まれています。国際化システムコールおよびライブラリ拡張V2、コマンドおよびユーティリティV3、C言語、トランスポートサービス(XTI)V2、ソケットV2、および国際化ターミナルインターフェイス。さらに、Software Administration Product Standardに準拠する場合もあります。
UNIX95(私の強調):
この製品標準は、提供されている機能に加えて、AT&Tが最初に開発したUNIXオペレーティングシステムコードおよび/またはインターフェイスから派生したオペレーティングシステムのクラスの1つ用に開発された幅広いアプリケーションをサポートする統合プラットフォームを定義します基本製品基準による。ベースよりも広い範囲を持ちます。この製品標準には、国際化されたシステムコールとライブラリ拡張、コマンドとユーティリティV2、C言語、トランスポートサービス(XTI)、ソケット、および国際化されたターミナルインターフェイスが含まれます。
標準のサーバーバージョンでは、インターネットサーバーとIPv6が追加される場合があります。
したがって、もちろんAT&T Bell Laboratoriesへの参照があり、C言語はUNIXとは何かの中心にあります。C言語、モジュラーベースツール、シェル、およびカーネル、ファイルシステム、その他の主要なOSコンポーネントの設計と実装方法です。 。
モーリスJ.バッハによる「UNIXオペレーティングシステムの設計」という本は、この時点で歴史的な問題であるため、非常に貴重な読み物となっています。もちろん、これが実際にC言語のような他の発明とどのように関係しているかに注意してください。CはAT&T Bellによって開発されたもので、アセンブリと同程度の速度で異なるハードウェア間での移植が可能な言語でUnixを実装します。POSIXの多くは標準Cの拡張です。
カーネル自体に関する限り、UNIXカーネルが伝統的に何であったかを説明するために、次のような概念図を見つけることがよくあります。
UNIX System Vカーネルの基礎について説明する、バッハ氏の古典的な本(1986年)からの抜粋を以下に示します。
ただし、[アプリケーションサブシステムとプログラム]はすべて、最終的にカーネルによって提供される低レベルのサービスを使用し、システムコールのセットを介してそれらのサービスを利用します。System Vには約64のシステムコールがあり、そのうち32未満が頻繁に使用されます。それらには使いやすいシンプルなオプションがありますが、ユーザーに大きな力を提供します。システムコールのセットとそれらを実装する内部アルゴリズムは、カーネルの本体を形成します[...]
[...] 2つの主要なコンポーネントは、ファイルサブシステムとプロセスサブシステムです。
ファイルは論理システムとして扱われるファイルシステムに編成されます。ディスクなどの物理デバイスには、複数の論理デバイス(ファイルシステム)を含めることができます。各ファイルシステムには、ファイルシステムの構造と内容を記述するスーパーブロックがあり、ファイルシステム内の各ファイルは、ファイルの属性を与えるiノードによって記述されます。ファイルを操作するシステムコールは、iノードを介して操作します。[およびバッファプール]
[...] iノードには2つのバージョンがあります。ファイルが使用されていないときにiノード情報を保存するディスクコピーと、アクティブファイルに関する情報を記録するインコアコピーです。
UNIXシステムでのユーザープロセスの実行は、ユーザーとカーネルの2つのレベルに分けられます。プロセスがシステムコールを実行すると、プロセスの実行モードがユーザーモードからカーネルモードに変わります。オペレーティングシステムが実行され、ユーザー要求を処理しようとします[...]
[...] UNIXシステムの哲学は、ユーザーがより複雑なプログラムを構築するためのビルディングブロックとして使用できる小さなモジュラープログラムを作成できるオペレーティングシステムプリミティブを提供することです。シェルユーザーに表示されるこのようなプリミティブの1つは、I / Oをリダイレクトする機能です。
[...]システムコールの処理に加えて、カーネルはユーザーコミュニティの一般的な簿記、プロセススケジューリングの制御、メインメモリ内のプロセスの保存と保護の管理、割り込みのフィールド化、ファイルとデバイスの管理、システムエラーの処理を行います条件。
Unixライクなオペレーティングシステムでのカーネルのさまざまな実装に興味がある場合は、FreeBSD 実装(4.4BSD)またはMachカーネルを調べたり、機能のこの比較を調べたりすることもできます。
UNIXの設計について知れば知るほど、UNIXの祖先とその歴史に関する次の図で何が起こったのかをより深く理解できます。バッハ氏は本の中で主にSystem Vについて話しているが、彼はBSDについても論じている。
これには、実際に目に会う以上のものがあります。たとえば、Mac OSXはUNIX03の認定を受けていますが、純粋なUNIX(主に赤)のいずれかに接続されていますか?
上に、BSD、GNU、Microsoft、および多様な個人がどのようにこの宇宙に貢献したかを見ることができます。GNUと最終的にlinuxにはUNIXへの直接の系統はありませんが、GNUはクローズドになった商用UNIXのツールとソフトウェアをオープンソースの世界で再設計する努力であることがわかります。したがって、GNUが管理するソフトウェアを見ると、たとえば初期のプロトタイプのアプリやライブラリでアイデアが得られます。
ライセンス戦争は、UNIXの進化(および停滞)で役割を果たしました。閉じられた対のBSD( -あなたはのUNIXは、ライセンスの種類に応じて並んでいることをすぐに見ることができますBSDができますコードクローズドソースを作るために... OSXを参照)、GPL、LinuxとGNUのコピーレフトの世界で自分自身を補完することができます。Linus Torvaldsによって最初に開発されたLinuxカーネルの古典的なマップを次に示します。これは、Unixライクなオペレーティングシステムでカーネルが「できる」ことも明らかにします。
これは、「カーネル」設計タイプがUNIX標準を作るものではなく、unixのようなOSを定義するものではないという考えを示唆しています。これは、多くのUNIX系OSがモノリシックカーネルまたはマイクロカーネルを持っている可能性があるという事実によって証明されています。モノリシックはUNIXの古典的な設計タイプでした。実際、AIXはマイクロカーネルを使用しますが、純粋なUNIX内でもHPUXにはモノリシックカーネルがあります。設計に関するこの議論はパフォーマンスに関するものであり、Unixの祖先やアイデンティティとは関係ありません。一方、ソフトウェアにサービスを提供したり、UNIX / unixのようなオペレーティングシステムでファイルシステムなどを処理したりするための伝統的な概念的アプローチがあります。
このような考慮事項により、質問のOS部分にコンテキストが追加されると考えています。