動機
Linuxの勉強する前にOSについてざっくりと分かっておきたい
参考:
※ 最新(2024年)版のDevOps RoadmapにはOSのコンセプトについては記載ないです...
忙しい人向け
いったんざっくりと。MECEを満たせてはなさそうですが許してください。
機能 | 説明 |
---|---|
ジョブ管理 | ユーザーの実行したタスクやプロセスを監視し、スケジューリングや優先順位付けなどを行う |
プロセス管理 | 実行中のプロセスを管理し、CPUの割り当てやメモリの管理を行い、スレッドを実現して並行性をサポートする |
ハードウェア抽象化 | ハードウェアを抽象化してユーザーに仕様の違いを意識させない |
入出力管理 | デバイスとのやり取りを管理し、ユーザーの入力やプログラムの出力を処理する |
メモリ(実記憶)管理 | 物理メモリやディスクなどのストレージを管理し、プログラムが必要とするメモリ領域を確保・解放する |
仮想化(仮想記憶管理) | 仮想メモリを提供し、物理メモリとの間でデータの入れ替えを行い、効率的なメモリ割り当てを実現する |
ファイル管理 | ファイルの作成、読み書き、削除などの操作を管理し、ディレクトリ構造やアクセス制御を提供する |
セキュリティ | システムの安全性を確保し、ユーザーの権限管理やデータの保護などを行う |
ネットワーキング | ネットワーク接続の管理を行い、データの送受信や通信プロトコルの処理を担当する |
起動管理 | システムの起動を制御し、ブートローダや初期化プロセスなどを管理する |
サービス管理 | バックグラウンドで実行されるサービスやデーモンプロセスの管理を行い、システムの動作を裏で支える |
ユーザーインターフェース | ユーザーとシステムの対話を可能にするGUIやCLIを提供する |
障害管理 | エラーのハンドリングを行い、システムの安定性と可用性を確保する |
運用管理 | OSが提供する多くの機能を管理し、システムの日常的な運用を支える |
OSの機能を支える技術
機能 | 説明 |
---|---|
ソケット | 通信のためのインターフェースとして機能し、アプリケーションとネットワーク間の通信を可能にする |
POSIX | OSの機能を横断的にサポートするための標準的な規格であり、互換性や移植性を向上させるために標準化されたAPIを提供する |
IPC | 異なるプロセス間でのデータの共有と通信を可能にすることで、プロセス管理を実現する |
前提
- カーネル / シェルなどのOSの構造には特に触れてないです
- クライアントとサーバーは分けてないです(悪手?)
- 雑にまとめてますが許してください
ジョブ管理
【 概要 】
実行するプログラムやタスクの集合(これがつまりジョブ)を管理し、リソースの割り当てやスケジュールの決定を行う。複数のプログラムやタスクが同時に実行される場合、ジョブ管理はそれらを適切に実行するための管理機能を提供する。
【 たとえば 】
-
マスタスケジューラ
:- 実行可能なジョブの中からどのジョブを選択するかを決定する
- 一般的に、優先度や実行可能性、リソースの利用率などの観点から、最も適したジョブを選択する
-
ジョブスケジューラ
:- マスタスケジューラによって選択されたジョブを待ち行列に追加する
- ジョブスケジューラは下記のプログラムから構成されている
-
リーダ
:ジョブの読込 -
イニシエータ
:ジョブ開始 -
ターミネータ
:ジョブ終了 -
ライタ
:ジョブの出力
-
【 参考 】
プロセス(タスク)管理
【 概要 】
「ジョブ管理」が実行する各プログラムやタスクを監視・制御し、必要なリソースを割り当てながら実行を管理する。具体的には、実行中のプロセスのスケジューリングや優先順位付け、プロセス間の通信と同期、リソースの管理などを担当する。
これにより、複数のプログラムやタスクが順次・並行して実行され、リソースの効率的な利用とシステム全体のパフォーマンスの最適化が実現される。
【 補足 】
-
ジョブ管理
:複数のタスクやプログラムをまとめたグループ(ジョブ)を管理し、全体の効率性を最適化する -
プロセス管理
:実際に実行中のプログラムやタスク(プロセス)を個別に管理し、リソースの割り当てや協調動作を促進する
重要な違いは、ジョブ管理は複数のタスクの集合を管理するのに対して、プロセス管理は個々のタスク(プロセス)を管理する点。ジョブ管理はより大きな視点での管理を行い、プロセス(タスク)管理はより具体的なタスクの実行と管理を担当する。
【 参考 】
ハードウェア抽象化
【 概要 】
OSがデバイスを抽象化することで、ハードウェア環境の違いをユーザーに感じさせないための機能。異なるハードウェアの仕様をOSが受け止めることで、ユーザーはハードウェアの細かな違いを意識せずに扱うことができる。
【 たとえば 】
異なる仕様のCPUやグラフィックスチップを搭載しているパソコンや、さまざまな種類のプリンタやスキャナ、CD/DVDドライブなどに対して、同じ手順で操作できる
【 参考 】
入出力管理
【 概要 】
I/O管理。コンピュータの外部デバイス(キーボード、マウス、ディスプレイ、ハードディスクドライブなど)とのデータ・信号の送受信を制御するための機能。
【 たとえば 】
-
デバイスの制御
:- デバイスドライバとのインタフェースを通じて、デバイス(ハードウェアデバイスやネットワークデバイスなど)へのアクセスや操作を制御し、データの送受信やデバイスの状態管理を行う
-
データバッファリング
:- データの入力や出力には時間がかかることがあるため、データを一時的にバッファリングして、効率的なデータ転送を実現する
-
デバイスドライバ管理
:- 各デバイスに対応したデバイスドライバ(特定のデバイスとの通信を制御するソフトウェアコンポーネント)を管理し、デバイスドライバのロードや管理、デバイスの設定やリソースの割り当てなどを行う
-
エラーハンドリング
:- デバイスの障害や通信エラーなどが発生した場合、エラーメッセージの表示、リトライ、エラー処理の実行などを行う
-
キューイング
:- 多くの場合、複数のプログラムやデバイスが同時にデータの入出力を行うため、I/O要求を順番に処理するためにキュー(待ち行列)を管理し、データの管理や優先順位付けを行う
【 参考 】
メモリ/ストレージ(実記憶)管理
【 前提 】
プログラムを実行するためには、コードやデータが主記憶上に存在している必要がある
-
プログラム記憶方式
:プログラムを実行する際にプログラムの全体を主記憶(物理メモリ)に読み込む -
仮想記憶方式
:プログラムの一部だけを主記憶に読み込み、必要に応じて補助記憶(通常はハードディスク)との間でデータの入れ替え(スワップ)を行って実行する
【 概要 】
実記憶管理は、物理メモリ(主記憶)の管理と制御を担当する。
- CPUがプログラムを実行するとき:
- HDD・SSDに格納されているプログラムをメモリに読み込む(主記憶上に配置する)
- 実行が終われば主記憶上から消去される(必ず、というわけではない)
- 実行してないとき:
- 補助記憶に保存されている
OSの実記憶管理は、メモリの割り当てや解放のトラッキング、メモリの断片化の管理などを行い、効率的なメモリ使用を実現する。
【 参考 】
仮想化(仮想記憶管理)
【 概要 】
仮想記憶管理は物理メモリと補助記憶(仮想メモリ)の管理と制御を担当する。
メモリ容量が不足するとCPUはプログラムの実行ができなくなるので、プログラムの実行に必要な部分をメモリ内に保持し、使っていない部分は補助記憶装置(ハードディスクなど)に退避させる。
上記のような手法を使うことで、プログラムが必要とするメモリ領域が物理メモリよりも大きい場合でも、必要な部分を物理メモリに保持しながら残りを補助記憶装置に格納することができる。
【 参考 】
ファイル管理・ファイルシステム
【 概要 】
ファイルやディレクトリの構造を管理し、データをディスクに保存・読み取るための仕組み。ファイルシステムはディスク上にデータを格納し、必要な時にはそれを読み出す役割を果たす。同時にファイルの操作を行うためのインターフェースも提供する。
ファイルやディレクトリの構造を管理し、データをディスクに書き込み、読み出す役割を果たす。また、ファイルを操作するためのインターフェースを提供することで、ユーザーはファイルを作成・読み取り・書き込み・削除ができる。
【 たとえば 】
-
ファイルの作成・削除
:- 新しいファイルを作成(ファイル名や保存場所を指定を含む)
- 不要になったファイルを削除
-
ディレクトリ管理
:- ディレクトリとはファイルを論理的にグループ化するための仕組み
- ディレクトリに保存することで、関連するファイルを見つけやすくなる
- また、ディレクトリの作成・削除・名前変更・移動などの操作を提供する
-
ファイル属性管理
:- ファイルに関連するメタデータ(属性)を管理する
- メタデータにはファイルの所有者・作成日時・更新日時・アクセス権限などが含まれる
- これにより、ファイルの詳細情報を確認や必要なアクセス権限の設定ができるようになる
-
ファイルのアクセス制御
:- ファイルへのアクセス制御の仕組みを提供し、ファイル共有や保護ができるようになる
- 一般的なアクセス制御方法は、ユーザーごとのアクセス権限の設定やファイルの読み取り専用設定など
-
圧縮機能
:- ファイルやディレクトリを圧縮して、ストレージの使用量を削減したり、データの転送時間を短縮したりするための機能
- 一般的なOSやアプリケーションには、ファイルの圧縮と解凍を行うためのツールや機能が備わっていることがある
【 参考 】
ちなみにEverythingはメタデータでファイルを高速検索しているらしい
セキュリティ
【概要】
シンプルに、データや個人情報を不正なアクセスから守ってくれる機能
【 たとえば 】
-
ユーザーアカウントと権限管理
:- ユーザーアカウントの管理の提供とユーザーごとの適切な権限付与
-
ファイルアクセス制御
:- ファイルの読み取り・書き込み・実行などのアクセス権限を個別に設定でき、機密性やデータの保護が可能
- ※ ファイルの暗号化についてはアプリケーションが提供する場合も多いのでOSの機能かというと微妙なところ
-
セキュリティポリシー
:- 組織のセキュリティ方針を基にセキュリティポリシーを作成できる
- 例えばパスワードの要件・ログイン制約・セキュリティ監査の有効化など
-
ウイルス対策ソフトウェアの統合
:- 一部のOSは、ウイルス対策ソフトウェアを統合して提供している
- OSレベルでのウイルス検出やマルウェアの防御によるセキュリティリスクの最小化
-
パッチ管理とアップデート
:- セキュリティパッチやアップデートによって既知の脆弱性やセキュリティホールを修正する
【 参考 】
ネットワーキング
【概要】
コンピュータが他のコンピュータやネットワークと通信するための機能。
【 たとえば 】
-
ハードウェアとソフトウェアの接続
:- ハードウェア(ルータ・スイッチ・アクセスポイント・ケーブルなど)とソフトウェアを使用してコンピュータネットワークを構築する
-
プロトコルの管理
:- 通信に使用するプロトコルを管理する(IPアドレスの割り当てやデータパケットの転送など)
※ ただし、NOS(ネットワークオペレーティングシステム)とは異なり、一般的なOSのネットワーキング機能は基本的なものであり、NOSのように高度なネットワーク管理やセキュリティ機能を提供するわけではない
※ PCはOS、サーバーなんかがNOS、という認識でよさげ
-
OS
:- 基本的なネットワーキング機能に加えてコンピュータシステムの全般的な管理を行う
-
NOS
:- 高度なネットワーク関連機能を提供する
- ディレクトリサービス
- ネットワーク管理
- ネットワーク監視
- ネットワークポリシー
- ユーザーグループ管理
- ネットワークセキュリティなど
- 高度なネットワーク関連機能を提供する
【 参考 】
起動(ブートプロセス)管理
【概要】
OSが起動時に実行するプログラムや処理の管理を行う機能のこと。起動管理によってOSは正常に起動し、ユーザーが必要な処理やアプリケーションを実行できる状態になる。
【 たとえば 】
-
ブートストラップ(ブートローダー)
:- システムの電源が入った直後に実行されるプログラムで、OSの起動を開始する
- ※ 順番:電源ON -> BIOSによるデバイス初期化 -> ブートデバイスの決定 -> ブートストラップローダのロード -> ブートローダの実行 -> OS起動
- ブートストラップは基本的なハードウェアの初期化を行い、次にOSのカーネルをロードする
- システムの電源が入った直後に実行されるプログラムで、OSの起動を開始する
-
スタートアッププログラム
:- OSの起動が完了した後、ユーザーのセッションが開始される前に自動的に実行される
- ユーザーの利便性やパフォーマンス向上のための処理を実行する
- ユーザー環境の設定
- アプリケーションの自動起動
- キャッシュの事前読み込みなど
-
サービスやデーモンの起動
:- OSはさまざまなサービスやデーモン(バックグラウンドで実行されるプログラム)を起動する(ことができる?)
-
inetd
:インターネットサービスの起動と管理 -
tcpd
:セキュリティポリシーに基づいた外部からのアクセス制御 -
httpd
:ウェブサーバーの提供 - などたくさん(
ftpd
・smtpd
・imapd
・dhcpd
・smbd
・sshd
...)
-
- ちなみにサービス管理の
systemd
はsystem daemon
- OSはさまざまなサービスやデーモン(バックグラウンドで実行されるプログラム)を起動する(ことができる?)
-
オートスタートプログラム
:- 特定のアプリケーションが自動的に起動するように設定されている場合、それらを起動する
- これによりユーザーが操作をせずに必要なアプリケーションを自動的に開始できる
-
システムリソースの初期化
:- つまり前回使用までの実行環境やメモリの状態に依存したゴミデータの初期化をする
- メモリ上の特定の場所が以前の操作や関数の使用によって割り当てられ、その後の変数の初期化操作で消去されることなく残っていることがある
- このため初期化されていない変数はメモリ上の不定な値(ゴミデータ)を保持することになる
- ゴミデータを保持したままその変数を参照したり演算に使用したりすると、予期しない結果やバグが発生する可能性があるよね
- つまり前回使用までの実行環境やメモリの状態に依存したゴミデータの初期化をする
【 参考 】
- ブート ストラップ - パソコンの起動 by BIOS > 2.OS 起動までの概略
- IT用語辞典 デーモン 【daemon】 デーモンプロセス
- IT用語辞典 inetd 【internet daemon】
- 【Windows 10】スタートアップで起動時に実行されるアプリを追加・削除する
- OSが起動する以前のスタートアップルーチン
サービス管理
【概要】
簡単に言えば、バックグラウンドで実行されるプログラムや処理を管理する役割。
サービス(daemaon)はユーザーが直接操作するのではなく、OSが起動・実行するプログラムのことで、ファイルサーバ、Webサーバ、データベースサーバ、メールサーバなど、様々なタスクを実行することができる。
サービス管理の目的は、これらのサービスを適切に起動・停止させ、リソースの割り当てや優先順位の管理を行うこと(サービスの監視やエラー処理、自動再起動などの機能も提供する)
【 たとえば 】
-
サービス起動 / 停止の管理
:- 特定のイベントや依存関係に基づいてサービスの起動や停止を制御する
- サービスの開始、実行でタスクとリソースの最適な利用を実現する
-
リソース管理
:- 特権レベルやアクセス制御によって、プロセスやサービスが利用できるリソースの範囲や方法を制御する
- サービス管理はサービスに必要なリソース(メモリ、プロセッサ時間、ネットワーク帯域など)を割り当てる
-
サービス監視とエラー処理
:- 実行中のサービスを監視し、正常に動作しているかどうかを確認する
- 異常が検出された場合は適切なエラーハンドリングや復旧処理を行う
-
依存関係管理
:- サービスは、他のサービスに依存する場合がある(他サービスに依存していて停止できないなど)
- サービス管理では依存関係を管理し、必要なサービスが他のサービスに正しく連携して動作するようにハンドリングする
【 参考 】
ユーザーインターフェース
【概要】
ユーザーとコンピュータの間の相互作用を可能にする手段や方法を提供する役割を果たす。(OSとユーザーの仲介役)ユーザーインターフェースは、ユーザーがコンピュータの機能やアプリケーションを操作し、情報やコマンドの入力を行うための環境を提供する。
【 たとえば 】
-
グラフィカルユーザーインターフェース(GUI)
:- ビジュアルな要素(ウィンドウ、アイコン、ボタンなど)を使用して情報を表示し、マウスやキーボードを介してユーザーとの対話を実現する
- 一般的にウィンドウシステムやデスクトップ環境(Windows、macOS、Linuxのディスプレイマネージャなど)がGUIの一部になる
-
コマンドラインインターフェース(CLI)
:- テキストベースのインターフェースで、コマンドを入力することでコンピュータに対して操作やタスクの実行を指示できる
- シェルやターミナルなどのプログラムを通じて提供ことが多い
-
タッチスクリーンインターフェース
:- ユーザーが指やタッチペンなどを使用して画面に直接操作を行う
- モバイルデバイスやタブレット、一部のデスクトップコンピュータなどで使用される
【 参考 】
障害管理
OSの障害管理の一般的な情報あまり探せませんでした...
【概要】
障害管理は、システムのハードウェア障害やソフトウェア障害に対処する機能です。システムの安全性および可用性を保つのが主な目的です。
オペレータやユーザは、障害管理機能を用いて、障害の影響範囲限定、現象把握、切り分け、原因究明、修正、およびシステムの復旧をします。
引用元:障害管理
【 たとえば 】
障害の検出、自動訂正、障害の記録、システムの再構成、リスタートなどが含まれます。
-
障害の検出と記録
:- 以下を検出する
- ハードウェアの異常:メモリエラーやディスク障害など
- ソフトウェアのエラー:プログラムのクラッシュ、アプリケーションの停止など
- これには、監視ツールやエラーログの分析などが使われる
- 以下を検出する
-
自動修正
:- 障害が検出されるとシステムは可能な限り自動的に障害を修正しようと試みる
- 例えば、メモリエラーを自動的に検出し、エラーを特定のメモリセグメントに限定して再起動するなど
- ソフトウェアレベルのエラーを自動的に修正するために例外処理機能やリカバリメカニズムを使用することもある
- 障害が検出されるとシステムは可能な限り自動的に障害を修正しようと試みる
-
システムの再構成
:- 障害を自動的に解決できない場合はシステムの再構成が必要になることがある
- 障害を解決するために必要な手順を実行し、システム全体の安定性と可用性を維持するようにする
-
再起動
:- 重大な障害が発生した場合、システム全体を再起動することがある
- 例えばシステムの異常終了後の再起動、障害が影響を及ぼすリソースのリセット、データの復元など
【参考 】
- 2.6.2. ハードウェア監視により検出できる障害
- カーネルのクラッシュ情報を取得する
- [Windows 11] ハードディスクやSSDのエラーをチェックする方法を教えてください。
- 【自動修復でPCを修復できませんでした】ループする原因や対処法を解説
- PC のリカバリ機能のしくみ
- システム再構成
- 解決:「問題が発生したため、PCを再起動する必要があります」の原因と対処法
運用管理
【 概要 】
オペレーティングシステムの基本的な昨日は、個々のプログラムの運用(実行)を管理することです。その他プログラム群の全体の運用管理をする機能もあります。それによってユーザが全体の運用をする操作が用意かつ安全になります。また、オプションも選択できて、ユーザ間の違いに柔軟に対応します。
つまり「OSにはいろんな機能があるけど、もちろんそれら全体を管理している機能もあるよ」という認識。
OSの機能には上記まででまとめてきたように、
- プロセスやスレッドの管理
- メモリやリソースの割り当て
- ファイルやデータの管理
- ユーザー認証やセキュリティポリシーの設定
など、多くの基本的な機能を提供しているが、これらの各プログラムが適切に実行され、システム全体が安定して動作するようにしているのが運用管理です、という話かと思う。
【 たとえば 】
システム指導処理は、システムの開始時にはオペレーティングシステムのさまざまな初期化のプログラム群を一連の手続きにまとめて、ユーザの操作を容易にします。また日常のシステムの指導のときには、基盤となるプログラム群をまとめて実行開始します。
システム終了処理は、電源をオフにする前に、基盤として実行されていたプログラム群をまとめて終了させます。
運用の面倒を見るオペレータのためには、システムと更新する機能、システムの状態を監視するためのシステムモニタリング機能、および定形操作や期日指定の処理を容易にするスケジューリング機能があります。
その他に、ユーザ管理、セキュリティ制御、および障害管理の機能があります。
【 参考 】
OSを支える機能
Linuxやるなら(RoadMap的に)いったん覚えておいた方がよさげなやつ、概要だけ
ソケット
【概要】
- ネットワーキング機能 を支えるためのOSで提供される機能の一つであり、アプリケーションとネットワーク間の通信を可能にするために使用される
- 通信のためのインターフェースとして機能し、プログラミング言語やネットワークプロトコルとの間の抽象化レイヤーを提供する(ソケットAPIを通じてアプリケーションがソケットにアクセスし、ネットワークデータの送受信や接続の管理ができる)
- さまざまな通信プロトコル(TCP、UDP、UNIXドメインソケットなど)をサポートしているので様々なWebアプリケーション開発に利用される
- Webブラウザ
- メールクライアント
- チャットアプリケーション...
- ネットワークを介したデータ通信が必要なアプリケーションはたいていソケットを使用している
【 参考 】
POSIX(Portable Operating System Interface)の基礎
【概要】
- OSの機能を横断的にサポートするための標準的な規格のこと
- UNIX系のOS(LinuxやmacOSなど)の互換性や移植性を向上させるために設計されている
- 異なるベンダーやアーキテクチャ間での互換性を確保するための標準化されたAPIを提供する
- ファイル操作と管理
- プロセス制御と管理
- スレッドサポート
- 共有メモリ
- ネットワーキング
- などなど
- POSIXの目的は「異なるOS間でのアプリケーションの移植性を向上させること」
- つまり、統一されたインターフェースを提供することで異なるUNIX系OS上での互換性を向上させる役割を果たしている
【 参考 】
- IT用語辞典 POSIX 【Portable Operating System Interface】
- Linux豆知識 072 POSIX
- POSIX準拠とは本当はどういうことなのか?「POSIXで規定されたものだけを使う」ではありません
IPC(Inter-Process Communication)
【概要】
- OSにおける、プロセス間の通信を実現するための技術や仕組みの総称のこと
- つまり プロセス管理 と密接な関係がある
- 複数のプロセスが同時に実行される場合、IPCを使用することでプロセス間で以下のようなことができる
- データ共有
- プロセス間通信
- 同期・通信制御
- 異なるプロセス間でのデータの共有と通信を可能にすることで、効率的なタスクの分散処理や相互作用を実現できる
- ※ IPC自体はOSの機能ではなく、あくまでプロセス間の通信を行うための手段の認識
【 参考 】
おわりに
OSが提供する機能をどういう単位で分けるかで説明がちょっと変わるよなーと思いました。
各機能の細かい部分はこれから深めていくつもり。