オペレーティングシステムがどのように機能するかを知りたいです。要するに:
- 基本コンポーネントは基本コンポーネントです。
- これらのコンポーネントが連携する方法
- UNIXをUNIXにする理由
- Windowsなど他のオペレーティングシステムとの違い
答え1
UNIXシステムは、いくつかの部分、つまり私が呼ぶ「階層」で構成されています。
システムを起動するには、ブートローダと呼ばれるプログラムがハードディスクパーティションの最初のセクタに配置されます。これは、システムによって開始された次のオペレーティングシステムカーネルを見つけてロードします。
階層化
コア。これはブートローダによって開始される中央プログラムです。これは、システムへの基本的なハードウェアインタラクション(ディスク、メモリ、ビデオ、サウンド)を提供し、プログラムを起動できる仮想環境を提供します。カーネルはまた、ハードウェアデバイス間のすべての微妙な違いを処理するすべてのドライバを提供します。外部の世界(上位層)では、各タイプのデバイスがまったく同じように動作するように見えます。その結果、このベースでプログラムを構築できます。
バックエンドサブシステム。ただ規則的な日常なので邪魔することはありません。リモートログインなどのタスクを処理し、中央メッセージバスを提供し、ハードウェア/ネットワークイベントに基づいてタスクを実行します。たとえば、Bluetooth検索、Wi-Fi管理などがあります。すべてのネットワークサービス(ファイルサーバー、プリントサーバー、Webサーバー)もこのレベルにあります。 UNIXシステムでは、これは一般的なプログラムです。
コマンドラインツール。これは、テキストの編集、ファイルのダウンロード、システム管理などのタスクを実行するために開始できる小さなプログラムです。これで、システム管理者がUNIXシステムを使用する準備が整いました。 Windowsでは、このレイヤーは事実上もはや存在しません。
GUI。これらも単なるプログラムであり、唯一の違いは、テキストを書くのではなく、画面にウィンドウを描くことです。これにより、一般ユーザーがシステムを使いやすくなります。
すべてのサービスまたは活動は以下から上に行われます。
図書館 - 公共プラットフォーム
プログラムは、ウィンドウの表示、画面へのコンテンツの描画、ファイルのダウンロードなど、さまざまな一般的なタスクを実行します。これらは複数のプログラムで同じであるため、コードは別の「ライブラリ」ファイル(.so
ファイル - 共有オブジェクトを意味)に配置されます。このライブラリは、すべてのプログラム間で共有できます。
想像できるものすべてのためのライブラリがあります。 PNGファイルを読み書きする方法があります。 JPEGファイル用、XML読み取り用、暗号化用、ビデオ再生用などがあります。
Linuxでは、アプリケーション開発者のための共通ライブラリはQtとGtkです。これらのライブラリは、特定の要件を満たすために内部的に低レベルのライブラリを使用し、アプリケーション開発者がアプリケーションをより迅速に作成できるように、一貫した簡潔な方法でその機能を公開します。
ライブラリは、プログラマーがオペレーティングシステム用のエンドユーザーアプリケーションを構築できるアプリケーションプラットフォームを提供します。システムが提供する高品質ライブラリが多いほど、プログラマーが美しいプログラムを書くために書く必要があるコードが少なくなります。
一部のライブラリはさまざまなオペレーティングシステム(Qtなど)で利用でき、一部のライブラリは実際には特定のオペレーティングシステムに関連付けられています。これにより、プログラムはそのプラットフォームでのみ実行されるように制限されます。
プロセス間通信
オペレーティングシステムの3番目の角は、プログラムが互いに通信する方法です。これはプロセス間通信(IPC)メカニズムです。共有メモリの断片やデータを交換するための2つのプログラム間の小さなチャネルなど、さまざまな形で存在します。各プログラムがメッセージを公開して応答を受信できる中央メッセージバスもあります。これは、どのプログラムが応答できるかわからないグローバル通信に使用されます。
ライブラリからオペレーティングシステムまで
プログラマは、ライブラリ、IPC、およびカーネルを使用して、システムサービス、ユーザー管理、構成、管理、オフィス、エンターテイメントなどのさまざまなアプリケーションを構築できます。これにより、初心者ユーザーが「オペレーティングシステム」として認識できる完全なスイートが誕生します。 」。
UNIX / Linuxシステムでは、すべてのサービスは単なるプログラムです。すべてのシステム管理ツールは単なるプログラムです。彼らはすべて自分の役割を持っており、一緒に縛ることができます。いくつかの主要な手順をまとめました。http://codingdomain.com/linux/sysadmin/
Windowsと区別できる部分
UNIXは、デフォルトでプログラム、ファイル、および制限された権限で構成されるシステムです。多くの複雑さを避け、簡単に見えながら強力なシステムを作成できます。
特に、これらの原則はUNIX / Linuxシステムで見つけることができます。
情報にアクセスする統一された方法があります。 (「すべては単なるファイルです」)。ファイル、ネットワークソケット、IPCチャネル、カーネルパラメータ、およびブロックデバイスをファイルとして開くことができます。したがって、仮想ファイルシステムは/ dev、/ sys、および/ procに表示されます。必要なAPIは
open
、read
およびのみですclose
。基本システムは透明です。すべてのプログラムは同じ規則に従って動作します。 Windowsとは異なり、「コンソールプログラム」、「GUIプログラム」、または「バックグラウンドサービス」の間に人工的な区別はありません。それらはすべて偶然に別のことをするプログラムです。また、すべて同じ方法で観察、分析、およびデバッグできます。
設定を読み、編集したり、コメントでコメントできます。通常はINIスタイルの形式を使用しますが、アプリケーションのニーズに応じてカスタム形式を使用できます。これは単純なファイルなので、標準ツールを使用して他のシステム、アーカイブ、またはバックアップにコピーできます。
「一度にすべての作業を行う」という大規模なアプリケーションはありません。マントラは「何かをしなさい、よくしなさい」である。コマンドラインツールは互いに接続でき、強力です。個々のサービス(SMTP、IMAP、POP、ログインなど)は別々のサブルーチンであるため、複雑に絡み合ったコードやセキュリティの問題を回避できます。複雑なデスクトップ環境では、重い作業を個々のプログラムに委任します。
fork()
。既存のプログラムを複製して新しいプログラムを起動します。 Cloneはすべてのもの(ファイルハンドルなど)を設定し、オプションで自分自身を新しいプログラムコードに置き換えます。これにより、新しいプログラム、共有メモリ、またはIPCメカニズム設定に同じセキュリティ設定と制限を非常に簡単に適用できます。プロセスを開始するためのコストも非常に低いです。ファイルシステムは、他のディスクパーティションとネットワーク共有をマウントできるツリーです。これは再びデータにアクセスする一般的な方法です。共通システムの場所(たとえば、
/usr
ネットワーク共有で簡単にマウント可能)システムは低ユーザー権限のために構築されています。ログインすると、各ユーザー(ルートを除く)は独自のリソースに制限され、アプリケーションとファイルのみを実行できます。ネットワークサービスはできるだけ早く権限を減らします。より多くの権限を取得したり、他の人に自分の代わりに権限のあるタスクを実行するように求める明確な方法があります。他のすべての呼び出しにはプログラム制限が適用されます。
すべてのプログラムは、ユーザーのホームディレクトリの隠しファイル/フォルダに設定を保存します。どのプログラムもグローバル設定ファイルに書き込もうとしません。
秘密のメカニズムや特定の1対1のメカニズムよりも一般的に説明されている通信メカニズムを好みます。他のベンダーとソフトウェア開発者は、簡単に接続、交換、および疎結合を維持するために同じ仕様に従うことをお勧めします。
答え2
UNIXは、40年(コンピュータサイエンスではほぼ永遠)にわたって検証され、成功した設計に基づいて構築された強力なオペレーティングシステムです。コア技術は、C言語と多数の小さなプログラムであるUNIXコマンドに基づいています。 McIlroyは、基本的なアイデアを次のようにまとめました。
1つのことをうまく行うプログラムを書いてください。一緒に動作するプログラムを書いてください。これは一般的なインターフェースなので、テキストストリームを処理するプログラムを作成します。
UNIXの哲学の詳細は、ESRaymond「The Art of UNIXプログラミング」にあります。
答え3
ここに良い答えがあります。しかし、1つの見落とされた点は、* nixが他のオペレーティングシステム、特にMicrosoft Windowsとどのように異なるかです。
上記で取り上げた「何かをしなさい、うまくやってください」という基本的な概念は、*nixオペレーティングシステムにとって非常に重要であり、時々見過ごされることもあります。しかし、Linuxをそれほど柔軟で強力にするのは、まさにこの設計哲学です。
たとえば、MS Windowsのグラフィカルユーザーインターフェイス(GUI)はオペレーティングシステムと絡み合っています。 GUIがなければ、MSオペレーティングシステムをインストールすることはほとんど不可能です。 Linuxでは、グラフィックコンポーネントがまったくなくてもサーバーや組み込みシステムを簡単に起動できます。コマンドラインから完全に駆動でき、まだ完全な機能を備えたサーバーです。
また、Linuxのモジュラー設計により、システム管理者はオペレーティングシステムを再起動せずにサービスを終了し、サービスをアップグレードし、サービスを復元できます。実際、カーネル自体が変更またはアップグレードされている場合にのみ、Linuxオペレーティングシステムを再起動するだけです。
たとえば、Linuxに新しいWindows管理者(gnome、kdeなど)をインストールできますが、現在システムにログインしているユーザーはこれをまったく知りません。
Windowsでは、システムに最も簡単な変更を加えるには再起動が必要なことがよくありますが、これは実際の技術要件よりもセキュリティの問題に近いものです。私はこれがMicrosoftオペレーティングシステムの根本的な欠陥の1つだと思います。 Linuxでは、ユーザーにほとんどまたはまったく影響を与えずに多くのドライバモジュールをアップグレードできます。 Windows で新しいアプリケーションをインストールする場合は、デバイス全体を再起動する必要があります。
このモジュラー設計はまた、Linuxに優れた柔軟性を提供します。すべてのLinuxシステムは、できるだけ少ないリソースオーバーヘッドで実行する必要がある特定のタスクに合わせてカスタマイズできます。 Windowsでは、単純なHTTPサーバーを実行するためにGUIインターフェースを閉じることはできません。 Windowsはメモリスペースを想定しているため、ハードウェアがそれ以下に下げることができない障壁を作成します。これがLinuxが多くのモバイルおよび組み込みアプリケーションでオペレーティングシステムとして選択される主な理由です。
続くかもしれませんが、この例は、なぜLinuxが人気が高まったのか、そしてLinuxが他のオペレーティングシステムとどのように異なるのかを説明するのに役立つことを願っています。
答え4
私は読書をお勧めしますUnix環境の高度なプログラミング 2eSUS(Single Unix Standard)APIとPOSIXの詳細をご覧ください。これにより、Unixが何で構成されているか、コンポーネントがどのように機能し、どのように連携するかを理解できます。
しかし、この本はCが多い本であり、リファレンスマニュアルに近いものです。不眠症に苦しんでいる場合は、寝るようにしてください。他にもUnix Cプログラマなら必需品です。