42
オペレーティングシステム 加藤 真平 東京大学 大学院情報理工学系研究科 [email protected] 2019/5/27 1 6オペレーティングシステム PFLab (加藤研)のウェブサイトからダウンロードできます。 ⇒http://www.pf.is.s.u-tokyo.ac.jp/ja/classes/

オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

オペレーティングシステム

加藤 真平

東京大学 大学院情報理工学系研究科

[email protected]

2019/5/27 1第6回 オペレーティングシステム

PFLab(加藤研)のウェブサイトからダウンロードできます。⇒http://www.pf.is.s.u-tokyo.ac.jp/ja/classes/

Page 2: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

2019/5/27 2

講義概要

• 受講生に求める基礎知識– C言語の理解

– コンピュータアーキテクチャの基礎の理解• メモリ管理、割り込み、CPUモード

• 参考図書– Silberschatz, Galvin, and Gagne, Operating System Concepts 8th

Edition, Wiley

• 成績– 試験の点数で決定

– 試験は持ち込み不可

– 授業に出席していた人で試験の結果が悪い人は追試験あり• 出席をとるが出席点はなし

第6回 オペレーティングシステム

Page 3: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

講義スケジュール(予定)

1. OSの概要(4/8)

2. プロセス管理(4/15)

3. プロセス間交信、スレッド(4/22)

4. プロセス同期(5/13)

5. CPUスケジューリング 1(5/20)

6. CPUスケジューリング 2 & トランザクション処理(5/27)

7. メモリ管理1(6/3)

8. 休講予定(6/10)

9. メモリ管理2&I/Oシステム(6/17)

10. I/Oシステム(6/24)

11. ファイルシステム(7/1)

12. プロテクション&セキュリティ (7/8)

13. バッチシステム&分散システム&まとめ(7/22)

14. 試験(7/29)

2019/5/27 第6回 オペレーティングシステム 3

Page 4: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

2019/5/27 第6回 オペレーティングシステム 4

Real-Time Scheduling

• Hard real-time systems

– クリティカルなタスクを保証された時間内に完了することが必要

• Soft real-time systems

– クリティカルなタスクはそのほかのものよりもプライオリティが高いことが必要

• 実時間スケジューリングアルゴリズム

– 静的優先度方式

• Rate Monotonic Scheduling

– 動的優先度方式

• Earliest Deadline First Scheduling

Page 5: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

リアルタイムシステムの応用分野マルチメディア

ドローン

自動運転システム

5

ロボット

ゲーム

VR

2019/5/27 第6回 オペレーティングシステム

Page 6: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

リアルタイムプロセス

task() {

for (;;) {

job();

wait_for_next_period();

}

} 時間

周期 周期 周期

ジョブ ジョブ ジョブ

時間制約はアプリケーション依存

62019/5/27 第6回 オペレーティングシステム

Page 7: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

2019/5/27 第6回 オペレーティングシステム 7

リアルタイムプロセス例

• 周期プロセス

– デッドラインは次の周期が始まるまで

• 周期プロセス例

Piの実行時間:Ti

周期:τi 周期:τi

Pの実行時間:Ti

Piの実行時間:Tj

周期:τj 周期:τj 周期:τj

Piの実行時間:Tj Piの実行時間:Tj

Process Period(τ) CPU time(T)

P1 5 2

P2 10 4

Page 8: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

2019/5/27 第6回 オペレーティングシステム 8

リアルタイムスケジューリング例

• 周期プロセス例

• CPU利用率は

σTiτi

= 0.8 = 80%

• スケジューリングできるはずだが、

• 静的(固定)優先度スケジューリング

– P2の優先度を高くすると、、、

Process Period(τ) CPU time(T)

P1 5 2

P2 10 4

Page 9: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

2019/5/27 第6回 オペレーティングシステム 9

Rate Monotonic Scheduling

• 周期プロセス– デッドラインは次の周期が始まるまで

• 固定優先順位

