- Authors

- Name
- Youngju Kim
- @fjvbn20031
オペレーティングシステムとは何か
オペレーティングシステム(Operating System)は、コンピュータハードウェアを管理し、アプリケーションプログラムに実行環境を提供するソフトウェアである。ユーザーとハードウェアの間の仲介者の役割を果たす。
コンピュータシステムの4つの構成要素
コンピュータシステムは大きく4つの要素で構成される。
- ハードウェア: CPU、メモリ、I/Oデバイスなどの基本リソースを提供する
- オペレーティングシステム: ハードウェアを制御し、アプリケーションプログラム間のリソースを調整する
- アプリケーションプログラム: ワードプロセッサ、コンパイラ、Webブラウザなど、ユーザーの問題を解決する
- ユーザー: 人間、他の機械、または他のコンピュータ
オペレーティングシステムの役割
オペレーティングシステムは観点によって2つに定義できる。
- リソースアロケータ(Resource Allocator): CPU時間、メモリ空間、記憶装置、I/Oデバイスなどすべてのリソースの管理者
- 制御プログラム(Control Program): プログラムの実行を制御し、エラーや不適切な使用を防止する
より一般的な定義として、オペレーティングシステムはコンピュータで常に実行されているプログラムである**カーネル(kernel)**である。
コンピュータシステム構成
割り込み(Interrupt)
割り込みは、ハードウェアがCPUにイベントの発生を通知するメカニズムである。I/Oデバイスが作業を完了すると、割り込みを通じてCPUに信号を送る。
[割り込み処理過程]
1. I/Oデバイスが作業完了
2. デバイスコントローラが割り込み信号を発生
|
v
3. CPUが現在の作業を中断
4. 現在の状態(PC、レジスタ)をスタックに保存
|
v
5. 割り込みベクタを通じてISRアドレスを確認
6. ISR(Interrupt Service Routine)を実行
|
v
7. 保存された状態を復元
8. 中断された作業を再開
割り込みの種類は以下の通りである。
- ハードウェア割り込み: I/Oデバイス、タイマーなどによって発生
- ソフトウェア割り込み(トラップ): エラー(ゼロ除算)やシステムコールによって発生
// 割り込みベクタテーブルの概念図
// 各割り込み番号に対応するISRアドレスを格納
typedef void (*isr_handler_t)(void);
isr_handler_t interrupt_vector_table[256];
// 割り込み番号 0: ゼロ除算例外
// 割り込み番号 1: デバッグ例外
// 割り込み番号 14: ページフォルト
// ...
// 割り込み番号 32~255: ユーザー定義(I/Oデバイスなど)
void handle_interrupt(int interrupt_number) {
// 割り込みベクタからハンドラを探して実行
isr_handler_t handler = interrupt_vector_table[interrupt_number];
if (handler != NULL) {
handler();
}
}
記憶装置の階層構造
記憶装置は速度、コスト、揮発性に応じて階層を形成する。
[記憶装置の階層]
高速 / 高価 / 小容量
+-----------+
| レジスタ | < 1ns
+-----------+
| キャッシュ(L1)| ~1ns
+-----------+
| キャッシュ(L2)| ~4ns
+-----------+
| キャッシュ(L3)| ~10ns
+-----------+
| メインメモリ | ~100ns (揮発性)
+-----------+
| SSD | ~100us (不揮発性)
+-----------+
| HDD | ~10ms
+-----------+
低速 / 安価 / 大容量
キャッシング(Caching)は、遅い記憶装置のデータを速い記憶装置に一時的にコピーする技法である。同じデータに再アクセスする際、速い記憶装置から読み取るため性能が向上する。
I/O構造
I/O操作はCPUとデバイスコントローラ間のやり取りによって行われる。
- プログラムドI/O: CPUが直接データを1バイトずつ転送(非効率的)
- 割り込み駆動I/O: デバイスの準備ができたら割り込みでCPUに通知
- DMA(Direct Memory Access): 大量データ転送時、CPU介入なしにデバイスコントローラが直接メモリにアクセス
[DMA動作過程]
CPU DMAコントローラ メモリ
| | |
|-- DMA転送要求 ----------->| |
| (ソース, 宛先, サイズ) | |
| |--- データ転送 ----->|
| |--- データ転送 ----->|
| |--- データ転送 ----->|
|<-- 転送完了割り込み -------| |
| | |
コンピュータシステムアーキテクチャ
マルチプロセッサシステム
現代のコンピュータはほとんどがマルチプロセッサシステムである。利点は以下の通りである。
- スループットの向上: N個のプロセッサがあれば処理速度が向上する(ただしN倍ではない)
- スケールメリット: 複数の単一プロセッサシステムよりコスト効率が良い
- 信頼性の向上: 1つが故障しても全体のシステムは動作を継続する(graceful degradation)
マルチプロセッサシステムには2つのタイプがある。
- 非対称マルチプロセッシング(AMP): 1つのマスタープロセッサがシステムを制御し、残りは指示に従う
- 対称マルチプロセッシング(SMP): 各プロセッサが対等な立場でOS機能を実行する
[SMPアーキテクチャ]
CPU 0 CPU 1 CPU 2
[レジスタ] [レジスタ] [レジスタ]
[キャッシュ] [キャッシュ] [キャッシュ]
| | |
+------+------+------+------+
| |
[共有メモリ] [I/Oシステム]
マルチコアシステム
マルチコアプロセッサは1つのチップに複数のコアを含む。同じチップ内で通信するため、別々のプロセッサ間の通信より高速で消費電力も少ない。
[マルチコアプロセッサ構造]
+--------------------------------------+
| 1つのCPUチップ |
| +--------+ +--------+ +--------+ |
| | コア 0 | | コア 1 | | コア 2 | |
| |[L1Cache]| |[L1Cache]| |[L1Cache]| |
| +--------+ +--------+ +--------+ |
| +----------+ |
| | L2キャッシュ| |
| +----------+ |
+--------------------------------------+
|
[メインメモリ]
NUMA(Non-Uniform Memory Access)
CPU数が増えるとシステムバスがボトルネックになる。NUMAは各CPUに独自のローカルメモリを提供することでこの問題を解決する。
[NUMAアーキテクチャ]
+------------------+ インターコネクト +------------------+
| ノード 0 |<================>| ノード 1 |
| CPU 0 CPU 1 | | CPU 2 CPU 3 |
| [ローカルメモリ 0] | | [ローカルメモリ 1] |
+------------------+ +------------------+
ローカルメモリアクセス: 高速 (~100ns)
リモートメモリアクセス: 低速 (~300ns)
オペレーティングシステムの動作方式
デュアルモード動作
OSはユーザープログラムの誤った動作からシステムを保護しなければならない。そのために2つの実行モードを提供する。
- ユーザーモード(User Mode): アプリケーションプログラムの実行。特権命令は実行不可
- カーネルモード(Kernel Mode): OSコードの実行。すべての命令が実行可能
[モード切り替え過程]
ユーザーモード カーネルモード
| |
|-- システムコール呼び出し ---------->|
| (トラップ発生、モードビット 0) |
| |-- システムコール処理
| |
|<-- システムコール復帰 -------------|
| (モードビットを1に復元) |
| |
// システムコールの例: ファイル読み取り
// ユーザープログラムからread()を呼び出す
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>
int main() {
char buffer[1024];
// open()はシステムコールを通じてカーネルモードに切り替え
int fd = open("data.txt", O_RDONLY);
// read()もシステムコール - カーネルがI/Oを実行
ssize_t bytes = read(fd, buffer, sizeof(buffer));
printf("読み取りバイト数: %zd\n", bytes);
close(fd);
return 0;
}
タイマー(Timer)
タイマーはプログラムがCPUを独占することを防止する。一定時間が経過すると割り込みを発生させてOSに制御を戻す。
- 固定タイマー: 一定間隔で割り込みを発生
- 可変タイマー: 固定クロック+カウンタで実装。カウンタが0になると割り込みを発生
リソース管理
プロセス管理
プロセスは実行中のプログラムである。OSは以下を実行する。
- プロセスの生成と削除
- プロセスの一時停止と再開
- プロセス同期メカニズムの提供
- プロセス間通信(IPC)メカニズムの提供
- デッドロック処理メカニズムの提供
メモリ管理
メインメモリはCPUが直接アクセスできる唯一の大容量記憶装置である。OSは以下を管理する。
- メモリのどの部分が使用中で、誰が使用しているかを追跡
- どのプロセスとデータをメモリにロード・アンロードするかを決定
- 必要に応じてメモリ空間の割り当てと解放
記憶装置管理
OSは記憶装置の物理的特性を抽象化し、論理的なファイルの概念を提供する。
- ファイルシステム管理: ファイルの作成/削除、ディレクトリ管理、アクセス制御
- 大容量記憶装置管理: ディスクスケジューリング、空き領域管理、記憶装置の割り当て
- キャッシング: 頻繁にアクセスするデータをより高速な記憶装置に保持
I/Oサブシステム
OSのI/Oサブシステムはハードウェアデバイスの違いを隠蔽する。
- バッファリング(Buffering): 転送中のデータを一時的に保存
- キャッシング(Caching): 頻繁に使用するデータのコピーを保持
- スプーリング(Spooling): プリンタなどのデバイスの出力をキューに保存
保護とセキュリティ
- 保護(Protection): OSが定義したリソースに対するプロセス/ユーザーのアクセスを制御するメカニズム
- セキュリティ(Security): 外部または内部からの攻撃を防御する。認証、権限付与、監査などを含む
各ユーザーには一意のID(UID)が付与され、グループID(GID)を通じてグループ単位のアクセス制御も可能である。権限昇格(privilege escalation)は一時的により高い権限を得るメカニズムで、Unixではsetuidビットによって実装される。
まとめ
[オペレーティングシステム核心概念のまとめ]
+------------------------------------------+
| アプリケーションプログラム |
+------------------------------------------+
| オペレーティングシステム(カーネル) |
| +------+ +--------+ +--------+ +------+ |
| |プロセス| |メモリ | |ファイル | |I/O | |
| |管理 | |管理 | |システム | |管理 | |
| +------+ +--------+ +--------+ +------+ |
+------------------------------------------+
| ハードウェア |
| CPU / メモリ / ディスク / I/Oデバイス |
+------------------------------------------+
オペレーティングシステムは、ハードウェアとユーザーの間でリソースを管理し、プログラム実行環境を提供し、システムを保護する中核的なソフトウェアである。デュアルモード動作、割り込み、タイマーなどのハードウェアサポートを活用して、安全で効率的なシステム運用を保証する。