オペレーティングシステム ( プロセス管理とスケジューリング )

15
オオオオオオオオオオオオ オオオオオオオオオオオオ ( ( オオオオオオオオオオオオオオオ オオオオオオオオオオオオオオオ ) ) 2008 2008 10 10 6 6 オオオオオオ( ([email protected] ) ) http://www.info.kochi-tech.ac.jp/k1sakai/Lecture/OS/2007/ http://www.info.kochi-tech.ac.jp/k1sakai/Lecture/OS/2007/

description

オペレーティングシステム ( プロセス管理とスケジューリング ). 2008 年 10 月 6 日 酒居敬一 ( [email protected] ) http://www.info.kochi-tech.ac.jp/k1sakai/Lecture/OS/2007/. ハードウェアのリセット処理によりプロセッサが働き始める。つまり、リセットベクタで指定されたプログラムを実行する. 初期化中. 稼動状態. 電源オン. POST. I/O のチェック メモリチェック 初期化. ブートストラップ. IPL. OS. IPL を読み込む. - PowerPoint PPT Presentation

Transcript of オペレーティングシステム ( プロセス管理とスケジューリング )

Page 1: オペレーティングシステム ( プロセス管理とスケジューリング )

オペレーティングシステムオペレーティングシステム(( プロセス管理とスケジューリングプロセス管理とスケジューリング ))

20082008年年 1010月月 66 日日酒居敬一酒居敬一 (([email protected]))

http://www.info.kochi-tech.ac.jp/k1sakai/Lecture/OS/2007/http://www.info.kochi-tech.ac.jp/k1sakai/Lecture/OS/2007/

Page 2: オペレーティングシステム ( プロセス管理とスケジューリング )

電源オン POST

ブートストラップ

IPL

OS

コマンドインタプリタ

ユーザ・タスク 2

ユーザ・タスク 1

ユーザ・タスクn

ハードウェアのリセット処理によりプロセッサが働き始める。つまり、リセットベクタで指定されたプログ

ラムを実行する

I/Oのチェック

メモリチェック初期化

IPLを読み込む

OSを読み込みシステムタスクとして稼

OSの初期化終了後、コマンド・インタプリタを

起動

ユーザーからのコマンドを処理する

初期化中 稼動状態

Page 3: オペレーティングシステム ( プロセス管理とスケジューリング )

プロセスの概念プロセスの概念 (23(23ページページ ))•プロセッサを抽象化したもの

–プログラム、データ、レジスタの中身… を含む•固有の記憶空間が与えられる

– 記憶空間などを共有しているもの→スレッド–スレッドとプロセスを明確に区別しない→タスク

•実行のひとつの単位• プロセスは(理想的には)複数が同時に走行

• (現実にはプロセッサはプログラムを処理するために使われる資源で、複数のプロセスで共有)→次回

Page 4: オペレーティングシステム ( プロセス管理とスケジューリング )

並行処理と並列処理並行処理と並列処理•並行処理 (Concurrent Processing)

– 複数のプロセスにより処理すること– 複数のジョブが互いに独立したプロセスになる

•並列処理 (Parallel Processing)– 複数のプロセスにより処理すること–ひとつのジョブを複数のプロセスに分割

Page 5: オペレーティングシステム ( プロセス管理とスケジューリング )

タスクとジョブタスクとジョブ•タスクはコンピュータからみた仕事の単位

–シングルタスクOS•ひとつのタスクしか扱わないOS

–マルチタスクOS•複数のタスクを扱えるようにしたOS

•ジョブは人間からみて目的のある一区切りの仕事– 逐次的なジョブ処理

•シングルタスクOSでもマルチタスクOSでも処理できる– 並行的なジョブ処理

•マルチタスクOSでないと処理できない※ タスクはプロセスとスレッドを区別しない言い方

Page 6: オペレーティングシステム ( プロセス管理とスケジューリング )