• 周期の短いプロセスが高い優先順位を与える

• Rate Monotonic Schedulingでは、スケジューリング可能性を静的に解析可能(Rate Monotonic Analysis)

Piの実行時間:Ti

周期:τi 周期:τi

Pの実行時間:Ti

Piの実行時間:Tj

周期:τj 周期:τj 周期:τj

Piの実行時間:Tj Piの実行時間:Tj

Page 10: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

2019/5/27 第6回 オペレーティングシステム 10

Rate Monotonic Schedulingの例

T1=2

Process Period(τ) CPU time(T)

P1 5 2

P2 10 4

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

T1=2 T1=2 T1=2

T2: 3 T2: 1 T2: 3 T2: 1

Page 11: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

2019/5/27 第6回 オペレーティングシステム 11

Rate Monotonic Analysis

• 仮定

– 全てのプロセスは単一CPU上で動作

– コンテキストスイッチ時間は無視

– プロセス間での依存関係無し

• スケジューラビリティ

– σTiτi

≤ 𝑙𝑛 2 = 69.3%

Page 12: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

2019/5/27 第6回 オペレーティングシステム 12

RMA

• CPU利用率が100%以下でもスケジュールできない例

T1=2

Process Period(τ) CPU time(T) CPU 利用率

P1 5 2 40 %

P2 12 7 58.333 %

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

T1=2 T1=2 T1=2

T2: 3 T2: 1

デッドラインミス!

T2: 3

Page 13: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

2019/5/27 第6回 オペレーティングシステム 13

Earliest Deadline First Scheduling

• 動的優先度スケジューリング

• デッドラインが近いプロセスを高い優先度

• スケジューラビリティ

–σTiτi

≤ 100%

• タイマ割り込み毎に

– デッドラインの計算

– デッドラインのもっとも近いプロセスを実行

• スケジューリングコスト有

Page 14: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

2019/5/27 第6回 オペレーティングシステム 14

EDFの例

T1=2

Process Period(τ) CPU time(T) CPU 利用率

P1 5 2 40 %

P2 12 7 58.333 %

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

T1=2 T1=2 T1=2

T2: 3 T2: 1T2: 3

Page 15: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

補足

2019/5/27 第6回 オペレーティングシステム 15

各タスクは周期的(Sporadic)にジョブを生成

すべてのジョブが次の周期(デッドライン)までに実行を完了できるようにスケジューリング

task() {

for (;;) {

job();

wait_for_next_period();

}

} 時間

周期 周期 周期

時間的正確さはスケジューリングアルゴリズムに依存

到着 到着 到着

Page 16: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

補足

2019/5/27 第6回 オペレーティングシステム 16

Rate Monotonic (RM)

Earliest Deadline First (EDF)

⇒周期の短いタスクが高優先度(固定)

⇒デッドラインが早いタスクが高優先度(動的)

タスク1

タスク2

タスク1

タスク2

シングルプロセッサに対しては最適なアルゴリズム

Page 17: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

マルチコア(m個のコア)でのリアルタイムスケジューリング

コア

タスクキュー

グローバルスケジューリングGlobal Scheduling

パーティションスケジューリングPartitioned Scheduling

C1

C2

Cm

コア

T2

C1

C2

Cm

T6

T5T4

タスクキュー

マルチコアではシステム使用率U(T) = ΣUi / m

T4T3T2T1

T3T1

T8T7T6T5

EDFEDF

EDF

EDF

T7

T8

2019/5/27 第6回 オペレーティングシステム 17

Page 18: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

Global EDFの問題

• 例: T1 = T2 = T3 = (2e,x), T4 = (x,x+e)

– x >>> e

C1

C2

C3

0

1

3

4

T4がデッドラインミス

2e x x+e x+2e

T1,T2,T3,T4 T1,T2,T3 T4

2

時間

e≒0とするとU(T) = (U1+U2+U3+U4) / m = 1 / m

2019/5/27 第6回 オペレーティングシステム 18

