[TIL]オペレーティングシステム恐竜書Chapter 1.3-1.4


1.3. コンピュータアーキテクチャコンピュータシステムアーキテクチャ


コンピュータシステムは、使用する汎用プロセッサの数に応じて分類することができる.

1.3.1. シングルプロセッサシステムSingle-Processor Systems


シングルプロセッサ、1つの処理コアを持つCPU
各デバイスにはそれぞれのタスクを処理するマイクロプロセッサがあり、オペレーティングシステムは各I/Oデバイスを制御できません.
カーネルは、コマンドを実行し、データをローカルに格納するレジスタを含むコンポーネントです.
カーネルを有するメインCPUは、プロセス内の命令を含む汎用命令のセットを実行することができる.

1.3.2. マルチプロセッサシステムマルチプロセッサシステム


各プロセッサには2つ以上のシングルコアCPUがあります.
プロセッサは、コンピュータバスとクロック、メモリ、周辺機器を共有します.
プロセッサ数を増やすとスループットは増加しますが、速度はN個のプロセッサのように比例して増加しません.
複数のプロセッサが連携して動作すると、一定のオーバーヘッドが発生します.
これらのオーバーヘッドと共有リソースの競合により、追加のプロセッサの予想収益が削減されます.
通常のマルチプロセッサシステムは、SMP(Symmetric Multiprocessing)を使用する.
SMP(Symmetric Multiprocessing)
各ピアツーピアCPUプロセッサは、オペレーティングシステムの機能とユーザープロセスを含むすべてのタスクを実行します.

各CPUプロセッサには、単一またはローカルキャッシュだけでなく、独自のレジスタのセットがあります.
ただし、すべてのプロセッサはシステムバスを介して物理メモリを共有します.
プロセッサが特定のデータ構造を共有することで、効率の低下を回避できます.
同じプロセッサチップ上に2つのコアを有するデュアルコア設計では、各コアに独自のレジスタグループと1レベルキャッシュ(ローカルキャッシュ)があります.
なお、レベル2(L 2)のキャッシュはチップに限られるが、2つの処理コアで共有される.
ほとんどのアーキテクチャでは、ローカルキャッシュと共有キャッシュを組み合わせた方法が採用されています.

NUMA
マルチプロセッサシステムにCPUを追加すると、コンピューティングのパフォーマンスが向上しますが、システムバスの競合によりパフォーマンスが低下する可能性があります.
この問題を解決するために、小型で高速なローカルバスでアクセスできる~独自のローカルメモリ~.
各CPUは物理アドレス空間を共有する.

-メリット
1.CPUがローカルメモリにアクセスするときの速度が速い.
2.システム相互接続に競合はありません.
-欠点
1.CPUがシステムインターコネクトを介してリモートメモリにアクセスする必要がある場合、遅延が増加し、パフォーマンスが低下する可能性があります.
ブレードサーバ
1つのシャーシに複数のプロセッサボード、I/Oボード、およびネットワークボードを取り付けます.
ブレードサーバが従来のマルチプロセッサシステムと異なる点は、各ブレード-プロセッサボードが独立して起動し、独自のオペレーティングシステムを備えていることです.

1.3.3. クラスタシステムクラスタシステム


特長
- 둘 이상의 독자적 시스템 또는 노드들을 연결하여 구성
- 각 노드는 통상 다중 코어 시스템이다.
通常のクラスタシステムはストレージデバイスを共有し、ローカルエリアネットワークやInfiniBandなどの高速相互接続ネットワークに接続します.
クラスタは通常、高可用性を提供するために使用されます.(クラスタ内の1つ以上のコンピュータシステムに障害が発生しても、サービスは継続されます)
高可用性は安定性を向上させ、多くのアプリケーションで非常に重要です.
残りのハードウェアレベルに比べて、サービスを継続する機能は、優雅なパフォーマンス低下と呼ばれます.

1.4. オペレーティングシステムのオペレーティング-システムオペレーティング


