カーネルはどのようにハードディスクにI/O要求を送信しますか?

カーネルはどのようにハードディスクにI/O要求を送信しますか?

複数のセクタにわたってファイルが分散しているとしましょう。たとえば、物理セクタと論理セクタの両方が512Bであるとします。ユーザープロセスはカーネルにファイル読み取り要求を送信します。ファイルがハードドライブの3つの分散セクタを使用しているとします。

1)ハードドライブはすべてのセクタを一度に読み込み、全体(512 * 3)データをカーネルに転送しますか?

*ハードディスクは最初に3つのセクタを完全に読み取り、次にデータをコアに転送します。 512 * 3バイトがHDDからコアに転送されます。

2)HDDは一度に複数のセクタを読み取ることができますか?しかし、これはハードウェア関連の問題に近いようです。

答え1

時々違うよね最新のUnixシリーズオペレーティングシステムのカーネルは、I / Oを高速化するためにかなり複雑なコードを使用する傾向があります。最もよく知られている機能はキャッシュです。過去に特定のセクタを読み込んだ場合でも、メモリにコピーが残っている可能性があり、その場合、ハードディスクに要求はまったく転送されません。他の一般的なアクセラレーション機能は、非順次アクセス(保留中の要求が多い場合にカーネルが検索を最小限に抑えるため、またはハードウェアで許可されている並列処理をよりよく活用するために別の順序で要求を実行できる)とプリフェッチ(カーネルはセクタです。が0の場合を想定します)があります。 5つのファイルを読み込んだ場合は、おそらくセクタ6を読み取るでしょう。

セクタ 0 リード要求が完了する前にセクタ 1 リード要求を実行できるかどうかは、ディスクバスとディスクのパフォーマンスによって異なります。一般的な答えはありません。

関連情報