システムの階層(上にいくほど高レイヤー)
- アプリケーションプログラム
- ユーザーインターフェース (GUI, CUI)
- OS
- ハードウェア
2つの動作モード(@プロセッサ)
カーネルモード
- OS以下はこのモードで動作
- すべてのハードウェアにアクセス可能
- すべての命令を実行可能
ユーザーモード
- ユーザーインターフェース以上はこのモードで動作
- 他のプログラムに影響が出る命令が禁じられている
OSの2つの役割
仮想マシンを実現
一連のハードウェアに対する処理をパッケージ化して、仮想的なハードウェアを提供。
メリット
* ハードウェアの詳細な状況を意識せずにプログラムを作成できる
* パッケージ化した一連の手続きを抽象化できる (例:ファイル操作)
リソースマネジメント
1つのプログラムだけを実行するだけでは、利用されないリソースが出る。
プログラム実行を効率化するために、複数のプログラムを同時実行し、OSがその取りまとめを行う。
(=資源の多重化)
ハードウェアの概要
プロセッサ(CPU)
- レジスタ(記憶素子)
- デコードユニット(命令解読機)
- 実行回路
メモリ
- 階層
- レジスタ
- キャッシュ
- メインメモリ
- ハードディスク
- 種類
- HDD
- SSD
- DVD-R
- etc..
入出力デバイス
OSは入出力デバイスも管理しないといけない。
ただ、通常デバイス制御命令は非常に煩雑になっている事が多い、、
→「コントローラー」というOSをデバイスの中間的なインターフェースがムズいところは吸収してくれる。デバイス制御のためのソフトウェアを「デバイスドライバ」という
バス
プロセット、メモリ、その他の入出力デバイスが、お互いにデータのやり取りをするために必要な共通の信号線。
プロセッサとキャッシュ、プロセッサとメモリの間にはそれぞれ専用バスが使用されている。
入出力デバイスでいえば、
* USB (universal serial bus)
* IEEE1394
* Thunderbolt
とかがあるみたい。
OSの基本要素
プロセス
- プログラムの実行単位。
- 制御に必要な情報を取りまとめるために必要。
メモリ空間
- お互いのプログラムは、独立したメモリ空間を割り当てる必要がある
- 仮想的なメモリ空間を提供することで、自身のプログラムに必要なデータがどこにあるのかを都度物理的なアドレスで確認しなくても良くなる
ファイル(ファイルシステム)
- ファイルをひとまとめにしたディレクトリという概念で構造化
- このようにファイルとディレクトリという概念を使って、データの構造化を実現する仕組みを「ファイルシステム」という
入出力
* 入出力デバイスの管理もOSが担当
* 複数ユーザーが使用するときには調停を担当
保護機能
- マルチユーザーシステムにおいての、「権限」の仕組み
- 「権限」はデータ閲覧、プログラムの実行などに対して設定される
システムコール
OSが用意したインターフェース。(OSが管理する資源をユーザープログラムから使用際に使用)
プログラム言語の関数のような形で定義されている。
ユーザープログラムの「関数」との違い
ユーザープログラムの関数は、ハードウェアの目線から見れば「実行する位置アドレスの変更」にすぎない。
それに対して、システムコールが呼ばれる際には、ユーザープログラムはその処理の状況を保存して終了する。
その後、システムコールハンドラ(システムコールのプログラム)がプロセッサをカーネルモードに変更してから、処理を実行する。
性質
システムコールは、基本的に複数のプログラムから同時に呼び出すことができない。
→これにより、プログラム同士の干渉が起こるのを防ぐ
システムコールの仕様について
システムコールとして用意される処理の種類は、OSそのものの機能に関連するものなので大体同じ。
↓
しかし細かい仕様は、OSの設計思想によって異なる。
システムコールが異なると、実装に影響が出てしまう。
↓
仕様を共通化する動きがある。代表的なものは、「POSIX」。
言語と単位
使用されている言語
ハードウェアに近い処理は、一部アセンブラで書かれていることもあるが、だいたいC言語が使われている。
単位
- bps (bit per second):通信速度
- rpm(revolution per minute):ディスクの1分あたりの回転数 とか。