ブートストラップは、OSカーネルを見つけてメモリにマウントします.
一部のサービスは、カーネルの起動時にメモリにロードされ、カーネルが実行される時間帯全体で実行されるシステム・デーモンになるカーネル外部から提供されます.
Linuxでは、最初のシステムプログラムは「systemd」であり、他の多くのデーモンを起動します.

1.4.1. マルチプログラミング、マルチタスク処理、マルチタスク処理


マルチプログラム設計は、プログラムを構成することによってCPUの利用率を向上させ、CPUが常に1つ実行できるようにする.
マルチプログラムシステムで実行されるプログラムをプロセスと呼びます.
OSは、複数のプロセスを同時にメモリに保持します.

オペレーティングシステムは、プロセスの1つを選択し、実行を開始します.
つまり、I/Oタスクなどの特定のタスクの完了を待つ必要がある場合があります.
非マルチプログラミングシステムでは、CPUがアイドル状態にある可能性があります.
マルチタスク処理はマルチプログラミングの論理拡張である.
マルチタスクシステムでは、CPUは複数のプロセスを切り替えてプロセスを実行しますが、常に切り替えが発生し、ユーザーに迅速な応答時間を提供します.
マルチタスクシステムでは、オペレーティングシステムは適切な応答時間を保証する必要があります.
仮想メモリ(virtualmemory)
これは、メモリにロードされたプロセスの一部のみを実行できるテクノロジーです.
プログラムは物理メモリのサイズより大きくすることができます.
プライマリ・メモリを物理メモリから分離するために、プライマリ・メモリを大きく均一なストレージ・デバイスの2倍に抽象化します.
マルチプログラミングとマルチタスクシステムもファイルシステムを提供する必要があります.

1.4.2. デュアルモードとマルチモード操作デュアルモードとマルチモード操作


オペレーティングシステムは、少なくとも2つの独立した演算モードを提供する.
トラップや割り込みが発生するたびに、ハードウェアはユーザーモードからカーネルモードに切り替わります.
システムが起動すると、ハードウェアはカーネルモードで起動→オペレーティングシステムのマウント→ユーザーモードでユーザープロセスを起動する形で行われます.
ハードウェアを直接制御できるコマンドは、カーネルモードでのみ実行できます.
ユーザー・モード
コンピュータシステムがユーザアプリケーションのために実行されると、システムはユーザモードにある.
カーネルモード(スーパーユーザモード、システムモード、特権モード)
オペレーティングシステムがコンピュータ制御を取得するたびに、カーネルモードになります.
システムは、ユーザプログラムに切り替える前に、常にユーザモード(モードビット1)に切り替える.
システムコール
ユーザプログラムが、オペレーティングシステムに、オペレーティングシステムによって実行されるオペレーティングシステムの代わりに指定された操作を実行するように要求する方法が提供される.
コンピュータシステムのプロセッサがサポートする機能に応じて、さまざまな方法で呼び出されます.
システム呼び出しは、通常、トラップを割り込みベクトルの特定の位置に掛ける形式を採用する.
このトラップは通常trapコマンドで実行されますが、syscallという特定のコマンドがあるシステムもあります.
trapコマンド
Bash Shell ScriptでUnixシリーズ信号を制御するコマンド
1つの典型的な例は、一部の入力がLinux上のCTRL+C、CTRL+Zをクリックしてプログラムを終了または停止すると、割り込みが発生することである.
モードビット
コンピュータのハードウェアにビットが追加され、現在のモードが表示されます.
このビットは、カーネルモード(0)またはユーザモード(1)を表します.
モードビットは、オペレーティングシステムが実行するタスクと、ユーザーが実行するタスクとに区別できます.

1.4.3. タイマー


1つの方法は、ユーザプログラムが無限ループに陥ったり、システムサービス呼び出しに失敗したりすることを防止し、オペレーティングシステムがCPUに対する制御を維持できることを確保し、制御がオペレーティングシステムに戻らないことを回避することである.