Page 19: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

T4

T4

T4

Partitioned EDFの問題

例: T1 = T2 = T3 = T4 = (x+e,2x)

– x >>> e

– U1 = U2 = U3 = U4 = 50 + α %

C1

C2

C3

100%

100%

100%

T1

T2

T3

50 + α%

50 + α%

50 + α%

100 + 2α%

100 + 2α%

100 + 2α%

α≒0とするとU(T) = 50%

2019/5/27 第6回 オペレーティングシステム 19

Page 20: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

効率的なアルゴリズム

• EDF-USアルゴリズム– B.Andersson, IEEE RTSS, 2001

• EDF-BFアルゴリズム– B.Andersson, Real-Time Systems Journal, 2004

• EDZLアルゴリズム– M. Cirinei, Euromicro RTS, 2007

スケジュール可能なシステム使用率: 50~60%

2019/5/27 第6回 オペレーティングシステム 20

Page 21: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

EDF-USアルゴリズム

• CPU使用率50%以上のタスクは最高優先度

– 例: T1 = T2 = T3 = (2e,x), T4 = (x,x+e)

– x >>> e

C1

C2

C3

0

1 3

4

T4はデッドラインミスを起こさない

x x+e

T1,T2,T3,T4 T1,T2,T3 T4

2

時間

2019/5/27 第6回 オペレーティングシステム 21

Page 22: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

最適なアルゴリズム

• Pfairアルゴリズム– S. Baruah, ICPP, 1996

• EKGアルゴリズム– B. Andersson, IEEE RTCSA, 2006

• LLREFアルゴリズム– H. Cho, IEEE RTSS, 2006

スケジュール可能なシステム使用率100%

⇒計算が複雑化、プリエンプションが多発

2019/5/27 第6回 オペレーティングシステム 22

Page 23: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

Pfairアルゴリズム

• 各タスクを最小時間に分割

– 例:T = {T1=(1,4), T2=(2,4), T3=(3,5), T4=(2,6),T5=(3,6), T6=(2,8), T7=(3,10)}

C1

C2

C3

3 3 2 3 2 3 3 4 3 1 3 7 3 3 2 3

2 4 5 6 5 1 2 7 2 6 2 2 4 5 7

5 7 1 4 7 5 5 4 5 5 1 6

2019/5/27 第6回 オペレーティングシステム 23

Page 24: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

Tk

TkT’k

T’’k

• セミパーティショニング/Semi-partitioning

– パーティショニング+タスク分割

• スケジュール可能なシステム使用率の向上

• プリエンプションとマイグレーションの回数を抑制

Ti Tj

セミパーティションスケジューリング

Cx

Cy

100%

100%

パーティショニングセミパーティショニング

2019/5/27 第6回 オペレーティングシステム 24

Page 25: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

分割されたタスク(Split Task)• タスクTkをT’k (Cx上)とT’’k (Cy上)に分割

– T’k=(E’k, Pk): Tkの第1部タスク

– T’’k=(E’’k, Pk): Tkの第2部タスク

• TkはT’kとT’’kとしてコアCxとCyで実行

– T’kとT’’kは任意の順に実行可能

– T’kとT’’kの並列実行は不可

Cx

Cy

T’k

T’’k

Tk

2019/5/27 第6回 オペレーティングシステム 25

Page 26: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

T6 = (2,8)

T5 = (3,6)T’5= (1,6)

T’’5 = (2,6)

T4 = (2,6)T’’3 = (2,5)

T3=(3,5)T’3 = (1,5)T2 = (2,4)T1 = (1,4)

セミパーティションスケジューリングタスクの分割方法の例

1. タスクを順にコアに割当て

2. スケジュール可能なコア使用率の上限を計算

3. コア使用率が上限を超えたらタスクを分割

例: T = {T1=(1,4), T2=(2,4), T3=(3,5), T4=(2,6),T5=(3,6), T6=(2,8), T7=(3,10)}

C1

C2