ジョブ管理とタスク管理の関係ジョブ管理とタスク管理の関係•ジョブ実行のスケジューリング

– 並行的(マルチジョブ)•資源の量と全体の処理時間をもとに、優先度をつけて処理

– 逐次的(シングルジョブ)•ただ順番に処理する。スケジューリングの必要がない。

•タスク実行のスケジューリング– 機械的に処理される。

•タスクはOSからみた仕事の単位であるから。• OSが資源の利用状況を見ながら、スケジューリング

Page 7: オペレーティングシステム ( プロセス管理とスケジューリング )

ハードウェアの管理ハードウェアの管理• Uni-Processor

– 管理する主体 (=プロセッサ ) がひとつ•つまり、プロセスの実行管理だけを考えればよい

• Multi-Processor– 管理する主体が複数ある

•どのプロセッサが何を管理するか、という管理も必要!– 計算機の実装方式が複数ある

• OS内部の管理表は唯一でなければならないが、•複数プロセッサ間で管理のための方法が単一ではない!

Page 8: オペレーティングシステム ( プロセス管理とスケジューリング )

プロセスの構造プロセスの構造 (25(25ページページ ))•テキストセグメント•データセグメント•ヒープ領域•スタックセグメント•共有セグメント•レジスタコンテキスト

Page 9: オペレーティングシステム ( プロセス管理とスケジューリング )

レジスタコンテキストレジスタコンテキスト

•プロセッサの持つレジスタの内容– 汎用レジスタ– 浮動小数点数レジスタ–プログラムカウンタ、リンクレジスタ–スタックポインタ、フレームポインタ–ステータスレジスタ–マルチメディア拡張のためのレジスタ

Page 10: オペレーティングシステム ( プロセス管理とスケジューリング )

プロセス管理プロセス管理•プロセス制御ブロック PCB(Process Control

Block)–プロセスの状態

•実行可、待ち、消滅中、など–コンテキスト

•レジスタ、資源管理表– 優先順位

•タイムスライス、実行優先度、経過時間、など– PCBは線形リストを形成する

•線形リストによりキューを実現•線形リストはタスクの状態ごとに存在する

Page 11: オペレーティングシステム ( プロセス管理とスケジューリング )

タスク構造体タスク構造体•プロセスやスレッドの状態•スケジューリングポリシー•仮想記憶•スレッドの情報

•/usr/src/linux/include/linux/sched.hstruct task_struct が Linux OSのタスク構造体

•current が参照するタスクが現在実行中のタスク•タスク構造体型のデータはカーネル空間に存在•タスク構造体から参照される管理表は多い

Page 12: オペレーティングシステム ( プロセス管理とスケジューリング )

プロセスの存在形態プロセスの存在形態 (27(27ペーページジ ))

タスク

未登録タスク

登録済タスク

実行不可能タスク

実行可能タスク

消滅中タスク

生成中タスク

異常停止タスク

条件待ちタスク

実行待ちタスク

実行中タスク

入出力

仮想記憶処理

通信

同期

その他条件

Page 13: オペレーティングシステム ( プロセス管理とスケジューリング )

プロセスの状プロセスの状態態

