HOME»応用情報技術者試験掲示板»デッドロックについて
投稿する
デッドロックについて [2462]
SSIMさん(No.1)
応用技術者試験平成31年問18のデッドロックについて質問があります.
リンク先:https://www.ap-siken.com/kakomon/31_haru/q18.html
私は,"ア.一方のタスクの優先度を高くする."が正解だと思ったのですが,なぜ"イ"が正解に当たるのでしょうか?
教えて頂けないでしょうか.
リンク先:https://www.ap-siken.com/kakomon/31_haru/q18.html
私は,"ア.一方のタスクの優先度を高くする."が正解だと思ったのですが,なぜ"イ"が正解に当たるのでしょうか?
教えて頂けないでしょうか.
2021.03.17 14:02
Rさん(No.2)
この投稿は投稿者により削除されました。(2021.03.17 15:56)
2021.03.17 15:56
Rさん(No.3)
占有する順序が同じであればそれでいいと思います。
2021.03.17 15:57
SSIMさん(No.4)
返信ありがとうございます.すみません,なぜ占有する順序が同じであれば良いのでしょうか.頭の悪い私にもわかりやすく教えてください.
2021.03.17 16:52
かたわれさん(No.5)
タスクの優先度とロックをかけることの間には関係がないからだと思います。
2021.03.17 17:56
ねこさん(No.6)
2つの積み木(○と△)(タスク)があります。
SSIMさんとかたわれさんがいます。
SSIMさんの○をとるタスク優先度をあげます。
SSIMさんが○をとります。
しかたなくかたわれさんは△をとります。
お互い見つめ会って相手の積み木をみます。
デッドロックです。
では積み木を占有する順序を同じにします。
偶然SSIMさんが○をとります。
占有できなかったかたわれさんは待ちます。
SSIMさんが△をとります。
かたわれさんは占有できるようになり○をとります。
デッドロックしませんね。
SSIMさんとかたわれさんがいます。
SSIMさんの○をとるタスク優先度をあげます。
SSIMさんが○をとります。
しかたなくかたわれさんは△をとります。
お互い見つめ会って相手の積み木をみます。
デッドロックです。
では積み木を占有する順序を同じにします。
偶然SSIMさんが○をとります。
占有できなかったかたわれさんは待ちます。
SSIMさんが△をとります。
かたわれさんは占有できるようになり○をとります。
デッドロックしませんね。
2021.03.17 20:50
へっぽこ大学生さん(No.7)
自分の解釈なので間違っていたら申し訳ないのですが、デッドロックは互いに一歩先の資源を求めている状態ですから、イメージとしては
Aさん:×→○
Bさん:×←○
という感じで"クロス"しちゃってる感じだと思います。なので同じ方向に進ませればクロスすることがない=デッドロックしないと解釈しています。
例えばこの○と×の数が多かった時に一方の優先度を高くしたところで、互いに反対に処理が進んでどこかでクロスすることがあるならば、根本的なデッドロック解決には至らないということではないでしょうか。
間違っていたらすみません。。
Aさん:×→○
Bさん:×←○
という感じで"クロス"しちゃってる感じだと思います。なので同じ方向に進ませればクロスすることがない=デッドロックしないと解釈しています。
例えばこの○と×の数が多かった時に一方の優先度を高くしたところで、互いに反対に処理が進んでどこかでクロスすることがあるならば、根本的なデッドロック解決には至らないということではないでしょうか。
間違っていたらすみません。。
2021.03.18 09:05
受験生さん(No.8)
一方のタスクを優先してもデッドロックするパターンを考えましょう
資源A、B、Cがあったとして、タスク1がA、B、Cという順番に、タスク2がB、A、Cという順番にアクセスするものとしましょう。
応用ではタスクの終了時に資源を解放する条件での出題が多いので、この条件で行きます。
仮にタスク1の優先度を高くしたとしましょう。例えばラウンドロビンスケジューリング方式の場合はタイムクォンタムによる時分割ですので(まだこの分野に手を付けていないならなんとなくで読んでください。)、タスク1,タスク2ははぼ同時に、つまり並列実行することができると解釈できます。つまり優先度の高い低いが、専有ロックとは関係ないということになります。
さて、実行してみましょう。タスク1は資源Aを専有ロックして利用中にプリエンプションして、タスク2がディスパッチしたとします。そうなるとタスク2は資源Bを専有ロックしますね。タスク2がプリエンプションしてタスク1がディスパッチされると、資源Aの利用が終了したとします。しかし、その次の資源Bはまだタスク2に専有ロックされていて資源待ちとなり利用できません。タスク1は処理を進められないので外部割り込みでプリエンプションされ、タスク2がディスパッチ。ここでタスク1は資源Aを解放していないことに注意。タスク2も資源Bの利用を終了しますが資源Aが資源待ちで利用できません。これがデッドロックであり、タスクの優先度は関係ないことがわかります。
資源の利用順が同じであれば、例えばタスク1が実行されるとタスク2は初動で資源待ちとなり、タスク1消滅後に資源がすべて解放されるので、デッドロックは「絶対」発生しません。(ただし割り込みができない「スタベーション」の原因にはなる)
資源A、B、Cがあったとして、タスク1がA、B、Cという順番に、タスク2がB、A、Cという順番にアクセスするものとしましょう。
応用ではタスクの終了時に資源を解放する条件での出題が多いので、この条件で行きます。
仮にタスク1の優先度を高くしたとしましょう。例えばラウンドロビンスケジューリング方式の場合はタイムクォンタムによる時分割ですので(まだこの分野に手を付けていないならなんとなくで読んでください。)、タスク1,タスク2ははぼ同時に、つまり並列実行することができると解釈できます。つまり優先度の高い低いが、専有ロックとは関係ないということになります。
さて、実行してみましょう。タスク1は資源Aを専有ロックして利用中にプリエンプションして、タスク2がディスパッチしたとします。そうなるとタスク2は資源Bを専有ロックしますね。タスク2がプリエンプションしてタスク1がディスパッチされると、資源Aの利用が終了したとします。しかし、その次の資源Bはまだタスク2に専有ロックされていて資源待ちとなり利用できません。タスク1は処理を進められないので外部割り込みでプリエンプションされ、タスク2がディスパッチ。ここでタスク1は資源Aを解放していないことに注意。タスク2も資源Bの利用を終了しますが資源Aが資源待ちで利用できません。これがデッドロックであり、タスクの優先度は関係ないことがわかります。
資源の利用順が同じであれば、例えばタスク1が実行されるとタスク2は初動で資源待ちとなり、タスク1消滅後に資源がすべて解放されるので、デッドロックは「絶対」発生しません。(ただし割り込みができない「スタベーション」の原因にはなる)
2021.03.19 01:46
SSIMさん(No.9)
お礼のお返事が遅くなり申し訳ありません.みなさんありがとうございます.やっと,理解できました.
2021.03.19 10:02