C3

100%

100%

100%

25% 75%

T7 = (3,10)

2019/5/27 第6回 オペレーティングシステム 26

Page 27: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

• 第2部タスクは常に最高優先度

– 第1部タスクと第2部タスクの実行が重なった場合のみ第2部タスクの実行を延期

– 例: コアC1: {T1=(1,4), T2=(2,4), T’3=(1,5)}コアC2: {T’’3=(2,5), T4=(2,6), T’5=(1,6)}

0

1 2 3 1 2 3 1 2 3 1 2 3 1 2

3 4 5 3 4 5 3 4 5 3 4

時間

C1

C2

5 10 15 20

EDF Scheduling

EDF Scheduling (T’’3は最高優先度)

セミパーティションスケジューリングスケジューリング方法の例

2019/5/27 第6回 オペレーティングシステム 27

Page 28: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

• 第2部タスクは常に最高優先度

– 第1部タスクと第2部タスクの実行が重なった場合のみ第2部タスクの実行を延期

– 例:

0

1 2 3 1 2 3 1 2 3 1 2 3 1 2

3 4 5 3 4 5 4 5 3 4

時間

C1

C2

5 10 15 20

EDF Scheduling

EDF Scheduling (T’’3は最高優先度)

3 4 3

コアC1: {T1=(1,4), T2=(2,4), T’3=(1,5)}コアC2: {T’’3=(2,5), T4=(2,6), T’5=(1,6)}

セミパーティションスケジューリングスケジューリング方法の例

2019/5/27 第6回 オペレーティングシステム 28

Page 29: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

スケジュール可能なコア使用率

• コアCx: S = {T’’i, Ti+1, Ti+2, …, Ti+n}

• スケジュール可能なCxの使用率の上限 Ub

−+

−−−+=

iEiEGPi

