オペレーティングシステム ~ イントロダクション ~ 山田浩史 hiroshiy @ cc.tuat.ac.jp 2015/04/10 オペレーティングシステム 担当 : 山田浩史 ( やまだひろし ) mail: hiroshiy @ cc.tuat.ac.jp 質問等ありましたら気軽にメールをしてください 専門分野 オペレーティングシステムや仮想マシンモニタといった システムソフトウェア と呼ばれる分野 教科書 河野健二著 : オペレーティングシステムの仕組み 講義用 Web ページ 授業の資料をアップロード, 講義に関する連絡等に使用します http://www.tuat.ac.jp/~hiroshiy/os 1
成績 期末試験 持ち込み不可 勉強せずに試験に挑む学生が出てくるため 持ち込み可にすると試験を難しくしないといけない 演習のレポート 3 回程度を予定 標準課題はやりやすい形で出題する ボーナス課題はやりがいのあるものを出題する 出席は成績に加味しません 講義スケジュール ( 予定 ) 4/10 イントロダクション 4/17 I/O デバイスと割り込み 4/24: 休講 5/1 プロセスとスレッド (1) 5/8 プロセスとスレッド (2) 5/15 演習 (1) 5/22 スケジューリング 5/29 相互排除と同期 (1) 6/5 相互排除と同期 (2) 6/12 演習 (2) 6/19 仮想記憶 (1) 6/26 仮想記憶 (1) 7/3 演習 (3) 7/10 ファイルシステム 7/17 試験対策 2
本講義の意義 オペレーティングシステム (OS) の基本概念 動作原理を学ぶ OS がどのように動作しているかの理解 CS 分野を専門にするならば必須の知識 高度なプログラミングをするためには OS の知識は必須 コンピュータシステムそのものの理解 OS はハードウェアとユーザプログラムとを結びつける要の役割 OS を支える諸概念 原理の理解 OS 研究の成果は他分野でも応用 利用されている OS って何? コンピュータを動作させるための最も基本的なプログラム ハードウェア (CPU メモリ ディスク等 ) 上で動作し制御する ユーザやアプリケーションの要求に適した実行環境を提供する ハードウェアの進化やユーザ / アプリケーションの要求に応じて OS は進化 実は明確な定義は存在しない 例 : Windows 10,Mac OS X,Linux,iOS, ndroid OS などなど PCs や Smart Phones では当たり前のように動作 HDD レコーダやデジタル TV の内部でも動作している 今の OS はこれまでの研究成果の集大成 3
OS の目的 裸のコンピュータを抽象化 (abstraction) し より使いやすく安全なコンピュータとして見せること OS はハードウェアを制御し アプリケーションの効率的 & 安全な動作や容易な開発を支援する OS がないと ユーザはハードウェアを直接制御するプログラムを記述する必要がある ( 超大変 ) 他のプログラムの実行を容易に阻害できる Word Thunder Chrome bird アプリケーション オペレーティングシステム Database ハードウェア (CPU, メモリ, ディスク, etc.) 抽象化の例 ( 自動車 ) マニュアルの車 : クラッチとギアの役割を知らないといけない 状況に応じてクラッチとギアを操作しないといけない クラッチやギアという詳細が運転手に見えている 運転が大変 クラッチとギアを 抽象化 オートマの車 : 運転手からはクラッチとギアの存在が隠蔽されている クラッチ ギアを意識しなくてよい 運転が楽 ( アクセルとブレーキの操作だけでよい ) OS もハードウェアを抽象化することでアプリケーション / ユーザに使いやすいコンピュータを提供する 4
CPU の抽象化 OS がないと ひとつの CPU はひとつのプログラムしか実行できない OS があると ひとつの CPU で複数のプログラムが同時に実行できる ひとつひとつのプログラムが専用の CPU を持っているように見える Keywords プロセス, スレッド, スケジューリング, 相互排除と同期 CPU CPU の抽象化を堪能する cpu.c ( 引数の文字を出力 ) 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <sys/time.h> 4 #include <assert.h> 5 6 int main(int argc, char *argv[]) 7 { 8 if (argc!= 2) { 9 fprintf(stderr, "usage: cpu <string> n"); 10 exit(1); 12 } 13 char *str = argv[1]; 14 while (1) { 15 /* 文字を出力 */ 16 printf("%s n", str); 17 } 18 return 0; 19 } cpu.c を動作させて Control-C で止める prompt >./cpu ^C Control+C を押した prompt > きちんと Control+C が処理された 独占して cpu.c が CPU を利用していない cpu.c を複数動作させると prompt >./cpu & ; >./cpu B &; >./cpu C & ; > /cpu D & [1] 7353 [2] 7354 [3] 7355 [4] 7356 D D C C B 1 つの cpu.c が CPU を独占してない OS が安全性 効率性を考えて CPU を抽象化 5
メモリの抽象化 OS がないと アドレスのついた記憶場所として見える コンピュータに搭載している分量しか使えない OS があると 実行中のプログラムそれぞれに専用の記憶場所 コンピュータに搭載している分量を超えてメモリが使える Keywords 仮想記憶 0 256TB Word 0 256TB Chrome 0 256TB Thunderbird 0 番地 16 GB ( メモリ量 ) メモリ OS による抽象化 メモリの抽象化を堪能する mem.c (malloc() した領域のアドレスを出力 ) 1 #include <unistd.h> 2 #include <stdio.h> 3 #include <stdlib.h> 4 5 int main(int argc, char *argv[]) 6 { 7 int *p = malloc(sizeof(int)); 8 assert(p!= NULL); 9 printf("(%d) p: %08x n, getpid(), (unsigned)p); 10 *p = 0; 11 while (1) { 12 sleep(1) 13 *p = *p + 1; 14 printf("(%d) p: %d n", getpid(), *p); 15 } 16 return 0; 17 } mem.c を 2 つ動作させると prompt >./mem & ;./mem &; [1] 24113 [2] 24114 (24113) memory address of p: 00200000 (24114) memory address of p: 00200000 (24113) p: 1 (24114) p: 1 (24114) p: 2 (24113) p: 2 (24113) p: 3 (24114) p: 3 (24113) p: 4 (24114) p: 4 同じアドレスのメモリを更新しているがプログラム間で独立している OS が安全性 効率性を考えてメモリを抽象化 6
ディスクの抽象化 OS がないと 固定長の記憶領域が並んだもの OS があると ファイル, ディレクトリ ( フォルダ ) など Keywords ファイルシステム OS が提供する 保護 機能 OS の提供する重要な機能のひとつ 1 つのプログラムが CPU を独占使用できない 1 つのプログラムが他の走行中のプログラムのメモリを自由に読み書きすることはできない 権利のない人のプログラムが自由にコンピュータの電源を切ることはできない 権利のない人がコンピュータを使うことはできない 権利のない人が他人のファイルを読み書きすることはできないなどなど 操作ミスまたは悪意があっても, できないようにする 7
Tips (OS を理解するには ) ハードウェアとソフトウェアとの機能とをきちんと整頓する OS の動作はハードウェアの機能と密接に絡んでいる ハードウェアの機能を使わないと実現が不可能な OS の機能がある 割り込み MMU 実行モード等 説明時に明確に言います 学習時にはこの点に気をつけること OS の機能が必要な理由をきちんと整頓する OS がサポートする機能の中には複雑なものがある 仮想アドレス変換 説明時に理由を明確に言います 学習時にはこの点に気をつけること まとめ OS を学ぶ意義 OS がどのように動作しているかの理解 コンピュータシステムそのものの理解 OS を支える諸概念 原理の理解 OS の目的 裸のコンピュータを抽象化 (abstraction) し より使いやすいコンピュータとして見せること OS の機能と抽象化 CPU プロセス, スレッド, スケジューリング メモリ 仮想記憶 ディスク ファイルシステム 保護機能 8