web-dev-qa-db-ja.com

オペレーティングシステムを「Unixライク」にする理由

多くのWebサイトで、「Unixライク」という用語をよく目にします。

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

しかし、もし私がカーネルをゼロから開発したとしたら、それを「Unixライク」と見なすにはどうすればよいでしょうか。

基本的に、書かれたコードをUnixのようにするものは何ですか?

22

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

ほとんどの「Unixライク」なOSは POSIX標準 に準拠するために非常に真剣に取り組んでいると思います。これは、Open Groupが監督し、 Single UNIX Specification も制御しています=「真の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認定テストスイートと呼ばれます。

さらに、SUSには、372の関数と3つのヘッダーファイルを指定するCURSES(XCURSES)仕様が含まれています。全体として、SUSv3は1742のインターフェースを指定しています。

これは明らかに、単にLinuxカーネルの一部ではない多くのユーザーランドコンポーネント(シェルなど)を指します。そのため、linux.orgなどの方法はありません。 al。カーネルのみを認定することができます-この意味で、カーネルはまったくオペレーティングシステムではありません。もちろん、カーネルを使用して特定のシステムを認証しようとすることもできますが、これは、一般的な配布スキームの観点からは意味がありません。カーネルとそれを維持する人々は、ユーザーランドコア(GNU)を維持する人々から独立しています。実際に組み立てられたOSディストリビューション(Debian、Fedoraなど)を維持している人々から独立している人。

私はDebianまたはFedora自体が認証プロセスに参加できると思います(たとえば、RedHat Enterpriseは「認証されたunix」になる可能性があります)が、これは実際にそれが望ましいという疑問を投げかけます。 SUSシステムの主な理由は、そのために記述された(商業規模、非消費者向け)ソフトウェアを実行することであり、これは単にLinuxニッチではない-これを行う人々は数千を支払うであろう多くのサポートなどを含む、OSのライセンスあたりの金額。これは、システム上で実行したい追加のソフトウェアについても、ライセンスあたり数万または数十万ドルを支払うからです。Linuxおよびその他の外れ値一方、商業目的のための単純なコンプライアンスを超えて設計目標を追求しており、これのさまざまな例があります。たとえば(from http://en.wikipedia.org/wiki/STREAMS ):

STREAMSは、Single UNIX Specificationバージョン1(UNIX 95)および2(UNIX 98)に準拠するために必要でしたが、BSDおよびLinux開発者がSTREAMSを提供することを拒否した結果、POSIXではオプションとしてマークされましたAustin Groupによるバージョン3(UNIX 03)への準拠。

SUSおよびThe Open Group!= linux、!= BSDなど)を強調する興味深い宿泊施設.

17
goldilocks

POSIXに関する最初の答えを拡張し、「unixのような」の意味を理解するには、まず、UNIXとは正確に何であるかを理解する必要があります。 Unix商標を所有するOpen Groupのドキュメントを見ると、 詳細単一のUNIX仕様 が見つかります= =の進化-ここにある NIX

UNIX 03製品標準は、シングルUNIX仕様のバージョン3に準拠するシステムのマークです。これは、UNIX 98製品標準の大幅に強化されたバージョンです。必須の機能拡張には、ISO/IEC 9989:1999 Cプログラミング言語、IEEE Std 1003.1-2001およびISO/IEC 9945:2002との整合が含まれます。この製品標準には、次の必須の製品標準が含まれています。国際化システムコールとライブラリ拡張V3、コマンドとユーティリティV4、C言語V2、および国際化端末インターフェイス。

NIX98

UNIX 98製品標準は、UNIX 95製品標準の大幅に強化されたバージョンです。必須の機能拡張には、(1)スレッドインターフェイス、(2)マルチバイトサポート拡張(MSE)、(3)大容量ファイルのサポート、(4)ダイナミックリンク、(5)ハードウェアデータ長の依存関係または制限を削除するための変更、および(6 )2000年の変更。さらに、次のオプションの拡張機能が含まれています:ソフトウェア管理機能およびリアルタイムサポート用のAPIセット。この製品標準には、次の必須の製品標準が含まれます。国際化システムコールとライブラリ拡張V2、コマンドとユーティリティV3、C言語、トランスポートサービス(XTI)V2、ソケットV2、および国際化端末インターフェイス。また、ソフトウェア管理製品規格に準拠している場合もあります。

NIX95 (私の強調):

この製品規格は、もともと開発されたUNIXオペレーティングシステムのコードやインターフェイスから派生したオペレーティングシステムのクラスの1つ用に開発された幅広いアプリケーションをサポートする統合プラットフォームを定義します。 AT&T、ベース製品規格によって提供される機能に加えて。ベースよりもスコープが広い。この製品標準には、次の製品標準が含まれます。国際化されたシステムコールと拡張ライブラリ、コマンドとユーティリティV2、C言語、トランスポートサービス(XTI)、ソケット、および国際化されたターミナルインターフェイス。

サーバー バージョン 標準のInternet ServerとIPv6が追加される場合があります。

もちろん、AT&T Bell Laboratoriesへの参照があり、C言語はUNIXの中心であるC言語、モジュラーベースツール、シェル、およびカーネル、ファイルシステム、その他の主要なOSコンポーネントが設計および実装されました。

enter image description here

enter image description here

