オペレーティングシステム (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
© Copyright 2024 ExpyDoc