並列プログラミング言語による Dining Philosophers Problem の検証 大井 謙 数理科学コース 4年 福永研究室 2010年 3月 4日 (木) 1 目次 1. 並列処理について 2. Dining Philosophers Problem 2.1. 問題の概要 2.2. 具体的な解法 2.2.1. Edsger W.Dijkstraによる解法 2.2.2. Carel S.Scholten による解法 2.3. 解法についての検証 3. まとめ 2 1. 並列処理について 逐次処理と並列処理 – 逐次処理 : 1つずつ処理を実行 – 並列処理 : 複数の処理を同時に実行 例 試し割りによる1000までの素数判定 逐次処理 試し割り : 判定する数を 3 ~ √n の整数で順番に 割る方法 並列処理 n = 1 ~ 1000 n = 1 ~ 500 素数 n を出力 素数 n を出力 n = 501 ~ 1000 同時に判定 計算時間削減 3 2. Dining Philosophers Problem 2.1. 問題の概要 並列処理の同期問題を一般化した例 発端は1971年 Edsger W.Dijkstra の提示 同期 : 同時並行して動く 処理間で時系列的な制 御をすること 5台のコンピュータがある これらが5台のテープ装置に競合アクセスする Antony Hoare により一般化される – – – – – 互いに会話しない 5人の哲学者達がいる 空腹時に座り 自分の両隣のフォークを取る 要求が満たされないと待ち続ける 食事に必要なフォークは2本 片方ずつしか取れない ← ウィキペディア 「食事する哲学者の問題」の 写真から引用 (http://ja.wikipedia.org/wi ki/食事する哲学者の問題) 4 2. Dining Philosophers Problem 2.1. 問題の概要 哲学者達の振舞い PHIL = ( 座る → フォーク取る L → フォーク取る R → 食べる → フォーク置く L → フォーク置く R → 立つ → PHIL ) フォークの振舞い FORK = ( R 側 PHIL に取られる → R 側 PHIL に置かれる → FORK or L 側 PHIL に取られる → L 側 PHIL に置かれる → FORK ) 全体の振舞い – PHILとFORKを並列処理 (5つずつ 計10) ← ウィキペディア 「食事する哲学者の問題」の 写真から引用 (http://ja.wikipedia.org/wi ki/食事する哲学者の問題) 5 2. Dining Philosophers Problem 2.1. 問題の概要 何が問題なのか – 全員同時に腹が減ったとき 5人が同時にフォークを取る その後 もう片方を取ろうとすると・・・ 誰の要求も満たされず 全員が永遠に待ち続ける デッドロック ← ウィキペディア 「食事する哲学者の問題」の 写真から引用 (http://ja.wikipedia.org/wi ki/食事する哲学者の問題) 6 2. Dining Philosophers Problem 2.2. 具体的な解法 デッドロックが起こる条件 5人全員による満たされない要求が円になる これを崩せば良い! 2つの解法 – 哲学者の挙動を直接書き換える方法 Edsger W.Dijkstra による解 – 外部から哲学者の挙動に制限をかける方法 Carel S.Scholten による解 7 2. Dining Philosophers Problem 2.2. 具体的な解法 2.2.1. Edsger W.Dijkstra による解法 利き腕の違う哲学者を用意する (※) 左利き:左 → 右 の順にフォークを取ると考える 哲学者達の振舞い LPHIL = ( 座る → フォーク取る L → フォーク取る R → 食べる → フォーク置く L → フォーク置く R → 立つ → LPHIL ) RPHIL = (座る → フォーク取る R → フォーク取る L → 食べる → フォーク置く R → フォーク置く L → 立つ → RPHIL ) 8 2. Dining Philosophers Problem 2.2. 具体的な解法 2.2.1. Edsger W.Dijkstra による解法 右 4 3 2 1 ステップ 0 左 左 ← ウィキペディア 「食事する哲学者の問題」の 写真から引用 (http://ja.wikipedia.org/wi ki/食事する哲学者の問題) 左 左 9 2. Dining Philosophers Problem 2.2. 具体的な解法 2.2.2. Carel S.Scholten による解法 召使い (Footman) を 1人 任用する (※) 召使いは 同時に4人以下の哲学者しか座らせない 召使いの振舞い ( j ∈ {1, 2, 3} ) FOOT(0) = ( 座らせる → FOOT(1) ) FOOT( j ) = ( 座らせる → FOOT( j + 1 ) or 立たせる → FOOT( j - 1 ) ) FOOT(4) = ( 立たせる → FOOT(3) ) 10 2. Dining Philosophers Problem 2.2. 具体的な解法 2.2.2. Carel S.Scholten による解法 2 1 ステップ 0 F ← ウィキペディア 「食事する哲学者の問題」の 写真から引用 (http://ja.wikipedia.org/wi ki/食事する哲学者の問題) 11 2. Dining Philosophers Problem 2.3. 解法についての検証 設計段階でミスがない事を保証できるか – 哲学者1人あたりの状態数は6通り – フォーク1本あたりの状態数は3通り 手動では非常に困難! – 哲学者は5人 フォークは5本 最悪状態数 = 6^5 * 3^5 = 約190万 検証ツールの重要性 例 CSP記述の検証ツール(PAT) CSP : 並行システムを形 式的に記述し、解析する ための言語 12 3. まとめ まとめ – 逐次処理と並列処理を対比した上で 並列処理に潜む問題点を確認 – Dining Philosophers Problem を 解決するための案を2つ提示・検証 – 検証ツールの重要性について考察 13
© Copyright 2024 ExpyDoc