マエカワの備忘録的な何か

思い立ったが吉日

オペレーティングシステム 其の七 20170607

CPUスケジューリング

 簡単に言うと、仕事に優先度をつけ、やる順番をつけて実行するということ.これをCPUがやるってだけ.

 プロセスの選び方を理解するためにはプロセスの性質を理解する必要がある.
  ・CPU-boundプロセス
   →CPUをたくさん要求する.数値計算など.
  ・I/O-boundプロセス
   →I/Oデバイスをたくさん使いたいプロセス.ブラウザやシェルなどがその例.

 <評価基準>
  プロセスの良さを知るためには基準が必要.
   ①ターンアラウンド時間:プロセス開始から終了までの時間
   ②スループット:単位時間当たりのプロセス数
   ③応答性:入力に対する応答の速さ(割り込みハンドラに関連する)
   ④資源の利用効率:CPUに遊びがないかどうか
   ⑤公平性:CPUの割り当てに偏りがあってはいけない

  この評価基準からもわかるように、小さい仕事から片付けていったほうがターンアラウンド時間の平均が小さくなるため、その分お得になる,
  スループットはプロセス実行の順序に依存はしない.

基準の対立(トレードオフ

  ターンアラウンド時間と公平性
   短いプロセスを先に片づけたほうがお得
    →長いプロセス側は不公平感を覚える.

  CPU利用効率と応答時間
   応答時間を短くするためにビジーループをかけるとCPUが無駄になってしまう.


 バッチ処理:仕事の塊を順次実行する
  →資源の利用効率、スループットが重要になってくる(ユーザは待ってくれているから)

 リアルタイム処理:設定した締め切りまでに処理が完了する
  →応答性が重要(ビジーループでもいいから早く反応する)

スケジューリングのタイミング

  プリエンプティブスケジューリング
   ・CPUを強制的に取り上げる.
   ・割り込みなどがきっかけで切り替わるなど.

  ノンプリエンプティブスケジューリング
   ・プロセスがCPUを手放さない限り、プロセスは切り替わらない.
     →プロセスがいつまでもCPUを手放さない可能性がある.

ラウンドロビン(プリエンプティブ)

  最もよく用いられるスケジューリング
  実行したプロセスは後ろに並び、次のプロセスが実行状態に移るというある意味正統派.
  短い時間(タイムスライス)ごとにプロセスを交代させる方法.

  →度のプロセスについても実行のチャンスが巡ってくるので、公平性の面で優れている.
  →タイムスライスを大きくするとコンテキストスイッチの全体に対する割合が小さくなり、スループットが向上する.
   →しかし、プロセスの処理感覚が大きくなり、応答性が低下する.タイムスライスを小さくすると、逆のことが起こる.

優先度スケジューリング

  ユーザが触るプログラムの優先度を上げると、快適に感じる.
   →公平じゃないスケジューリング

  ・優先度付きラウンドロビン
    優先度ごとにキューを作り、上から順に実行.だが、同じ優先度の中では公平性が維持されている.

優先度をつけた時の弊害

  ・飢餓状態(スタベーション)
    ずっとプロセスを実行することができない状態.

   これの対処法は「エイジング」.長く待つほど、優先度を上げてもらえるという仕組み.