[[PageNavi(internal24-navi)]]
{{{ comment
h2w-title:ページに対するI/O要求の発行
}}}
= ページに対するI/O要求の発行 = #SECTION03330000000000000000
block_read_full_page関数は、要求のあったiノードのあるオフッセット位置から1ページ分の大きさのデータをページに読み込む汎用ルーチンである。block_write_full_page関数は、同様に1ページ分の大きさのデータをページへ書き込む汎用ルーチンである。
ただし、I/O処理はページ単位でしか行えないため、書き込み処理は少々面倒な操作も行えるようになっている。block_prepare_write関数は、書き込み要求がページ単位でない場合、まず半端な領域のデータをディスクから読み込む、または0クリアする処理を行い、その後generic_commit_write関数によりページ単位の書き込みを行う。
(NFSのようにローカルディスク上にデータのないファイルシステムは独自の処理ルーチンを用意)
各I/O関数は、bmap関数(各ファイルシステムごとに異なる)を用いて、iノードとオフセットからI/O対象となるブロック番号群を計算し、I/Oを起動する。このアルゴリズムからも ページサイズ>=ブロックサイズでなければならないことが読み取れる。[[Footnote()]]
上記ページI/O関数群は、I/O要求のあったページを先に述べたバッファに分解し、バッファキャッシュの処理ルーチンを利用してI/Oを行う。ローカルディスク用のファイルシステムのページキャッシュは同時にバッファキャッシュハッシュにも登録されることになる。
----
{{{ html
<A NAME="CHILD_LINKS"> </A>
}}}
* [internal24-78-ページ読み込み要求#SECTION03331000000000000000 ページ読み込み要求]
* [internal24-79-ページに対するI/O完了の通知#SECTION03332000000000000000 ページに対するI/O完了の通知]
* [internal24-80-ページ書き込み要求#SECTION03333000000000000000 ページ書き込み要求]
----
''(NIS)HirokazuTakahashi [[BR]]2000年12月09日 (土) 23時55分06秒 JST''1
[[PageNavi(internal24-navi)]]