計算機システム概論・2回目 本日のトピック:プロセスについて プロセスとは プロセスのスケジューリングについて 多重プロセスの問題 排他制御 プロセス間通信 1 前回の復習:時分割処理 時分割処理(タイムシェアリング) プロセッサが,複数のプログラムを少しずつ実行する 短い時間(タイムスライス)で,プログラムを切替える 遂次処理 時分割処理 時間経過 考え方次第では... ユーザに仮想計算機を割り当て, 仮想計算機の動作を,少しずつ シミュレートして進めていく 時間経過 実際の 計算機 仮想計算機 2 シミュレートとは シミュレート = 模擬,真似 仮想計算機をシミュレートするとは... 計算機の中に別の仮想計算機(V)があると想定する Vは独自のプログラムを持っている Vがどのような振る舞いをするか,Vのプログラムに 従って(外部の計算機)が計算する (必要であれば)ユーザとVと の間で,入出力の中継を行う V 3 仮想計算機とプロセス 仮想計算機が保持すべきもの 独自のプログラム 独自のメモリ状態 独自のレジスタ状態 独自の入出力管理状態 その仮想計算機の状態 その仮想計算機のユーザ名 他の仮想計算機との関係 : プロセス=仮想計算機 (他の意味づけも可能) 実際の 計算機 仮想計算機 プロセス 4 プロセスを「見る」 身近なOSで,実際にプロセスを見てみる Windows: タスクマネージャを起動 UNIX系OS: ps コマンドを利用 確認できること 多くのプロセスが同時並行的に実行されている ユーザのプロセス以外に,システムのプロセスが存在 システムプロセスは,OSの機能をサポートするもの 5 プロセスの一生 プロセスは,動的に生成されたり消滅したりする プロセスの典型的な一生: 1. ユーザまたはOSにより生成(起動)される (正確には,ユーザやOSのプロセスにより生成...後述) 2. 必要な処理や計算を行う [活動中] 3. 自主的に終了する, または外部から強制的に終了させられる 6 プロセスの状態 活動中のプロセスが取りうる状態は3種類ある: 実行中状態 プロセッサの時分割処理の順番がまわってきて, 処理が実際に進んでいる状態 実行待ち状態 プロセッサがまわってくるのを待っている状態 入出力待ち状態 入出力処理が終わるのを待っている状態 プロセスの状態は,OSによって変更される 7 プロセスの状態遷移 実行待ち状態 プロセス生成 強制終了 順番がまわってくる タイムスライス終了 実行中状態 入出力処理完了 プロセス終了 入出力処理開始 入出力待ち状態 強制終了 8 プロセススケジューラ システムには,一般に複数のプロセスが存在する プロセスの交通整理が必要 プロセススケジューラ: プロセスの状態を制御するための,OSの「部品」 どのプロセスを,どの状態にするか管理する 別のプロセスに切り替えるときに,プロセスを 実行する環境のセットアップを行う 現在実行中プロセスの状態を退避 新しく実行されるプロセスの状態を復帰 9 プロセススケジューラの動作概念図 スケジューラにより,プロセス状態が同期的に変更される 実行中状態にあるプロセスは一個だけ (プロセッサが複数あるシステムは除く) スケジューラの動作 P1 P2 P3 P4 P5 時間経過 入出力処理中 入出力処理中 実行中 実行待ち 入出力待ち 10 プロセススケジューラの仕組み 交通整理のために,スケジューラはプロセスを分類管理 実行中プロセス 実行待ちプロセス 入出力待ちプロセス P1 a c P2 P3 P7 P4 P5 P6 P8 b プロセススケジューラの行う操作: a. 実行中プロセスを入出力待ちプロセスに(sleep) b. 入出力待ちプロセスを実行待ちプロセスに(wakeup) c. 実行中プロセスを切り替え (switch) 11 プロセススケジューラの動作イメージ プロセススケジューラは... 常にプロセスを監視しているわけではない 普段は眠っていて,何かのキッカケで起きて来て操作を行う タイマー キッカケ = 割り込み 割り込みも何種類かある プロセス スケジューラ 外部装置 プロセス 12 割り込み1:API呼び出し 入出力処理依頼 プロセスは,入出力装置に直接アクセスできない API (Application Program Interface)を介し,OS に処理を依頼 ⇒ 仕事を依頼したら,自分は「スリープ」状態に入る ...正確には,プロセススケジューラが,プロセスを「眠らせる」 プロセスA OSの入出力処理部 プロセスB API 入出力開始 呼出元sleep switch 実行中 実行待ち 入出力待ち 13 割り込み2:入出力完了 入出力完了 「Aさんに頼まれた仕事,終わったよ」 ⇒ プロセス A を「起こし」,順番待ち行列に並ばせる プロセスA プロセスB 入出力 完了 OSの割込み処理部 2 制御横取り 3 wakeup 4 制御返却 割 込 1 実行中 実行待ち 入出力待ち 14 割り込み3:タイマー タイマ割込み処理からの呼び出し タイマ...タイムスライスの終了を知らせる プロセスA プロセスB タイマ OSの割込み処理部 2 制御横取り 3 switch 割 込 1 実行中 実行待ち 15 プロセススケジュールの戦略 プロセススケジューラの仕事: プロセスや入出力の進行にあわせ,交通整理をすること プロセスの切り替え(switch)を行うとき, どの実行待ちプロセスを処理するか決定すること ...いくつかの戦略が知られている スケジュール戦略を変えると,システムの振舞いが変わる 16 スケジューリングの性能指標(1) スケジュール戦略を考えるときに考慮すべき要素: CPU利用率 スループット:単位時間あたりの仕事量 ターンアラウンド時間: プロセスを起動してから完了するまでの時間 プロセス起動 プロセス終了 時間 ターンアラウンド時間 17 スケジューリングの性能指標(2) スケジュール戦略を考えるときに考慮すべき要素: 待ち時間: プロセスが,実行待ち状態で過ごす時間の合計 応答時間: 最初の処理が行われるまでの時間 プロセス起動 プロセス終了 時間 待待 待待待 待待 待待待 応答時間 待ち時間 平均値,最大値,最小値のどれに着目するかも重要 18 スケジュール戦略:単純な方式 横取りのない戦略(non-preemptive, 時分割処理は不要) 先着順 大きなプロセスの後ろは,長時間待たされる 早く終わりそうなものを先に済ます 実行時間をあらかじめ見積もるのは難しい 優先度順 優先度の決め方が問題 優先度の低いプロセスが,なかなか終わらない ⇒エージングによる優先度の調整: 長時間待っているプロセスの優先度を上げる 19 スケジュール戦略:やや複雑な方式 横取りのある戦略(preemptive, 時分割処理が必要) 「タイムスライスをどのように割り当てるか」 ラウンドロビン 実行待ちプロセスに公平に割り当てる AB CAB CAB CAB C 優先度順+ラウンドロビン 優先度の高いプロセスは,割当の頻度を上げる ABACABACABAC ...プロセスAの優先度が高い場合 20 スケジュール戦略:さらに複雑な方式 横取りのある戦略(preemptive, 時分割処理が必要) 多段フィードバック方式 プロセスを優先度ごとにまとめる 同じ優先度の中ではラウンドロビン 一定時間内に実行が終わらなければ, プロセスの優先度が下げられる 優先度 高 A B C A B 低 D E F C D E F 21 多重プロセスの問題 ここまでの話: 個々のプロセスは,互いに独立している...という立場 ここからの話: 複数のプロセスが存在する場合特有の問題 (多重プロセスの問題) プロセスの生成について プロセスが互いに邪魔をしないための仕組み プロセスが互いに協力するための仕組み 22 プロセスの生成 プロセスは誰が作るのか... 基本的には,プロセスが新しいプロセスを作る プロセス1 ...プロセス3の親プロセス プロセス2 プロセス4 プロセス3 ...プロセス1の子プロセス プロセス5 プロセス6 23 プロセスの構成例 RedHat Linux: ps – eo “%p %c %P” で表示された情報の一部を抜粋して図示 0: init 2: keventd 3: ksoftirqd 4: kswapd 5: bdflush 6: kupdated 7: jfsIO 722: syslogd 747: portmap 775: rpc.statd 870: rpciod 871: lockd 31840: in.telnetd 1031: xinetd 1086: lpd 1320: smbd 30676: smbd 1325: nmbd 1388: gdm 1396: gdm 1397: X 18169: tcsh 32097: ps ユーザのプロセス 24 UNIXにおけるプロセスの生成 forkシステムコールによるプロセス複製 execシステムコールによるプログラム切り替え : child = fork(); if (child == 0) exec(子プロセス); 親プロセスの処理 : fork 親 複製 子 親プロセス fork fork 親 子 子プロセス 25 排他制御 複数のプロセスに共用される資源: 複数プロセスにより同時に参照される可能性がある 例:「整数値が書かれたファイルを参照し,値を1増やす」 3 P1 3 P1 4 5 期待する動作 P2 4 P2 4 少しタイミングがずれた場合 読んでから書くまで,他のプロセスにファイルを参照させない ようにプロセスを制御する必要がある ... 排他制御 26 クリティカルセクション クリティカルセクション(CS): 他のプロセスとは,排他的に実行しなければならない部分 排他制御を適切に実行するためには... CSの最初と最後で,他プロセスに “stop”, “go”をかける CSに入るときは,“go” が出るまで待機する プロセス1 CS プロセス2 待機 CS 27 排他制御を実現する仕組み 排他制御のため,stop, go をかける必要がある stop, go をかける操作も,排他的に実行の必要あり OSが stop, go の操作を提供することで,ジレンマを解決 stop, go 操作の実現方法:何通りか知られている lock, unlock セマフォ モニタ 28 デッドロック 同時に複数のstop, go が必要になる場合も プロセス1 ファイルAをオープン ファイルBをオープン× A B プロセス2 ファイルBをオープン ×ファイルAをオープン ファイルAをクローズ ファイルBをクローズ ファイルBをクローズ ファイルAをクローズ どちらのプロセスも永久に進めない ⇒ デッドロック状態 stopのかけ方に順番を定める等,運用で回避する必要アリ 29 プロセス間の協調機構 排他制御と同じ仕組みを利用する方式: 排他制御:CSか否かの1ビットを他プロセスに伝える 基本的に同じ仕組みで,より大きな情報を伝達可能 ソケット: プロセスとプロセスをつなぐ「仮想通信路」 パイプ: ソケットの特殊な用法 UNIXで頻繁に利用される 30 本日のまとめ プロセスとは OSにおけるプロセスの取り扱い プロセススケジューラについて 排他制御と協調機構 次回の講義...入出力機構について 課題(結果の提出不要): 自分が普段使っているコンピュータで,どのような プロセスが走っているか確認せよ 31
© Copyright 2024 ExpyDoc