←OS論シラバスへ
←講義のツボメニューへ

プロセス

【2001.10.22,10.26】【第7、8回】
Petersonのアルゴリズム
 ・オランダの数学者T.DEKKERは、相互実行とロックのアイディアをあわせて、厳密な相互実行を必要としない方法を考案(1965)
  ・1981年、G.L.Petersonは、もっと簡単な解決方法を発見した
  ・クリティカルセクションに入る前にenter_regionを呼ぶ
  ・クリティカルセクションを出たらleave_regionを呼ぶ


#define FALSE 0
#define TRUE 1
#define N   2

int turn;  /*誰の番か?*/
int interested[N]; /*初期値はすべて 0(FALSE)*/

void enter_region(int process)
     /* processは、入るプロセスの番号 */
{
  int other;  /*他のプロセスの番号*/
  other=1^precess; /*排他的論理和でビット反転*/
  interested[process]=TRUE;
  turn=process;
  while(turn == process && interested[other] == TRUE);
}

void leave_region(int process)
{
  ineterested[process]=FALSE;
          /*クリティカルセクションから出る*/ }


 Test and Set Lock命令(TSL命令)

  多くのコンピューター(特にマルチプロセッサを念頭において設計されたコンピューター)には
  以下の動作をするTSL命令が用意されている
 1、あるアドレスのメモリのワードの内容を1つのレジスタに読み込む。
 2、非ゼロの値を、そのアドレスのメモリに格納する。

  読み込みと格納の操作は分割されないことが保証される。

 TSL命令を使ったロック

  架空の(だが典型的な)アセンブリ言語による方法

 
enter_region:
  ts1 register, flag /* flagの内容をregisterへ読み取り、flagを1にセット */
  cmp register, #0 /* flagが0か判定する */
  jnz enter_region /* 0でなければ、ロックされているのでループする */
  ret  /* 呼び出し元に戻り、クリティカルセクションに入る */

leave_region:
  mov flag, #0 /* flagに0を格納 */
  ret  /* 呼び出し元に戻る */


 優先度逆転問題(priority inversion problem)

  ビジーウェイト=密なループを実行しながら待機する。
  ●CPU時間を消費する
  ●予期せぬ結果を生む・・・優先度逆転問題

仮定)プロセスHは、プロセスLよりもスケジュールの優先度が高いとする

どちらもReady(or Running)ならば、プロセスHをスケジュールする


プロセスHプロセスL
Block

Ready
Running

クリティカルセクション
≪プロセス切り替え≫
Running
busy wait
プロセスLがクリティカルセクションから
出るのを待ちつづける
Ready

プロセスHが優先度が高いので、
スケジュールされない。
よって、クリティカルセクションから出ない
従ってこのままの状態で凍りつく。


 セマフォ(semaphore)

  E.W.Dijkstraが導入(1965)
 セマフォ =wakeupすべきプロセスの個数を表す整数変数
  二つの操作「up]と「down」(←wakeupとsleepを一般化)

2章終了 レポート課題


1、競合状態とは何か。

2、使用中待機(ビジーウェイト)とブロックとの違いを説明せよ

3、割り込みを無効にできるOSでは、どのようにセマフォを実装するのか、その概略を説明せよ

4、ラウンド・ロビン・スケジューリングは、一般に実行可能なプロセスのリストを管理している。リストにはそれぞれのプロセスが1回しか出現しない。プロセスがリスト中に2回出現した場合には何が発生するか。これを可能にする理由としてなにが考えられるか。

5、たいていのラウンド・ロビン・スケジューラーは、クォンタムの大きさに一定のものを使用している。小さなクォンタムが有利である点、大きなクォンタムが有利である点を議論せよ。

6(この問題は必須ではない)
 AからEまでの5つのバッチジョブが、ほぼ同時にコンピューター・センターに到着する。各実行時間は、10分、6分、2分、4分、8分と予想された。これらの優先順位はそれぞれ、3,5,2,1,4と指定されており、5が最も高い優先順位である。次に示すスケジューリング・アルゴリズムの、プロセス・ターンアラウンド・タイムの平均を求めよ。なお、プロセスの切り替えオーバーヘッドは無視せよ。
(a)ラウンド・ロビン
(b)優先順位スケジューリング
(c)到着順サービス
(d)最短ジョブ優先
 6aではシステムは多重プログラミングであり、それぞれのジョブはCPUを平等に共有するものとする。6bから6dについては、一度に1つのジョブのみを完了するまで実行するものとする。すべてのジョブは完全にCPUがネックとなっているものとする。