Comments
Description
Transcript
プロセスの状態遷移
プロセスの状態遷移 復習です 前の教材で 「プロセスの切換え」の 内容を覚えていますか 1 プロセスの切換えは • 何のため? 2 プロセスの切換えは • 何のため? (元々は)CPUの空き時間を 少なくするため 3 プロセスの切換えは • 何のため? (元々は)CPUの空き時間を 少なくするため • 何をする? 4 プロセスの切換えは • 何のため? (元々は)CPUの空き時間を 少なくするため • 何をする? プログラムを切換えて実行す る 5 プロセスの切換えは • 何のため? (元々は)CPUの空き時間を 少なくするため • 何をする? プログラムを切換えて実行す る • 具体的にはどうやって切換える? 6 プロセスの切換えは • 何のため? (元々は)CPUの空き時間を 少なくするため • 何をする? プログラムを切換えて実行す る • 具体的にはどうやって切換える? • メモリ上のプログラムイメージはそのままで • CPU上のPC・レジスタ・フラグを退避・復旧 7 それぞれのプロセスを 時間軸で見る 8 それぞれのプロセスを時間軸で見る C物 P理 U的 はに 1は つ 仕事Aをする 仮想CPU-1 仕事Bをする 仮想CPU-2 仕事Bの 計算 • 前にこんな絵があった 9 仕事Aの 計算 仕事Aの 計算 仕事Bの 計算 仕事Bの 計算 それぞれのプロセスを時間軸で見る C物 P理 U的 はに 1は つ 仕事Aをする 仮想CPU-1 仕事Bをする 仮想CPU-2 仕事Aの 計算 仕事Aの 計算 仕事Bの 計算 仕事Bの 計算 仕事Bの 計算 • 前にこんな絵があった • プロセス(仮想CPU)を管理する立場で それぞれのプロセスを追いかけてみよう 10 それぞれのプロセスを時間軸で見る 仕事Aをする 仮想CPU-1 仕事Aの 計算 仕事Aの 計算 時間軸 11 それぞれのプロセスを時間軸で見る 仕事Aをする 仮想CPU-1 仕事Aの 計算 仕事Aの 計算 時間軸 • プロセス(仮想CPU)1は CPUが割り当てられていれば計算を実行 12 それぞれのプロセスを時間軸で見る 仕事Aをする 仮想CPU-1 仕事Aの 計算 仕事Aの 計算 時間軸 • プロセス1(仮想CPU-1)は 実CPUが割り当てられていれば計算を実行 • そうでないときは(元の話では「入出力中」) 13 それぞれのプロセスを時間軸で見る 仕事Aをする 仮想CPU-1 仕事Aの 計算 仕事Aの 計算 時間軸 • プロセス1(仮想CPU-1)は 実CPUが割り当てられていれば計算を実行 • そうでないときは(元の話では「入出力中」) CPUを使わない/入出力を待っている状態 14 それぞれのプロセスを時間軸で見る 仕事Aをする 仮想CPU-1 仕事Aの 計算 仕事Aの 計算 時間軸 「状態」という眼で見ると • CPUで処理を実行中の状態 か • 入出力を待っていてCPUを使わない状態 15 もう少し細かく見ると それぞれのプロセスについて • CPUで処理を実行中の状態 16 前のページで見た もう少し細かく見ると それぞれのプロセスについて • CPUで処理を実行中の状態 これも前のページで見た • 入出力の終わるのを待っている状態 (CPUを使っていない) 17 もう少し細かく見ると それぞれのプロセスについて • CPUで処理を実行中の状態 • 入出力の終わるのを待っている状態 (CPUを使っていない) • CPUが空くのを待っている状態 (この時もこのプロセスはCPUを使っていない) の3つの状態が考えられる 18 もう少し説明しよう プロセスが何かを待っている時 • 2通りの理由が考えられる 19 プロセスが何かを待っている時 • 2通りの理由が考えられる • 入出力などCPUが自分では制御できない ことが終わるのを待っている時 20 プロセスが何かを待っている時 • 2通りの理由が考えられる • 入出力などCPUが自分では制御できない ことが終わるのを待っている時 • 自分は今でも実行できる (何かが終わるのを 待っているわけではない) のに CPUを他の人が使っているために CPUが空くのを待っている時 21 プロセスが何かを待っている時 • 2通りの理由が考えられる • 入出力などCPUが自分では制御できない ことが終わるのを待っている時 • 自分は今でも実行できる (何かが終わるのを 待っているわけではない) のに CPUを他の人が使っているために CPUが空くのを待っている時 この2つを区別する 22 プロセスが何かを待っている時 • 2通りの理由が考えられる 事象待ち状態 • 入出力などCPUが自分では制御できない ことが終わるのを待っている時 • 自分は今でも実行できる (何かが終わるのを 待っているわけではない) のに 実行可能状態 CPUを他の人が使っているために CPUが空くのを待っている時 この2つを区別する 23 計算実行中状態と併せると • 3つの状態が考えられる 24 計算実行中状態と併せると • 3つの状態が考えられる • 実行中 CPUで処理が実行中の状態 • 事象待ち 入出力などが終わるのを 待っている状態 • 実行可能 CPUが空くのを待っている状態 別名「レディ状態」とも呼ぶ 25 もう少しあります 「状態遷移」の考え方 26 「状態遷移」とは • 状態の「移り変わり」という意味 27 「状態遷移」とは • 状態の「移り変わり」という意味 • いくつかの(有限個の)状態の間を遷移する 28 「状態遷移」とは • 状態の「移り変わり」という意味 • いくつかの(有限個の)状態の間を遷移する •例 単純な信号機 赤 → 青 → 黄 → 赤 の順で変化する 変化のきっかけは、予め決めた時間の経過 29 「状態遷移」とは • 状態の「移り変わり」という意味 • いくつかの(有限個の)状態の間を遷移する •例 単純な信号機 赤 → 青 → 黄 → 赤 の順で変化する 変化のきっかけは、予め決めた時間の経過 動作の様子を図に描いてみる (状態遷移図と呼ぶ) 30 「状態遷移」とは • 状態の「移り変わり」という意味 • いくつかの(有限個の)状態の間を遷移する •例 単純な信号機 X秒経過 状態 「青」 状態 「黄」 Y秒経過 Z秒経過 信号機の状態遷移図 31 状態 「赤」 「状態遷移」とは • 状態の「移り変わり」という意味 • いくつかの(有限個の)状態の間を遷移する •例 単純な信号機 ・状態を長丸で書く 状態の名前を長丸の中に書く 状態 「黄」 状態 「青」 信号機の状態遷移図 32 状態 「赤」 「状態遷移」とは • 状態の「移り変わり」という意味 • いくつかの(有限個の)状態の間を遷移する •例 単純な信号機 ・状態を長丸で書く 状態の名前を長丸の中に書く ・状態間の遷移を矢印で書く X秒経過 状態 「青」 状態 「黄」 遷移を起こす条件を傍に書く Y秒経過 Z秒経過 信号機の状態遷移図 33 状態 「赤」 では、プロセスの「状態遷移」は 34 では、プロセスの「状態遷移」は • プロセスの状態の「移り変わり」 35 では、プロセスの「状態遷移」は • プロセスの状態の「移り変わり」 • プロセスの状態は? 36 では、プロセスの「状態遷移」は • プロセスの状態の「移り変わり」 • プロセスの状態は そうです! 「実行中」「事象待ち」「実行可能」の3つ 37 では、プロセスの「状態遷移」は • プロセスの状態の「移り変わり」 • プロセスの状態は 「実行中」「事象待ち」「実行可能」 • では、状態遷移(移り変わり)は? 38 条件は? では、プロセスの「状態遷移」は • プロセスの状態の「移り変わり」 • プロセスの状態は 「実行中」「事象待ち」「実行可能」 • では、状態遷移(移り変わり)は? 1つ1つよく考えてみましょう! 39 条件は? では、プロセスの「状態遷移」は • プロセスの状態の「移り変わり」 • プロセスの状態は 「実行中」「事象待ち」「実行可能」 • では、状態遷移(移り変わり)は? 条件は? 1つ1つよく考えてみましょう! 「実行中」から他の2つへ移るのは? 40 「実行中」から他の2つへ移るのは? • CPUで実行していたプロセスを中断して • 事象待ち (例えば入出力完了待ち) に移るのは? どういう時でしょうか? 41 「実行中」から他の2つへ移るのは? • CPUで実行していたプロセスを中断して • 事象待ち (例えば入出力完了待ち) に移るのは? どういう時でしょうか? >そう、写真でタイマーを押してパシャッと なるのを待つ感じ 42 「実行中」から他の2つへ移るのは? • CPUで実行していたプロセスを中断して • 事象待ち (例えば入出力完了待ち) に移るのは? どういう時でしょうか? >そう、写真でタイマーを押してパシャッと なるのを待つ感じ 入出力だと、入力(出力)頼むって言って データが入ってくる(印刷される)のを待つ 43 「実行中」から他の2つへ移るのは? • CPUで実行していたプロセスを中断して • 事象待ち (例えば入出力完了待ち) に移るのは? どういう時でしょうか? >つまり事象を仕掛けたとき、です 44 「実行中」から他の2つへ移るのは? • CPUで実行していたプロセスを中断して • 事象待ち (例えば入出力完了待ち) に移るのは? >事象を仕掛けたとき • では、実行可能状態に移るのは? 45 「実行中」から他の2つへ移るのは? • CPUで実行していたプロセスを中断して • 事象待ち (例えば入出力完了待ち) に移るのは? >事象を仕掛けたとき • では、実行可能状態に移るのは? >これは「プロセスからCPUを取り上げる」 ことに相当します 46 「実行中」から他の2つへ移るのは? • CPUで実行していたプロセスを中断して • 事象待ち (例えば入出力完了待ち) に移るのは? >事象を仕掛けたとき • では、実行可能状態に移るのは? >これは「プロセスからCPUを取り上げる」 ことに相当します プリエンプションと呼びます 47 「実行中」から他の2つへ移るのは? • CPUで実行していたプロセスを中断して • 事象待ち (例えば入出力完了待ち) に移るのは? >事象を仕掛けたとき • では、実行可能状態に移るのは? >これは「プロセスからCPUを取り上げる」 ことに相当します プリエンプションと呼びます 後で出てくる「CPUスケジューリング」で 使います。ここでは置いておきます 48 「実行中」から他の2つへ移るのは? • CPUで実行していたプロセスを中断して • 事象待ち (例えば入出力完了待ち) に移るのは? >事象を仕掛けたとき • 実行可能状態に移るのは? >プロセスからCPUを取り上げるとき (プリエンプション) • となりました。では事象待ちの場合は? 49 「事象待ち」から他の2つへ移るのは? • 事象待ち状態のプロセスは、 待っていた事象が起きるとどうするか? • 例えば入力完了待ちが、入力が完了すると どうするでしょうか? 50 「事象待ち」から他の2つへ移るのは? • 事象待ち状態のプロセスは、 待っていた事象が起きるとどうするか? • 例えば入力完了待ちが、入力が完了すると どうするでしょうか? • 入力を受取って次の処理を始めるでしょう >つまり、実行を始めるわけです 51 「事象待ち」から他の2つへ移るのは? • 事象待ち状態のプロセスは、 待っていた事象が起きるとどうするか? • 例えば入力完了待ちが、入力が完了すると どうするでしょうか? • 入力を受取って次の処理を始めるでしょう >つまり、実行を始めるわけです では「実行状態」にするのか? 52 「事象待ち」から他の2つへ移るのは? • 事象待ち状態のプロセスは、 待っていた事象が起きるとどうするか? • 例えば入力完了待ちが、入力が完了すると どうするでしょうか? • 入力を受取って次の処理を始めるでしょう >つまり、実行を始めるわけです では「実行中状態」にするのか? 実は、「実行可能状態」にします 53 「事象待ち」から他の2つへ移るのは? • 事象待ち状態のプロセスは、 待っていた事象が起きるとどうするか? • 実行可能状態にする なぜ「実行中」にしないで「実行可能」か? 54 「事象待ち」から他の2つへ移るのは? • 事象待ち状態のプロセスは、 待っていた事象が起きるとどうするか? • 実行可能状態にする なぜ「実行中」にしないで「実行可能」か? 脱線になりますが、細かく説明します。 55 脱線 なぜ「実行中」にしないで「実行可能」か? • Aが事象待ちだと、CPUは他の仕事Bをしています つまり、CPU上には実行中のプロセスBがいます • 56 脱線 なぜ「実行中」にしないで「実行可能」か? • Aが事象待ちだと、CPUは他の仕事Bをしています つまり、CPU上には実行中のプロセスBがいます • この時、事象待ちだったプロセスAを いきなり「実行中」にすると、 今CPUを使っているプロセスBを追い出します 57 脱線 なぜ「実行中」にしないで「実行可能」か? • Aが事象待ちだと、CPUは他の仕事Bをしています つまり、CPU上には実行中のプロセスBがいます • この時、事象待ちだったプロセスAを いきなり「実行中」にすると、 今CPUを使っているプロセスBを追い出します • もしAがBと同程度に重要(優先度が同程度)なら わざわざBを追い出すことも無いわけです 58 脱線 なぜ「実行中」にしないで「実行可能」か? • Aが事象待ちだと、CPUは他の仕事Bをしています つまり、CPU上には実行中のプロセスBがいます • この時、事象待ちだったプロセスAを いきなり「実行中」にすると、 今CPUを使っているプロセスBを追い出します • もしAがBと同程度に重要(優先度が同程度)なら わざわざBを追い出すことも無いわけです Bが済んでからAを続けたってよいでしょう 59 脱線 なぜ「実行中」にしないで「実行可能」か? • Aが事象待ちだと、CPUは他の仕事Bをしています つまり、CPU上には実行中のプロセスBがいます • この時、事象待ちだったプロセスAを いきなり「実行中」にすると、 今CPUを使っているプロセスBを追い出します • またBがAより重要(優先度が高い)なら AがBを追い出してはいけないでしょう • だから実行可能でCPUが空くのを待たせるわけです 60 「事象待ち」から他の2つへ移るのは? 戻ります • 事象待ち状態のプロセスは、 待っていた事象が起きるとどうするか? • 実行可能状態にする なお、事象待ち状態から出てゆく矢印は これ1つしかありません ではその次 61 「実行可能」から他の2つへ移るのは? • 実行可能状態のプロセスは、 次にどういう状態遷移があるか? 62 「実行可能」から他の2つへ移るのは? • 実行可能状態のプロセスは、 次にどういう状態遷移があるか? • 実行可能 → 実行中 が考えられます これはCPUが空いたので、CPUを待っていた プロセスが実行を始めるときです 63 「実行可能」から他の2つへ移るのは? • 実行可能状態のプロセスは、 次にどういう状態遷移があるか? • 実行可能 → 実行中 が考えられます これはCPUが空いたので、CPUを待っていた プロセスが実行を始めるときです CPUを与えて実行を始めさせることを プロセスをディスパッチすると呼びます 64 「実行可能」から他の2つへ移るのは? • 実行可能状態のプロセスは、 次にどういう状態遷移があるか? • 実行可能 → 実行中 が考えられます きっかけはCPUが空いてディスパッチされた為 • 実行可能 → 事象待ち なぜ? 65 はあり得ません 「実行可能」から他の2つへ移るのは? • 実行可能状態のプロセスは、 次にどういう状態遷移があるか? • 実行可能 → 実行中 が考えられます きっかけはCPUが空いてディスパッチされた為 • 実行可能 → 事象待ち はあり得ません 実行可能はCPUの空き待ち状態なので、まだ CPUは割当てられていません。 命令を実行しないので、事象待ちを発生させる 操作 (入力起動とか) が起こらないからです 66 全体をまとめると プロセスの状態遷移は、 67 全体をまとめると プロセスの状態遷移は、 • 実行中 → 事象待ち(入出力起動などで待ちを 仕掛けた為) • 実行中 → 実行可能(CPUの取上げの為 プリエンプション) • 事象待ち → 実行可能(事象が発生した為) • 実行可能 → 実行中(CPUが空いてディスパッチ された為) 68 全体をまとめると プロセスの状態遷移は、 • 実行中 → 事象待ち(入出力起動などで待ちを 仕掛けた為) • 実行中 → 実行可能(CPUの取上げの為 プリエンプション) • 事象待ち → 実行可能(事象が発生した為) • 実行可能 → 実行中(CPUが空いてディスパッチ された為) では、状態遷移図を描いてみましょう 69 状態遷移図に描くと • 実行中 → 事象待ち(事象待ちを仕掛けた為) • 実行中 → 実行可能(CPUの取上げプリエンプションの為) • 事象待ち → 実行可能(事象が発生した為) • 実行可能 → 実行中(ディスパッチされた為) 実行可能 状態 事象発生 CPU割当て (ディスパッチ) CPU取上げ (プリエンプション) 事象待ち 状態 実行中 状態 事象待ち プロセスの状態遷移図 70 まとめると • 1つ1つのプロセスの「状態」を管理する • 3つの状態がある • ? • ? • ? • 状態間の遷移を考える • 状態遷移図が描ける 71 自分で描けますね おまけの状態遷移 • 教科書には「生成」と「消滅」がある • プロセスが無い状態から生成されると実行可能になる • 実行中のプロセスが消滅(=自殺)する 生成 実行可能 状態 事象発生 あまり本質でない ので紹介するだけ にしておく 72 CPU割当て (ディスパッチ) CPU取上げ (プリエンプション) 事象待ち 状態 実行中 状態 事象待ち プロセスの状態遷移図 消滅 プロセスの状態遷移について 理解できましたか? 〇 次へ 73 ×