オペレーティングシステムを「Unix-Like」にするものは何ですか?


20

多くのWebサイトで「unixのような」という用語に頻繁に出会います。

標準はありません。それはちょうどそれが動作する方法です。

しかし、もし私がゼロからカーネルを開発するなら、何がそれを「unixのような」とみなしたでしょうか?

基本的に、Unixのような記述されたコードを作成するものは何ですか?


回答:


15

標準はありません。それはちょうどそれが動作する方法です。

私はほとんど「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などのポイントを強調する興味深い宿泊施設


2
認定されることは、準拠することとは異なることに注意してください。たとえば、Linux Foundationが各カーネルバージョンの認定を取得することは、コストと開発速度のために非現実的です。しかし、それはそれ(カーネル)が完全にまたはほとんど準拠していないという意味ではありません。
strugee

2
@strugee POSIX標準は、カーネルには適用されません。標準化されているのは、コマンド(shell、ls、cat、...)とAPI(libcが提供するもの、スレッド)です。LinuxベースのディストリビューションをUnixのようなものにしているのは、ほとんどがGNUコンポーネント(コマンドとglibc)です。カーネルは認証/コンプライアンスの範囲外です。
jlliagre

1
反論するのではなく、明確にしてください(私はilluminÉの答えに対する私のコメントからこれを繰り返しています)。標準は「何」であり、カーネルは「どのように」です。私は標準のほんの一部しか読んでいませんが、それらが「カーネル」を参照しているとは思いません(単に「システム」です)。したがって、WRTの認証とコンプライアンス:それは、カーネル/ OSが「どのように」行うのではなく、「何をする」のです。
goldilocks

3
@strugeeシングルUnix仕様は、ユーザーランドインターフェイスに適用されます。もちろんカーネルは最終的に関与しますが、私のコメントは、Linux Foundationがカーネルを認定することについてのあなたの声明に関するものでした。カーネルは認証できません。認証プロセスが相互作用するすべてのコンポーネントが欠落しています。認定できる(または少なくとも可能な限り準拠するように試みる)ことができるのはオペレーティングシステム、つまりLinuxコミュニティで一般にディストリビューションと呼ばれるものです。
jlliagre

2
@strugeeそれは可能性のある理由ですが、重要なのはそれほど迅速なロールオーバーではありませんが、互換性のない変更が追加されないようにするというコミットメントはありません。たとえば、Solaris 10は準拠しているため、この互換性を保証し、Unix03の認定を受けて以来、多数の更新が行われています。さらに、Gnu / Linuxの組み合わせは、可能な限り準拠するように努めていますが、それ以上ではありません。高価なプロセスであり、一部の要件が(意図的に)欠落しており、一部の拡張機能に互換性がないため、とにかく準拠しないため、(ほとんど)認証を試みたことはありません
-jlliagre

12

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、および国際化ターミナルインターフェイス。

UNIX98

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部分にコンテキストが追加されると考えています。


3
+1ここにいくつかの良い点があります:1)CとUnixの関係について(追加:CはAT&T Bellによって開発されました。は標準Cの拡張です)。2)そのカーネル設計は標準から独立しています。標準は「何」であり、カーネルは「方法」です。
goldilocks

1
@goldilocksありがとう、逐語的にCに関するコメントを追加しました。カーネルの考慮事項が標準とは無関係であることを明確にしようとしました。この質問は、unixライクなカーネルに特定の何かがあるが、まだないことを想定しています。一方、歴史的に、最初のUnixカーネルはそのような方法であったかもしれません。私の理解は限られていますが、70年代以降ハードウェアが大きく変わったため、カーネルが大きく変わったと思います。明らかなことは、カーネルはUnix / unixのようなものを定義していないということです。LinuxカーネルはGNU / LinuxまたはLinuxを明確に定義していると思います。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.