11

私はRobertLoveによるLinuxカーネル開発を読んでいます。私は構造についてこの段落を理解していませんbio

カーネル内のブロックI/Oの基本的なコンテナは、で定義されているバイオ構造<linux/bio.h>です。この構造は、実行中(アクティブ)のブロックI/O操作をセグメントのリストとして表します。セグメントは、メモリ内で連続しているバッファのチャンクです。したがって、個々のバッファはメモリ内で連続している必要はありません。バッファをチャンクで記述できるようにすることで、バイオ構造は、カーネルがメモリ内の複数の場所から単一のバッファのブロックI/O操作を実行する機能を提供します。このようなベクトルI/Oは、スキャッターギャザーI/Oと呼ばれます。

  1. 正確にはどういうflight(active)意味ですか?
  2. 「セグメントのリストとして」-このセグメンテーションについて話しているのですか?
  3. 「メモリ内のバッファを許可することによって」とはどういう意味ですか?
4

3 に答える 3

16

ブロックデバイスは、I / Oトランザクション中にデータのチャンク(512、1024バイト)を処理するデバイスです。「structbio」は、Kernel-SpaceからのブロックI/O操作に使用できます。この構造は、ブロックデバイスドライバーの開発で一般的に使用されます。

Q1)フライト(アクティブ)とはどういう意味ですか?

ブロックデバイスは通常、ファイルを保存するためのファイルシステムで実装されます。これで、ユーザースペースアプリケーションがファイルI / O操作(読み取り、書き込み)を開始するたびに、カーネルはファイルシステムマネージャーを介して一連のブロックI/O操作を開始します。「structbio」は、処理されるすべてのブロックI / Oトランザクション(ユーザーアプリによって開始される)を追跡します。これが、ここでフライト/アクティブリージョンとして言及されているものです。

「Q2)セグメントのリストとして」-このセグメンテーションについて話しているのですか?

ブロックデバイスとの間でデータを保持するには、カーネルがメモリバッファを必要とします。

カーネルには、メモリが割り当てられる2つの可能性があります。

  1. 仮想アドレス連続-物理アドレス連続(kmalloc()を使用-優れたパフォーマンスを提供しますが、サイズに制限があります)
  2. 仮想アドレス連続-物理アドレス非連続(vmalloc()を使用-巨大なメモリサイズ要件の場合)

ここで、セグメントは最初のタイプ、つまりブロックIO転送に使用される連続物理メモリを示します。セグメントのリストは、そのような連続した物理メモリ領域のセットを示します。リスト要素は非連続メモリセグメントであることに注意してください。

Q3)「メモリ内のバッファを許可することによって」とはどういう意味ですか?

スキャッターギャザーは、デバイスとの間の複数の非連続メモリロケーションとの間のデータ転送を1回のショット(読み取り/書き込みトランザクション)で可能にする機能です。ここで、「struct bio」は、処理される複数のセグメントの記録を保持します。各セグメントは連続メモリ領域ですが、複数のセグメントは互いに非連続です。「structbio」は、スキャッターギャザー機能を実行する機能をカーネルに提供します。

于 2013-01-29T07:00:06.343 に答える
3
  1. 「飛行中」とは、要求されたがまだ開始されていない操作を意味します。
  2. ここでの「セグメント」とは、読み取りまたは書き込みが行われるメモリの範囲、つまり操作の一部として転送される連続したデータを意味します。
  3. 「スキャッター/ギャザーI/O」とは、ディスク上の連続した範囲のデータを取得してその一部をメモリに分散し、ギャザーがメモリ内の別々の範囲のデータを取得してディスクに連続して書き込むスキャッター操作を意味します。(「ディスク」を前述の適切なデバイスに置き換えます。)一部のI / O機械は、1回の操作でこれを実行できます(これはより一般的になっています)。
于 2013-01-28T22:02:40.887 に答える
1

1)「飛行中」は「進行中」を意味します2)いいえ3)よくわかりません:)

于 2013-01-28T18:55:04.833 に答える