![ディスク I/O 読み取りと書き込みのコスト](https://rvso.com/image/1288715/%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%20I%2FO%20%E8%AA%AD%E3%81%BF%E5%8F%96%E3%82%8A%E3%81%A8%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%81%BF%E3%81%AE%E3%82%B3%E3%82%B9%E3%83%88%20.png)
ディスクへの書き込みは、ディスクからの読み取りよりもコストのかかる操作ですか。たとえば、1 GB のレコードのファイルを書き込む場合と、ファイル全体を読み取る場合を比較します。
答え1
ドライブ レベルでは、セクター読み取り操作には、セクター書き込み操作とほぼ同じ (または少し長い) 時間がかかります。セクター読み取りの場合、コマンドがドライブ インターフェイス (SATA など) 経由で到着し、コマンドがデコードされ、シークが発行され、セクターが見つかるまでアドレス マークとレコード ID がスキャンされ、セクター データがバッファーに読み込まれ、ECC (エラー訂正コード) を使用してセクターが検証され、最後にセクター データが送信されます。(セクター データは読み取りヘッドからインターフェイスに直接転送できるという誤解が広まっていることに注意してください。これはまったくの誤りです。セクター データは常に完全にバッファーされ、セクター全体が読み取られて検証された後にのみ、常にインターフェイスのフル スピードで送信されます。) 先読みが実行されてキャッシュされると、後続のシーケンシャル読み取りではシークと回転の遅延は発生しません。セクター書き込みの場合、コマンドとセクター データがドライブ インターフェイス経由で到着し、コマンドがデコードされ、シークが発行され、セクターが見つかるまでアドレス マークとレコード ID がスキャンされ、ECC を使用してセクターが書き出され、ホストに完了が通知されます。
OS またはファイルシステム レベルでは、新しいファイルを作成する場合の書き込みはより複雑になります。既存のディスク ファイルの読み取りまたは書き換えには、データ セクタ (またはクラスタ) が配置されている場所の検索のみが必要です。新しいファイルを書き込む場合やファイルに追加する場合は、まず空きリストからセクタ/クラスタを割り当て、それらのセクタ/クラスタをファイルに割り当て (ディレクトリ エントリの更新?)、次にデータを書き出す必要があります。ディスク アロケーション テーブルは通常、ファイルシステムの整合性を維持するために、ファイル データよりも先に、できるだけ早く更新 (つまりディスクに書き込む) されることに注意してください。ファイルの作成中にディスク シークが頻繁に行われていることに気づいたり聞いたりしたことがある場合は、ヘッドがアロケーション テーブルと新しいファイルの間を移動していたと考えられます。