170 likes | 386 Views
オペレーティングシステム (OS の機能と構造 ). 2008 年 10 月 2 日 酒居敬一 ( sakai.keiichi@kochi-tech.ac.jp ) http://www.info.kochi-tech.ac.jp/k1sakai/Lecture/OS/2007/. 連絡先. 酒居 居室 : A468 メイル : sakai.keiichi@kochi-tech.ac.jp. 専門科目演習日程. 部屋 A 107・A-WS(不定期なので直前の講義で連絡 ) 演習候補日 通常の月木2時限目の他に月木 4 時限目 教科書を必ず持ってくること。.
E N D
オペレーティングシステム(OSの機能と構造) 2008年10月2日 酒居敬一(sakai.keiichi@kochi-tech.ac.jp) http://www.info.kochi-tech.ac.jp/k1sakai/Lecture/OS/2007/
連絡先 • 酒居 • 居室: A468 • メイル: sakai.keiichi@kochi-tech.ac.jp 専門科目演習日程 • 部屋 • A107・A-WS(不定期なので直前の講義で連絡) • 演習候補日通常の月木2時限目の他に月木4時限目 • 教科書を必ず持ってくること。
コンピュータのハードウェア • CPU • メモリ • システムデバイス(チップセット、スーパーI/O) • 外部記憶装置(HDD、FDD、USBメモリ) • 通信装置(イーサネット) • 入力装置(キーボード、マウス、タブレット、カメラ) • 表示装置(ビデオカードとディスプレイ)
ルネサス • 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ページ) • 情報隠蔽 • モジュール化あるいはカプセル化 • 方針と機構の分離 • スケジューラとディスパッチャ • ページ管理とページング • 階層化
情報隠蔽の例 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を読み込みシステムタスクとして稼動 ユーザ・タスク1 ユーザ・タスク2 OSの初期化終了後、コマンド・インタプリタを起動 ユーザーからのコマンドを処理する ユーザ・タスクn