オペレーティングシステム

オペレーティングシステム
(OSの機能と構造)
2008年10月2日
酒居敬一([email protected])
http://www.info.kochi-tech.ac.jp/k1sakai/Lecture/OS/2007/
連絡先
酒居
居室: A468
メイル: [email protected]
専門科目演習日程
• 部屋
A107・A-WS(不定期なので直前の講義で連絡)
• 演習候補日
通常の月木2時限目の他に月木4時限目
• 教科書を必ず持ってくること。
コンピュータのハードウェア
• CPU
• メモリ
• システムデバイス(チップセット、スーパーI/O)
• 外部記憶装置(HDD、FDD、USBメモリ)
• 通信装置(イーサネット)
• 入力装置(キーボード、マウス、タブレット、カメラ)
• 表示装置(ビデオカードとディスプレイ)
[Intel, 2005]
ルネサス
H8/3292
CPU
RAM
MROM
Timer
Serial
ADC
OSが無ければ…
• ハードウェアをすべて制御しなければならない。
– ファイル操作どころか、キー入力すらままならない。
• 異なるアプリケーションを使えない。
– 共通のインターフェースがないから。
• ハードウェア構成を変えられない。
– プログラムの改造しかないけど、それは困難。
共通の下地を作れば…
制御プログラムとしてのOSのはじまり
OSの位置付け
アプリケーションソフトウェア
共通のインターフェースを提供
オペレーティングシステム
抽象化
ハードウェア
ユーザー
OSの基本概念(2ページ)
• CPUの抽象化
– プロセスとスレッド
• メモリの抽象化
– 仮想記憶
• デバイスの抽象化
– ファイルシステム
• ネットワークの抽象化
– ソケット
→ 仮想計算機を提供
OSの構成(13ページ)
• カーネル
– デバイスドライバ(割込み・入出力・タイマ管理)
– 記憶管理
– プロセス管理(生成・消滅・スケジュール)
– 同期と通信制御
– ファイルシステム
• 管理コマンド
– 利用者管理
• ユーザーインターフェース
タスクとジョブ
• タスクはコンピュータからみた仕事の単位
– シングルタスクOS
• ひとつのタスクしか扱わないOS
– マルチタスクOS
• 複数のタスクを扱えるようにしたOS
• ジョブは人間からみて目的のある一区切りの仕事
– シングルジョブ
• シングルタスクOSでもマルチタスクOSでも処理できる
– マルチジョブ
• マルチタスクOSでないと処理できない
プロセスはプロセッサを抽象化
• プロセスどおしは互いに影響を及ぼさないほうがよい
• デバイスはカーネルの管理下に置きたい
OSの構成法(18ページ)
1. 情報隠蔽
 モジュール化あるいはカプセル化
2. 方針と機構の分離
 スケジューラとディスパッチャ
 ページ管理とページング
3. 階層化
情報隠蔽の例
struct file_operations {
struct module *owner;
loff_t (*llseek) (struct file *, loff_t, int);
ssize_t (*read) (struct file *, char *, size_t, loff_t *);
ssize_t (*write) (struct file *, const char *, size_t, loff_t *);
int (*readdir) (struct file *, void *, filldir_t);
unsigned int (*poll) (struct file *, struct poll_table_struct *);
int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);
int (*mmap) (struct file *, struct vm_area_struct *);
int (*open) (struct inode *, struct file *);
int (*flush) (struct file *);
int (*release) (struct inode *, struct file *);
int (*fsync) (struct file *, struct dentry *, int datasync);
int (*fasync) (int, struct file *, int);
int (*lock) (struct file *, int, struct file_lock *);
ssize_t (*readv) (struct file *, const struct iovec *, unsigned long, loff_t *);
ssize_t (*writev) (struct file *, const struct iovec *, unsigned long, loff_t *);
ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int);
unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned
long,unsigned long);
};
モノリシックカーネル(20ページ)
• ユーザープログラムからシステムコールにより
カーネル内の処理を呼ぶ。
• カーネル内部はモジュール化されている。
• ひとつのプログラムとしてリンクされている。
– 不要なものまで含んでいるため、巨大になる。
– モジュール間は関数呼び出しである。
• オーバーヘッドが少ない。
– デバイスドライバの変更≒カーネルの再構成
• 最近は Loadable Kernel Module という機構がある。
• DLLと同じように、動的にオブジェクトファイルをリンクする
マイクロカーネル(21ページ)
• カーネルに実装される処理は必要最低限。
• モジュールはシステムサーバーとして実装。
– 各機能は各々プロセスとして実現される。
– モジュールが分離していてシステム設計が容易。
– モジュール間はプロセス間通信である。
• オーバーヘッドが多い。
– デバイスドライバの変更≠カーネルの再構成
• 機能変更や拡張が容易。
タスクとユーザー
マルチタスク・マルチユーザー
複数の人が同時に並行処理を行うことができる。
いわゆるUNIX系のOS。
マルチタスク・シングルユーザー
利用者という概念がない。並行処理はできる。
初期のWindows。組み込み用RTOS。
シングルタスク・シングルユーザー
利用者という概念がない。単一処理しかできない。
PC用ではWindowsより前、DOSなど。
ハードウェアのリセット処理によりプロセッ
サが働き始める。つまり、リセットベクタで
指定されたプログラムを実行する
電源オン
初期化中
POST
稼動状態
ブートストラップ
I/Oのチェック
メモリチェック
初期化
IPL
OS
IPLを読み込む
コマンド
インタプリタ
OSを読み込み
システムタスクとして稼動
OSの初期化終了後、コマン
ド・インタプリタを起動
ユーザーからのコマ
ンドを処理する
ユーザ・
タスク1
ユーザ・
タスク2
ユーザ・
タスクn