Linux システムカーネルのデバイスマッパーメカニズム (1) (2)

黄舟
リリース: 2016-12-23 14:06:54
オリジナル
1479 人が閲覧しました

コード内の上記 3 つのオブジェクトの具体的な実装を詳しく見てみましょう。 dm.c ファイルで定義されている mapped_device 構造体は、主に、マップされたデバイス、登録されたデバイスに関連するロックを含むために使用されます。リクエスト キューと一部のメモリ プール、およびそれに対応するマッピング テーブルのポインタとその他のフィールド。マップされたデバイスに対応するマッピング テーブルは、dm_table.c ファイルで定義された dm_table 構造体によって表されます。この構造体には、dm_target 構造体の配列が含まれており、mapped_device とそのターゲット デバイスの 1 つとの間のマッピング関係が具体的に記述されます。 dm_table 構造では、これらの dm_target は B ツリー形式で編成され、IO リクエストのマッピング中の検索操作を容易にします。 Dm_target 構造体は、ターゲット デバイスに対応する構造体によってマップされるマップされたデバイス論理領域の開始アドレスと範囲を具体的に記録し、特定のターゲット デバイス関連操作の target_type 構造体へのポインタも含みます。 Target_type 構造には主に、ターゲット デバイスに対応するターゲット ドライバー プラグインの名前、このタイプのターゲット デバイスを構築および削除する定義されたメソッド、このタイプのターゲット デバイスに対応する IO リクエストの再マッピングと終了 IO メソッドが含まれます。 、など。特定のターゲット デバイスを表すフィールドは dm_target のプライベート フィールドであり、ポインタはマップされたデバイスによってマップされた特定のターゲット デバイスに対応する構造体を指します。たとえば、ターゲット デバイスに対応する最も単純な線形マッピング ターゲット タイプの構造は、dm-linear.c ファイルで定義されている Linear_c 構造です。その定義は次のとおりです:

struct linear_c {

 struct dm_dev *dev;

 sector_t start;

};
ログイン後にコピー

ターゲット デバイスの定義は非常に単純で、対応する物理デバイスを表す dm_dev 構造体ポインターと、物理デバイス内のセクター単位のオフセット アドレス開始が含まれるだけです。上記のデータ構造間の関係を図 3 に示します。

Linux システムカーネルのデバイスマッパーメカニズム (1) (2)

図 3 デバイス マッパー内のいくつかの重要なデータ構造間の関係

カーネル内の確立プロセス

以下では、特定のコードに基づいてカーネル内でマッピングされたデバイスを作成するプロセス:

1. カーネルによって提供される ioctl インターフェイスによってユーザー空間に渡されるパラメーターに従って、dm-ioctl.c の dev_create 関数を使用します。ファイルを使用して、対応するマップされたデバイス構造を作成します。このプロセスは非常に単純で、主にマップされたデバイスと IO 操作に事前に適用されたメモリ プールを含む、必要なメモリ リソースのカーネルに適用されます。マップされたデバイスに対応するリクエスト キュー dm_request は、 によって提供される blk_queue_make_request 関数によって登録されます。カーネル。そして、マッピングされたデバイスをディスクブロックデバイスとしてカーネルに登録します。

2. dm_hash_insert を呼び出して、作成されたマップされたデバイスをデバイス マッパーのグローバル ハッシュ テーブルに挿入します。このテーブルには、カーネル内で現在作成されているすべてのマップされたデバイスが保存されます。

上記は、Linux システム カーネルのデバイス マッパー メカニズム (1) (2) の内容です。さらに関連する内容については、PHP 中国語 Web サイト (m.sbmmt.com) に注目してください。


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!