オペレーティングシステム
オペレーティングシステムは、コンピュータのハードウェアを管理し、アプリケーションにサービスを提供するソフトウェア層であり、プロセッサ、メモリ、ストレージ、およびデバイスをプログラム間で多重化し、保護と抽象化を強制します。
Definition
オペレーティングシステムは、ハードウェアリソースを管理し、プロセス、ファイル、アドレス空間などの抽象化を提供し、分離と公平な共有を強制しながら、アプリケーションプログラムと基盤となるマシンとの間の仲介を行うシステムソフトウェアです。
Scope
この分野は、オペレーティングシステムの原理と構造、すなわちプロセスとスレッド、CPUスケジューリング、メモリ管理と仮想メモリ、ファイルシステム、並行性と同期、デバイスとI/O管理、および保護を扱います。OSをハードウェアとアプリケーション間のリソースマネージャーおよび抽象化層として捉えます。メモリ階層とキャッシュ(仮想メモリを管理するため)、ストレージとI/Oシステム(デバイスと永続性を管理するため)と隣接しますが、分散システムと並列コンピューティングで扱われる、マシン間の分散協調は除外されます。
Sub-topics
Core questions
- OSは、共有ハードウェア上で独立したプロセスとスレッドの抽象化をどのように作成するのでしょうか?
- スケジューラは、どの準備完了タスクを実行するかを、どのような目的で決定するのでしょうか?
- OSはメモリをどのように管理し、仮想メモリとページングをどのように実装するのでしょうか?
- ファイルシステムは、ストレージデバイス上の永続データをどのように信頼性高く整理するのでしょうか?
- OSは、保護、分離、およびリソースへの制御されたアクセスをどのように提供するのでしょうか?
Key concepts
- カーネルモードとユーザーモード
- プロセスとスレッド
- コンテキストスイッチ
- CPUスケジューリング
- 仮想メモリとページング
- ファイルシステム
- 並行性と同期
- デッドロック
- システムコール
- 保護と分離
Key theories
- プロセスとアドレス空間の抽象化
- OSはCPUとメモリを仮想化し、各プログラムがまるでマシンを独占しているかのように実行されるようにします。プロセスはアドレス空間、実行コンテキスト、およびリソースをバンドルし、カーネルはプロセス間を切り替え、互いに保護します。
- ワーキングセットメモリ管理
- Denningのワーキングセットモデルは、プロセスが一定の時間枠でアクティブに使用するページセットを特徴付けます。各プロセスのワーキングセットを常駐させることで、スラッシングを回避し、仮想メモリシステムにおけるページングとアドミッションの決定を導きます。
Mechanisms
カーネルは特権モードで動作し、ハードウェアへのアクセスを仲介します。実行中のプログラムをプロセスおよびスレッドとして表現し、スケジューラによって駆動されるコンテキストスイッチを介してそれらを切り替えます。メモリはページングと仮想アドレス変換によって管理され、永続データはファイルシステムによって整理され、共有状態はロック、セマフォ、モニターなどの同期プリミティブによって調整されます。システムコールは、アプリケーションにカーネルサービスへの制御されたエントリを提供します。
Clinical relevance
オペレーティングシステムは、サーバーやデスクトップから電話や組み込みデバイスに至るまで、実質的にすべてのコンピューティングの基盤となっています。その設計は、パフォーマンス、信頼性、セキュリティを決定します。スケジューリングは応答性に影響を与え、メモリ管理はスループットに影響を与え、分離メカニズムはシステムセキュリティと仮想化の基盤となります。LinuxやWindowsなどの広く展開されているカーネルは、これらの原則を地球規模で具現化しています。
History
オペレーティングシステムは、1950年代のバッチモニターから、1960年代のCTSSやMulticsなどのマルチプログラミングおよびタイムシェアリングシステムへと進化しました。1970年頃にThompsonとRitchieによって作成されたUNIXは、現代のシステムにも見られる永続的な抽象化を確立しました。Dijkstraのセマフォと並行性に関する研究、およびDenningのワーキングセットモデルは理論的基盤を築き、パーソナル、モバイル、仮想化システムは後の数十年を通じてこの分野を拡大しました。
Debates
- モノリシックカーネルとマイクロカーネルの設計
- モノリシックカーネルは、パフォーマンスのためにほとんどのサービスを特権モードで実行するのに対し、マイクロカーネルはモジュール性と信頼性のためにサービスをユーザー空間に移動させるという長年の議論があります。現代のシステムでは、両方のアプローチを組み合わせています。
Key figures
- Edsger W. Dijkstra
- Peter J. Denning
- Per Brinch Hansen
- Ken Thompson
- Dennis Ritchie
- Abraham Silberschatz
- Andrew S. Tanenbaum
Related topics
Seminal works
- silberschatz2018
- tanenbaum2014os
- denning1968
Frequently asked questions
- プロセスとスレッドの違いは何ですか?
- プロセスは、独自のアドレス空間とリソースを持つ独立したプログラム実行です。スレッドはプロセス内の実行単位であり、複数のスレッドがプロセスのドレス空間を共有するため、通信は安価ですが、競合状態を避けるために同期が必要です。
- カーネルは通常のプログラムができないことを何をするのですか?
- カーネルは特権プロセッサモードで動作し、ハードウェアに直接アクセスし、メモリマッピングを管理し、割り込みを処理し、プロセスを切り替えることができます。アプリケーションは、これらの特権サービスをシステムコールを介して要求し、自分自身で実行するのではなく、分離と保護を維持します。