基本情報技術者令和元年秋期 午前問29

午前問29

2相ロッキングプロトコルに従ってロックを獲得するトランザクションA,Bを図のように同時実行した場合に,デッドロックが発生しないデータ処理順序はどれか。ここで,read と update の位置は,アプリケーションプログラムでの命令発行時点を表す。また,データWへの read は共有ロックを要求し,データX,Y,Zへの update は各データへの専有ロックを要求する。
29.gif/image-size:207×238

分類

テクノロジ系 » データベース » トランザクション処理

正解

解説

デッドロックとは、共有資源を使用する2つ以上のトランザクションが、互いに相手トランザクションが必要とする資源を排他的に使用していて、互いのトランザクションが相手が使用している資源の解放を待っている状態です。デッドロックが発生するとトランザクションは永遠に待ち状態になってしまうため、処理の続行ができなくなってしまいます。
29_1.gif/image-size:312×159
この問題では、2つのトランザクションのロック要求を追跡することでデッドロックが発生するか否かを判断しますが、その前提として共有ロック・専有ロック及び2相ロッキングプロトコルについて確認しておきましょう。
共有ロック
データを読込むときに使うロックで、この状態の場合は他のトランザクションによる更新処理ができなくなる(読込みは可能)。
専有ロック
データを更新するときに使うロックで、この状態の場合は他のトランザクションによる読込みや更新ができなくなる。
上記の性質から、ある資源に共有または専有ロックが掛けられているときの新たなロックの可否は次の表のようになります。
29_2.gif/image-size:272×136
つまり、資源にかけられているロックが"共有"である場合にのみ、別のトランザクションが新たに"共有ロック"をかけることが可能です。

そして、2相ロッキングプロトコルは、トランザクション処理で読書きが必要になったデータにその都度ロックをかけていき、全てのロックを獲得した後にだけロックの解除を行うルールを課すロック方式です。つまり、ロックの解除が行われるのはトランザクションの終了時になります。各処理が終わる度に当該ロックを解除するわけではないので注意しましょう。

これを踏まえて、トランザクションA(以下、TA)とトランザクションB(以下、TB)の処理を選択肢ごとに見ていきます。
    1. TAが W を共有ロックする。
    2. TBが W を共有ロックする。
    3. TAが X を専有ロックする。
    4. TBが Y を専有ロックする。
    5. TAが Y の専有ロックを要求するが、TBが専有ロック中なので待ち状態となる。
    6. TBが X の専有ロックを要求するが、TAが専有ロック中なので待ち状態となる。
    7. TAが Y の解放を、TBが X の解放を互いに待っているのでデッドロックとなる。
    29_3.gif/image-size:406×117
    1. TAが W を共有ロックする。
    2. TBが W を共有ロックする。
    3. TAが X を専有ロックする。
    4. TBが Y を専有ロックする。
    5. TAが Y の専有ロックを要求するが、TBが専有ロック中なので待ち状態となる。
    6. TBが Z を専有ロックする。
    7. TBが X の専有ロックを要求するが、TBが専有ロック中なので待ち状態となる。
    8. TAが Y の解放を、TBが X の解放を互いに待っているのでデッドロックとなる。
    29_4.gif/image-size:406×117
    1. TAが W を共有ロックする。
    2. TBが X を専有ロックする。
    3. TAが X の専有ロックを要求するが、TBが専有ロック中なので待ち状態となる。
    4. TBが W を共有ロックする。
    5. TBが Y を専有ロックする。
    6. TBが Z を専有ロックする。
    7. TBの終了によりロックが解除される。
    8. TAが X を専有ロックする。
    9. TAが Y を専有ロックする。
    10. TAが Z を専有ロックする。
    11. TAの終了によりロックが解除される。
    29_5.gif/image-size:406×117
    この順序だとデッドロックが発生しません。一般的に双方のトランザクションで資源の専有順序が同じ場合にはデッドロックが発生しないことが知られています。本問でも、TA・「ウ」ともに X→Y→Z の順になっています。
    1. TAが W を共有ロックする。
    2. TBが Y を専有ロックする。
    3. TAが X を専有ロックする。
    4. TBが Z を専有ロックする。
    5. TAが Y の専有ロックを要求するが、TBが専有ロック中なので待ち状態となる。
    6. TBが X の専有ロックを要求するが、TAが専有ロック中なので待ち状態となる。
    7. TAが Y の解放を、TBが X の解放を互いに待っているのでデッドロックとなる。
    29_6.gif/image-size:406×117
© 2010-2020 基本情報技術者試験ドットコム All Rights Reserved.

Pagetop