この論文でリーマンとヤオが提案したデータ構造(Bリンクツリー)とアルゴリズムに基づいてデータベースインデックスを実装しようとしています。2ページで、著者は次のように述べています。
ディスクは固定サイズのセクションに分割されています(物理ページ。このペーパーでは、これらはツリーのノードに対応します)。これらは、プロセスによって読み取りまたは書き込みができる唯一のユニットです。[強調鉱山](...)
(...)プロセスはディスクページをロックおよびロック解除できます。このロックは、そのプロセスにそのページに対する排他的な変更権限を与えます。また、プロセスでページを変更するには、そのページをロックする必要があります。(...)ロック は、他のプロセスがロックされたページを読み取ることを妨げません。[強調鉱山]
私の解釈が正しいかどうかは完全にはわかりませんが(学術論文を読むことに慣れていません)、強調された文章から、著者はページを読み書きする操作が「アトミック」であると想定されていることを意味していると結論付けることができると思います、プロセスAがすでにページの読み取り(または書き込み)を開始している場合、別のプロセスBは、Aが読み取り(または書き込み)操作の実行を完了するまで、同じページの書き込み(または読み取り)を開始できないという意味です。 。もちろん、同じページを同時に読み取る複数のプロセスは、排他的に異なるページで任意の操作を同時に実行する複数のプロセス(PページのプロセスA、QページのプロセスB、RページのプロセスCなど)と同様に、正当な条件です。 )。
私の解釈は正しいですか?
POSIX
read()
とwrite()
システムコールが上記の意味で「アトミック」であると想定できますか?ファイル記述子の位置と読み取りまたは書き込みされるチャンクの指定されたサイズに基づいて、特定の呼び出しread()
または呼び出しを一時的にブロックする必要があるかどうかを判断するために、内部ロジックを持つこれらのシステムコールに依存できますか?write()
上記の質問に対する答えが「いいえ」の場合、自分のロック機構をどのように回転させる必要がありますか?