モーリスJ.バッハの著書The Design of the UNIX Operating Systemは、この時点で歴史的な問題であるため、非常に貴重なものになります。もちろん、これがC言語のように 他の発明 とどのように関連しているかは確かです。 CはAT&T Bellによって開発され、アセンブリと同じくらい高速で、異なるハードウェア間で移植可能な言語でUnixを実装します。多くのPOSIXは標準Cの拡張機能です。

カーネル自体に関する限り、UNIXカーネルが従来何であったかを説明するために、このような概念図がよく見られます。

enter image description here

以下は、バッハ氏の古典的な本(1986)からの抜粋で、UNIX System Vカーネルの基礎について説明しています。

ただし、それらはすべて[アプリケーションサブシステムとプログラム]であり、最終的にカーネルによって提供される下位レベルのサービスを使用し、一連のシステムコールを介してそれらのサービスを利用します。 System Vには約64のシステムコールがあり、32未満が頻繁に使用されます。使いやすいシンプルなオプションがありますが、ユーザーに多くの機能を提供します。システムコールのセットとそれらを実装する内部アルゴリズムがカーネルの本体を形成します[...]

[...]その2つの主要コンポーネントは、ファイルサブシステムとプロセスサブシステムです。

ファイルはファイルシステムに編成され、論理デバイスとして扱われます。ディスクなどの物理デバイスには、複数の論理デバイス(ファイルシステム)を含めることができます。各ファイルシステムには、ファイルシステムの構造と内容を記述するスーパーブロックがあり、ファイルシステム内の各ファイルは、ファイルの属性を提供するiノードによって記述されます。ファイルを操作するシステムコールは、iノードを介して行います。 [そしてバッファプール]

[...] iノードには2つのバージョンがあります。ファイルが使用されていないときにiノード情報を格納するディスクコピーと、アクティブファイルに関する情報を記録するコア内コピーです。

UNIXシステムでのユーザープロセスの実行は、ユーザーとカーネルの2つのレベルに分けられます。プロセスがシステムコールを実行すると、プロセスの実行モードがuser modeからkernel modeに変わります。オペレーティングシステムが実行しますそしてユーザーのリクエストを処理しようとします[...]

[...] UNIXシステムの哲学は、より複雑なプログラムを構築するためのビルディングブロックとして使用できる小さなモジュール式プログラムをユーザーが記述できるようにするオペレーティングシステムプリミティブを提供することです。シェルユーザーに表示されるそのようなプリミティブの1つは、I/Oをリダイレクトする機能です

[...]システムコールのサービスに加えて、カーネルはユーザーコミュニティの一般的な簿記、プロセススケジューリングの制御、メインメモリ内のプロセスのストレージと保護の管理、割り込みの処理、ファイルとデバイスの管理、システムエラーの処理を行います条件。

Unixライクなオペレーティングシステムでのカーネルのさまざまな実装に興味がある場合は、FreeBSD implementation (4.4BSD)または Mach kernel もご覧ください。 =またはこれを見てください 比較 彼らの機能の。

UNIXの設計について理解を深めるほど、次の図でUNIXの祖先とその history について何が起こったかを理解できます。バッハ氏は本の中で主にSystem Vについて話していますが、BSDについても説明しています。

enter image description here

これは目に見える以上のものです 本当にあります。たとえば、Mac OSXはUNIX03 certified ですが、純粋なUNIXのいずれかに接続されていると思いますか(ほとんどが赤色)。

enter image description here

上記では、BSD、GNU、Microsoft、およびさまざまな個人がこの世界にどのように貢献したかを確認できます。 GNU、そして最終的にはlinuxはUNIXへの直接の系譜を持っていませんが、 [〜#〜] gnu [〜#〜] はリエンジニアリングする努力であることがわかりますオープンソースの世界では、商用UNIXのツールとソフトウェアは閉鎖されていたので、 GNUが保守するソフトウェア を見ると、たとえば、最初のプロトタイプのアプリとライブラリがわかります。

ライセンス wars は、UNIXの進化(および場合によっては停滞)に関与しました。 UNIXがライセンスの種類に応じて並んでいることがすぐにわかります-クローズドvs. BSD( BSDは コードをクローズドソースにするために... = OSXを参照)および [〜#〜] gpl [〜#〜] これにより、LinuxとGNUは、コピーレフトの世界で自分自身を補完することができます。これは、Linus Torvaldsによって最初に開発されたLinuxカーネルの古典的なマップです。カーネルは、Unixライクなオペレーティングシステムに「ある」可能性があります。

enter image description here

これは、 " kernel "設計タイプはUNIX標準を作成するものではなく、UNIXのようなOSを定義するものではないという考えを示唆しています。これは、多くのUNIXライクなOSがモノリシックカーネルまたはマイクロカーネルのいずれかを備えている可能性があるという事実によって証明されます。モノリシックはUNIXの古典的な設計タイプでした。実際、純粋なUNIX内でも、HPUXは一体型のカーネルを備えていますが、AIXはマイクロカーネルを使用しています。この debate 設計についてはパフォーマンスに関するものであり、Unixの祖先やアイデンティティとは関係ありません。一方、ソフトウェアにサービスを提供したり、UNIX/Unixのようなオペレーティングシステムでファイルシステムを処理したりするには、従来の概念的なアプローチがあります。

このような考慮事項は、質問のOS部分にコンテキストを追加すると考えています。

12
user44370