operating systems - vilabvilab.org/os2019/os2019-06.pdf ·...
TRANSCRIPT
Operating Systemsプロセスのスケジューリング
2019-06
1
プロセスとは(復習)p プロセス(process)とは
n 起動して“実行中”のプログラムn コンピュータの中で“動いているもの”(CPUを使っているもの)n 「タスク」(task)ともいう
p OSによるプロセスの管理n プロセスの生成(プログラムの開始とメモリ確保)n プロセスの消滅(プログラムの停止とメモリ開放)n プロセスの切り替え,優先順位の管理,などなど…
p プロセスの“正体”を,よりハードウェア的に考えると…n 「動いている」or「実行中」 = CPUで演算処理をしているn プログラムとデータがある = メモリの領域を占めている
2019 H. SHIOZAWA http://vilab.org
2
マルチタスク(マルチプロセス)p マルチタスクとは?
n 1つのCPUで複数のプログラムを(見かけ上)“同時に”実行させるn 前のプログラムが終わっていなくても,新しいプログラムを起動できる
p マルチタスクの基本アイデアn あるプログラムがディスクの入出力などを待っているあいだは,別の
プログラムが空いているCPUを使えるようにするn プロセスを非常に高速なタイムスライス(ミリ秒単位)で切り替えて,
同時に実行しているように見せかける
2019 H. SHIOZAWA http://vilab.org
3
プロセスAプロセスBプロセスCプロセスD
時間起動
入出力待ちや時間切れで一時停止
終了
マルチタスクの利点p 実行効率の向上
n CPUの時間を,無駄なく有効に活用できるn OSカーネルやデバイスドライバの機能も実現しやすい
p マルチユーザ機能n 複数のユーザがコンピュータを利用するようなサーバが実現できるn 1人での使用でも,同時に複数のソフトウェアを使えるようになる
p 多様な機能のプロセスn バックグラウンド(裏)で動作し続けるような処理が実現できるn あるプロセスを実行中に,それより優先度の高いプロセスが発生した
場合,中断して対応できるn 指定時間に自動的に起動するプログラムなどが作りやすい
2019 H. SHIOZAWA http://vilab.org
4
マルチタスクの種類p ノンプリエンプティブなマルチタスク
n 別名: 協調型マルチタスク,疑似マルチタスクn OSはほとんどCPUの時間管理をしないn OSは実行中のプロセスからCPUを横取り(プリエンプション)できないn 各プロセスは,適当なタイミングで自主的・明示的にCPUの使用権を
次のプロセスに譲らなければならないn OSのAPIを利用時に,制御がOSに移り,次のプロセスに切り替わるn 例: 16bit時代のWindowsやMac,組込OS等(HOSの初期状態)
p プリエンプティブなマルチタスクn 本来のマルチタスクn OSがタイマー割り込み等を利用してCPUの時間管理をするn OSは,適当なタイミングごとに,実行中のプロセスからCPUを横取り
(プリエンプション)して,次のプロセスを切り替えるn 例: 低機能な組み込みシステムを除く,ほとんどのコンピュータ
2019 H. SHIOZAWA http://vilab.org
5
プロセスの状態遷移p マルチタスクにおけるプロセスの一生
n 単純なOSの例
2019 H. SHIOZAWA http://vilab.org
6
実行可能状態
Ready
実行状態
Run
待ち状態
Wait
事象の発生 事象(割り込みなど)の発生待ち
プリエンプション(横取り・交替)
ディスパッチ(割り当て)
消滅(終了)生成(メモリ割り当て)
UNIX/Linuxの状態遷移2019 H. SHIOZAWA http://vilab.org
7
実行可能状態(CPUの空き待ち)
実行状態(CPUを占有)
待ち状態
事象の発生事象(入出力割り込み等)
の発生待ち
プリエンプション(横取り・交替)
ディスパッチ(割り当て)
終了生成(メモリ割り当て)
ゾンビ状態(結果だけ保持) 消滅
停止状態(休眠状態)
ユーザや他のプロセスからの停止停止解除
(システムコール)
実行プロセスの切り替えp Run → Ready
n OSが現在のプロセスを中断し,順番を次にまわす(プリエンプション)
p Run → Waitn プロセスがデバイスなどの応答待ちに入って中断する
p Ready → Runn OSがCPUに新しいプロセスを割り当てる(ディスパッチ)n キュー(待ち行列)というデータ構造で順番が管理されている
p スケジューリングn CPUでプロセスを実行する時間(順番)を管理することn 優先するプロセスを早く実行させたり,順番と時間を管理するn 用途に応じた様々なスケジューリングアルゴリズムがある
2019 H. SHIOZAWA http://vilab.org
8
プロセスキューp プロセスの実行順序をどうやって管理しているか
n プロセスキュー=カーネル内にあるプロセスの順番表n プロセス制御ブロックへのポインタが,実行順につながれている
2019 H. SHIOZAWA http://vilab.org
9
実行中プロセス プロセス
プロセス プロセス プロセス プロセス
プロセス プロセス
プロセス プロセス プロセス プロセス
優先度 高
優先度 低
待ちキュー
実行可能キュー
キュー (Queue)p キュー(Queue)とは
n 「待ち行列」と訳される (代数学の行列(matrix)とは無関係)n 何かを待っている行列を表すデータ構造n □ ← ● ● ● ● ● ● ● ● ● (スーパーのレジなど)
p FIFO(先入先出方式)n First In First Out n 基本的には,先着順に処理されるデータ構造n 反対: LIFO (Last In First Out) = スタック
p 実行可能キュー(OS用語)n 別名「レディキュー」「ランキュー」n CPUの空きを待っている実行可能状態のプロセスの待ち行列
2019 H. SHIOZAWA http://vilab.org
10
マルチタスクの実現方法p メモリはプロセスごとに分割できる
n メモリは番地があって土地みたいなものn 複数のプログラムを,主記憶に同時に読み
込んでおくことは容易
p しかし,CPUは分割できないn 1つのCPUコアが実行できる命令は1つn 実行プロセスを,高速に次々と切り替える機
能が必要になる
p コンテクストスイッチ(文脈切り替え)n 実行プロセスのコンテクスト(途中経過)を
カーネル内に一時退避し,n 退避してあった別のプロセスのコンテクスト
を読み出して中断したところから続行する
2019 H. SHIOZAWA http://vilab.org
11メモリマップ
プロセスA
プロセスB
OS(カーネル)
空き
...
CPU
実行
中
実行コンテクスト2019 H. SHIOZAWA http://vilab.org
12
プロセスの「実行コンテクスト」(実行文脈)という
コード領域プログラム本体
静的データ領域
空き
スタック領域(一時変数)
ヒープ領域
プロセス空間(プロセスに割り当てられたメモリ空間)
実行中のCPUの状態
汎用レジスタ1 値1汎用レジスタ2 値2汎用レジスタ3 値3
・・・プログラムカウンタ 番地Aスタックポインタ 番地Bフラグレジスタ フラグ状態
番地A
番地B
現在実行中の命令
スタックのトップ
プロセス スケジューリングp スケジューリングとは
n スケジューリング = スケジュールを決めるn CPUでプロセスを実行する時間(順番)を管理することn 用途(目的)に応じた様々なスケジューリングアルゴリズムがある
p スケジューリングの目的n CPUの利用効率をより高めるn 人間等への応答時間をよくするn 仕事の優先度(緊急度)を反映させる
p プリエンプション(横取り)n OSが実行プロセス(CPU利用)を強制的に切り替えることn 多くのスケジューリングアルゴリズムは,プリエンプションが前提
2019 H. SHIOZAWA http://vilab.org
13
スケジューリングアルゴリズムp 先着順スケジューリング
n FCFS: First Come First Service
p 最短時間順スケジューリングn SJF: Shortest Job First
p 実行期限順スケジューリングn EDF: Earliest Deadline First
p 優先度スケジューリング
p ラウンドロビンスケジューリングn RR: Round-robin
2019 H. SHIOZAWA http://vilab.org
14
先着順スケジューリングp FCFSスケジューリング
n First Come First Servicen 最初に来たプロセスから,最初にサービスを受ける
p プリエンプションの有無n なし ⇒ 基本的にはシングルタスクのための単純なスケジューリング
p 現実にたとえてみると…n ゲームセンターで,ゲーム機に早く並んだ人から順にゲームができるn 前の人が終わるまで,次の人はずっと待っている
p 特徴n 原理が単純で,実現が容易であるn 問題点は? ⇒ そもそもマルチタスクと言えない
2019 H. SHIOZAWA http://vilab.org
15
最短時間順スケジューリングp SJFスケジューリング
n Shortest Job Firstn 最も短い時間で終わる仕事から順番に取りかかる
p プリエンプションの有無n 基本的には,なし (いったん始めたプロセスは中断しない)n プリエンプション有りに改良 ⇒ Shortest Remaining Time First
p 現実世界にたとえてみると…n 量の少ない宿題から早く片付ける
p 特徴n プロセスの“平均”待ち時間が最小になるn 問題点? ⇒ 所要時間は実行前に見積もれないことが多い
2019 H. SHIOZAWA http://vilab.org
16
実行期限順スケジューリングp EDFスケジューリング
n Earliest Deadline First n “締め切り”が一番近いプロセスから実行する
p プリエンプションn より締め切りの近いプロセスが発生したら,それに切り替える
p 現実社会にたとえてみると…n 出発時刻の早い飛行機の人から,優先的に搭乗手続きをする
p 特徴n ロボットの制御など,リアルタイム(実時間)で動くシステム向けn 問題点? ⇒ 実装が難しく,全体として最悪のケースが予測しにくい
2019 H. SHIOZAWA http://vilab.org
17
優先度スケジューリングp 優先度スケジューリング
n 設定された優先度が高いプロセスから実行するn 優先度が同じ場合は,FCFSなど他のスケジューリングで割り当てる
p プリエンプションn より優先度の高いプロセスが発生したら,それに切り替える
p 現実社会にたとえてみるとn 社員食堂に並んでいて,上司が来たら順番を譲らなければならない
p 特徴n リアルタイムOS向き (ITRONはFCFS+優先度)n 問題点? ⇒ いつまでも後回しになるプロセスが発生 = 飢餓状態
2019 H. SHIOZAWA http://vilab.org
18
ラウンドロビンスケジューリングp Round-Robinスケジューリング
n タイマー割り込みを利用し,全プロセスを一定時間のタイムスライス(クォンタムタイム,数十~数百ミリ秒)で切り替えて実行していく
n 「持ち回り」のことを英語ではRound-robinという
p プリエンプションn タイムスライスが経過したプロセスは横取りされ,次に順番を譲る
p 特徴n 平等・均一で,常に状態表示が必要な人間相手のシステムに向くn 問題点? ⇒ 時間管理や切り替え自体の処理が多い
p 優先度つきラウンドロビンn UNIX,Linux,Windows等ではRRに優先度を組み合わせている
2019 H. SHIOZAWA http://vilab.org
19
演習課題(後日提出)p 課題 6a スケジューリングアルゴリズム
n 学校で以下のような宿題が出された。n これらをOSの「FCFS」,「SJF」,「EDF」,「ラウンドロビン」の各方式と
同様な考え方でスケジューリングすると,どのような順序に処理してどのような結果になるか説明しなさい。
科目 出題日 締め切り かかる時間A 6月1日 6月11日 5日間B 6月2日 6月30日 7日間C 6月4日 6月15日 3日間D 6月5日 6月8日 1日間
n 問題の単純化のため,1日に取り組める宿題の数は1つだけとする。n また,宿題は出題されたその日から取り組めるものとする。
2019 H. SHIOZAWA http://vilab.org
20
演習課題(後日提出)p 課題 6b HOSにおけるFCFS+優先度スケジューリング
n この課題の狙いは,実際のプログラミングによって,FCFSスケジューリングと優先度スケジューリングの仕組みを理解することである。
n HOSはシンプルな組み込みOSなので,基本的なスケジューリングは,FCFS(先着順)と優先度によるものである。
n FCFSはタスクの起動順,優先度はタスクの設定情報によって決まる。
p 手順n sample¥win-scheduling を(そのまま)実行する。n 実行結果を示し,なぜそのような動作するのか,スケジューリングの観
点から考察(理由を説明)せよ。n 各タスクの優先度や start 関数での実行順序を変更していくつかの
組み合わせを試し,それらの効果について考察せよ。
2019 H. SHIOZAWA http://vilab.org
21
演習課題(後日提出)p 課題 6c HOSにおけるノンプリエンプティブなマルチタスク
n この課題の狙いは,ノンプリエンプティブな(協調的な)マルチタスクの動作とそのためのプログラミング作法を理解することである。
n プリエンプティブでないOSでは,プロセス(タスク)が適当なタイミングで自主的に実行権を手放すことで円滑なマルチタスクを実現する。
n HOSの場合,レディキューを回して次のタスクを実行する rot_rdq(rotate ready queue)というサービスコール(API)を利用する。
p 手順n 課題6bで変更した sample¥win-scheduling を元に戻す。n ソースコードでコメントアウトされている各タスクの rot_rdq 関数を
有効にし,タスクが自主的に実行権を次のタスクに譲るようにせよ。n 実行結果を示し,なぜそのような動作するのか,スケジューリングの観
点から考察(理由を説明)せよ。
2019 H. SHIOZAWA http://vilab.org
22
演習課題(後日提出)p 課題 6d HOSにおけるラウンドロビンスケジューリング
n この課題の狙いは,ラウンドロビンスケジューリングによるプリエンプティブな(真の)マルチタスクの仕組みを理解することである。
n ラウンドロビンスケジューリングでは,OSが一定周期で実行プロセスを順番に(かつ強制的に)切り替えていく必要がある。
n そのためにタイマー割り込みでスケジューラーを駆動し,プロセスの切り替えを行う。HOSでは割り込み対応版の irot_rdqを使う。
p 手順n 課題6cで変更した sample¥win-scheduling を元に戻す。n (擬似)タイマー割り込み処理である ostimer.c の中でコメントアウ
トされている if 文と irot_rdq の部分を有効にして実行する。n 実行結果を示し,なぜそのような動作するのか,スケジューリングの観
点から考察(理由を説明)せよ。
2019 H. SHIOZAWA http://vilab.org
23
次回:小テストとプログラミング実習p 小テスト(45分?)
n 第1回〜第6回に関する用語問題と記述問題
p プログラミング実習n 第7回の演習課題の説明と実習n 第1回〜第6回の演習課題の再確認と実習n レポート提出はその次の回
2019 H. SHIOZAWA http://vilab.org
24
HOS(µITRON)のタスク管理サービスコール 意味 説明cre_tsk create task タスクの生成acre_tsk 同上(ID自動割り当て)act_tsk activate task タスクの起動iact_tsk 同上(割り込み用)can_act cancel activation タスク起動予約の取り消しext_tsk exit task 自タスクの終了ter_tsk terminate task タスクの強制終了chg_pri change priority タスク優先度の変更get_pri get priority タスク優先度の参照rot_rdq rotate ready queue 実行可能キューの回転irot_rdq 同上(割り込み用)
2019 H. SHIOZAWA http://vilab.org
25
HOS(µITRON)のタスク管理2019 H. SHIOZAWA http://vilab.org
26
サービスコール 意味 説明dly_tsk delay task 自タスクの遅延slp_tsk sleep task 自タスクの休止(起床要求待ち)tslp_tsk 同上(タイムアウトあり)wup_tsk wake up task タスク起床要求iwup_tsk 同上(割り込み用)can_wup cancel wakeup タスク起床要求の取り消しrel_wai release wait 待ち状態の強制解除irel_wai 同上(割り込み用)sus_tsk suspend task 強制待ち状態への以降rsm_tsk resume task 強制待ち状態からの再開frsm_tsk force resume task 強制待ち状態からの強制再開