Operating System Lecture 12/11
Menu Menu
先週の復習
Lock and Transaction Dead Lock Cascading Abort今年の授業は、来週12/18までです。来週は冬休みの宿題を出しますので、お楽しみに...
新年は、1/8 からです。授業の進み具合からみて、1/8も行うことにしました。
コミットとログ
アボートは、トランザクション自身が指示することもできる。SQL文では、- commit work (トランザクションがちゃんと終わったことを示す)
- rollback (トランザクションは失敗して、なかったことにする)
普通、データベースシステムは、どのトランザクションがコミットしたかを記録している。これはログ(log)と呼ばれる。 何もしなければログはどんどん大きくなっていく。カスケーディングアボートに備えるために、ずーとログを取っておかなくてはならないからである。
ある時点で、データベースの状態をとっておき、それを正規の状態と決めれば、その時点より前のログを取っておく必要はない。それはバックアップ(backup)と呼ばれる。バックアップの後は、明示的にトランザクションログを消さなくてはならないデータベースも多い。<P>
Unix には、sync というコミットに近い動作がある。これは、アプリケーションからは書き込みは終わっているが、OSはディスクにデータを書き込んでいない状態を解消する。したがって、Unix上のファイルシステムをもとにしたデータベースは本当の意味で安全になることはない。多くのデータベースではファイルシステムを経由せずに直接ディスクを操作することでこれを回避している。
Unixでのロック
- flock
- fcntl
- lockf
- Symbolic linkによるlock
問題
C で書いたflock_test.c / Makefile と、 Perlで書いた,flock_test.pl を 用いて、この授業のデッドロックを2相ロックで再現してみよ。また、2相ロックでない場合に矛盾が生じる例を示せ。(注) sleep などを使って、調整しよう。二つ別なプログラムを作成する必要があるかも...
宿題
情報工学実験Iのプロセスの同期 (5,6) を来週までに行うこと。レポートはメールで
Subject: Report Operating System Lecture 12/04というように、課題を出した日付をサブジェクトに入れたメールで提出して下さい。