iEi)EG(Pi,

P

iEGPminiUUb

min

min

1Pi

iEPG min +

+=

1Pii}T / STk|min{PkPmin +==

この上限を用いてタスクをコアに割り当てる

2019/5/27 第6回 オペレーティングシステム 29

Page 30: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

補足

2019/5/27 第6回 オペレーティングシステム 30

2つのプロセッサと3つのタスクの例

タスク1

タスク2

タスク3デッドラインミス

低負荷なタスクセットに対しても時間的な違反

ジョブの到着 デッドライン

安全システムの破綻 サービスの質の低下

マルチコア、マルチプロセッサでの問題

Page 31: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

補足

2019/5/27 第6回 オペレーティングシステム 31

2つのプロセッサと3つのタスクの例

タスク1

タスク2

タスク3

EDFと同程度の計算量 最適なアルゴリズムに近い性能

ジョブの到着 デッドライン

EDCLの事例

Page 32: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

補足

2019/5/27 第6回 オペレーティングシステム 32

タスク1

タスク2

タスク3

どのようにCPUを割り当ててもスケジュール不可能!

CPU1

CPU2

CPU2CPU1

Window Window

Migration

EDF-WMの適用

2つのプロセッサと3つのタスクの例 ジョブの到着 デッドライン

EDF-WMの事例

Page 33: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

2019/5/27 第6回 オペレーティングシステム 33

Priority Inversion

• 高いプライオリティのプロセスが実行できず、結果として低いプライオリティのプロセスが実行されてしまう現象

• 共有資源

– 低いプロセスが共有資源を排他的に使用

– 高いプロセスが共有資源を必要としたときに、低いプロセスが使用しているために待ちが発生

Page 34: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

2019/5/27 第6回 オペレーティングシステム 34

Priority Inversionの例

Process Period(τ) CPU time(T)

共有資源アクセス

P1 4 1 1unit間

P2 5 2 なし

P3 10 3 3unit間

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

デッドラインミス!

Page 35: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

2019/5/27 第6回 オペレーティングシステム 35

Priority Inheritanceによる解決

Process Period(τ) CPU time(T)

共有資源アクセス

P1 4 1 1unit間

P2 5 2 なし

P3 10 3 3unit間

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

Page 36: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

2019/5/27 第6回 オペレーティングシステム 36

トランザクション• トランザクションとは?

– 論理的に一つの機能として実行される操作の集まり

– 一般には、データベースにおける更新、検索などの処理

• 例– 銀行口座における、1万円引き落とすトランザクション

• READ A

• A = A – 10,000

• WRITE A

• トランザクションのプリミティブ– BEGIN_TRANSACTION

– END_TRANSACTION (COMMIT)

– ABORT_TRANSACTION

– READ

– WRITE

Page 37: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

2019/5/27 第6回 オペレーティングシステム 37

トランザクション

• トランザクションは以下の4つの特性:ACIDを満たさなければならない

– Atomic(原子性)

– Consist(一貫性)

– Isolated (Serializability)

– Durable (永続性)

Page 38: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

2019/5/27 第6回 オペレーティングシステム 38

トランザクションのAtomicity(原子性)• 例

– 銀行口座における、1万円引き落とすトランザクションと1万円を預けるトランザクションが同時に行われる場合

• トランザクションの原子性(atomicity)– クリティカルセクションの排他制御と同様、外の世界に対して不可分

– トランザクションは、完全に実行されるか、まったく実行されないかのどちらかで、中途半端な実行なし

• マシンの故障を考えると、記憶デバイスの性質を考える必要あり– Volatile Storage

– Nonvolatile Storage

– Stable Storage

READ A

A = A – 10,000

WRITE A

READ A

A = A + 10,000

WRITE A

Page 39: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

2019/5/27 第6回 オペレーティングシステム 39

トランザクションのConsistency

• 不変性(Invariant):システムに常時満たされなければならないある種の制約

• もしトランザクションの前にその不変性を満たしていれば、トランザクションの後でも満足

• 例

– 会社全体で扱っている金銭は、会社内の部所間での金銭の授受が行われても、会社全体で、金銭の総額は同じ

Page 40: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

2019/5/27 第6回 オペレーティングシステム 40

トランザクションのSerializability

• IsolatedあるいはSerializability

• 複数トランザクションが実行されているとき、最終的な結果が、あたかも全てのトランザクションがある順序で逐次的に動作したようにみえること

T0 T1

Read(A)

Write(A)

Read(B)

Write(B)

Read(A)

Write(A)

Read(B)

Write(B)

T0 T1

Read(A)

Write(A)

Read(A)

Write(A)

Read(B)

Write(B)

Read(B)

Write(B)

Page 41: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

2019/5/27 第6回 オペレーティングシステム 41

2相ロック (Two Phase Lock)

• 整列化が可能

• 2つの相

– Growing phase

• LockのみをしていくフェーズでUnlockなし

– Shrinking phase

• UnlockのみをしていくフェーズでLockなし

• 厳密2相ロック (Strict Two Phase Lock)

– 全てのリソースをロックするフェーズ

– データをアクセス

– コミット

– リソースを開放するフェーズ

Page 42: オペレーティングシステム...T7 = (3,10) 2019/5/27 第6回 オペレーティングシステム 26 • 第2部タスクは常に最高優先度 –第1部タスクと第2部タスクの実行が重なっ

2019/5/27 第6回 オペレーティングシステム 42

厳密2相ロックの利点• Cascaded Abortを防ぐことができる

– Cascaded Abort:例えば、トランザクションT1があるデータを修正し、その後、T1がコミットする前に、トランザクションT2がそのデータを読むあるいは修正

• T1がabortすると、T2もabortの必要性

T1 T2

Lock A

Read A

Change A

Write A

Unlock A

Lock A

Read A

Change A

Write A

Unlock A

Lock B

Read B

Find problem

ABORT!!

T1 T2

Lock A

Lock B

Read A

Change A

Write A

Read B

COMMIT

Unlock B

Unlock A

Lock A

Read A

Change A

Write A

Unlock A