[sakai@star linux]$ ps auxUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1 0.0 0.0 1368 444 ? S Sep03 0:04 init [3]root 1300 0.0 0.1 1444 580 ? S Sep03 0:02 syslogd -m 0root 1304 0.0 0.0 1364 420 ? S Sep03 0:00 klogd -xrpc 1314 0.0 0.1 1544 600 ? S Sep03 0:00 portmaproot 1403 0.0 0.1 1484 536 ? S Sep03 0:00 /usr/sbin/automounamed 1417 0.0 0.7 39980 3836 ? S Sep03 0:00 /usr/sbin/named -root 1456 0.0 0.1 2076 856 ? S Sep03 0:00 xinetd -stayaliventp 1469 0.0 0.4 2392 2384 ? SL Sep03 0:08 ntpd -U ntp -glp 1487 0.0 0.8 11800 4412 ? S Sep03 0:13 lpd Waitingroot 1563 0.0 0.2 2520 1528 ? S Sep03 0:01 /usr/sbin/dhcpd eroot 1630 0.0 0.1 1416 552 ? S Sep03 0:02 crondxfs 1688 0.0 0.9 9780 4944 ? S Sep03 0:21 xfs -droppriv -daroot 1697 0.0 0.2 5800 1532 ? S Sep03 0:00 smbd -Droot 1701 0.0 0.2 4636 1312 ? S Sep03 0:14 nmbd -Ddaemon 1719 0.0 0.0 1408 508 ? S Sep03 0:00 /usr/sbin/atdroot 1857 0.0 0.1 2280 752 ? S Sep03 0:00 login -- sakairoot 1858 0.0 0.0 1344 340 tty2 S Sep03 0:00 /sbin/mingetty ttsakai 1881 0.0 0.1 5352 980 tty1 S Sep03 0:00 -bashsakai 1910 0.0 0.0 2332 484 tty1 S Sep03 0:00 xinitroot 1911 0.5 9.2 95476 47424 ? S Sep03 344:10 X -auth /home/saksakai 1915 0.0 0.3 7076 1560 tty1 S Sep03 0:00 kterm -fn 8x16 -fsakai 1921 0.0 1.0 13416 5304 tty1 S Sep03 1:43 gkrellm -g -0+0sakai 1931 0.0 1.6 25148 8668 tty1 S Sep03 0:14 twmsakai 1943 0.0 0.1 5348 972 pts/4 S Sep03 0:00 bashroot 436 0.0 0.4 6220 2544 ? S Sep13 0:00 sendmail: acceptismmsp 444 0.0 0.4 6016 2308 ? S Sep13 0:00 sendmail: Queue rsakai 18193 0.0 0.5 8960 2628 tty1 S Oct09 0:01 aumix-X11sakai 30076 0.1 8.8 121468 45784 tty1 R Oct19 1:54 /usr/lib/mozilla-sakai 32189 0.0 0.1 2724 776 pts/12 R 11:44 0:00 ps aux

Page 14: オペレーティングシステム ( プロセス管理とスケジューリング )

例例 : : プロセスの待ち状態プロセスの待ち状態

struct lp_struct { struct pardevice *dev; unsigned long flags; unsigned int chars; unsigned int time; unsigned int wait; char *lp_buffer;#ifdef LP_STATS unsigned int lastcall; unsigned int runchars; struct lp_stats stats;#endif wait_queue_head_t waitq; unsigned int last_error; struct semaphore port_mutex; wait_queue_head_t dataq; long timeout; unsigned int best_mode; unsigned int current_mode; unsigned long bits;};

struct __wait_queue { unsigned int flags;#define WQ_FLAG_EXCLUSIVE 0x01 struct task_struct * task; struct list_head task_list;#if WAITQUEUE_DEBUG long __magic; long __waker;#endif};typedef struct __wait_queue wait_queue_t;

struct __wait_queue_head { wq_lock_t lock; struct list_head task_list;#if WAITQUEUE_DEBUG long __magic; long __creator;#endif};typedef struct __wait_queue_head wait_queue_head_t;

入出力待ちの場合、デバイスのほうにキューを持たせる

Page 15: オペレーティングシステム ( プロセス管理とスケジューリング )

スケジューリング(28ペースケジューリング(28ページ)ジ)

•現実には CPU数がプロセス数より少ない–プロセススケジューリングのアルゴリズム

•プロセスに CPUを割付たり取り上げたりする–プロセスのディスパッチャー

B-sh 系/usr/bin/time gogo -test 1000 >a 2>&1 & nice -19 /usr/bin/time gogo -test 1000 >b 2>&1 &

C-sh 系/usr/bin/time gogo -test 1000 > & a & nice +19 /usr/bin/time gogo -test 1000 > & b &