私は最近このアイデアを引き起こした質問を見ました。ここまたは Google パソコンで回答が見つかりません。基本的に私はカーネルI / Oアーキテクチャがどのように階層化されているかを理解したいと思います。たとえば、kjournald
次に出荷されますかpdflush
、それともその逆に出荷されますか?私の仮定pdflush
(一括ストレージI / Oでより一般的です)は、低レベルに座って実際に書き込みを実行するために必要なSCSI / ATA /すべてのコマンドをトリガし、書き込み前によりkjournald
高いレベルのファイルシステムデータ構造を処理することです。しかし、kjournald
ファイルシステムのデータ構造と直接対話し、時々目をpdflush
覚まし、kjournald
他の理由で2つがまったく対話しないことも可能です。
オリジナル:Linuxカーネルの大容量リポジトリにI / Oをディスパッチするための基本アーキテクチャを可視化(グラフィックまたは説明)する方法が必要です。
答え1
pdflush
kswapd`の詳細を議論する前に、kjournald, and
まず議論しているLinuxカーネルの背景知識を見てみましょう。
GNU/Linux アーキテクチャ
GNU/Linux のアーキテクチャは 2 つのスペースと考えることができます。
- ユーザー
- コア
存在する。 。 〜サイユーザースペースそしてカーネル空間GNU Cライブラリは()にありますglibc
。これは、カーネルをユーザ空間アプリケーションに接続するシステムコールインタフェースを提供します。
カーネルスペースは3つのレベルにさらに細分化できます。
- システムコールインターフェイス
- アーキテクチャに依存しないカーネルコード
- 建築関連コード
システムコールインターフェイス名前が示すように、glibc
カーネルとのインタフェースを提供します。これアーキテクチャに依存しないカーネルコードVFS(Virtual File System)、VMM(Virtual Memory Management)などの論理ユニットで構成されています。これ建築関連コード特定のハードウェアアーキテクチャのプロセッサとプラットフォーム固有のコードのコンポーネント。
GNU/Linux アーキテクチャ図
この記事の残りの部分では、カーネル空間のVFSおよびVMM論理デバイスに焦点を当てます。
GNU/Linux カーネルのサブシステム
VFSサブシステム
GNU/Linux カーネルがどのように構成されるかという高度な概念により、VFS サブシステムをより深く掘り下げることができます。このコンポーネントは、最終的に物理デバイス(HDDなど)のファイルシステム(ext3 / ext4 /など)にマッピングされているさまざまなブロックストレージデバイスへのアクセスを提供します。
VFS図
この図は、write()
ユーザー プロセスが VFS を通過し、最終的にデバイス ドライバに降りて物理記憶媒体に書き込む方法を示しています。ここが私たちが初めて会った場所ですpdflush
。これは、ダーティデータとメタデータバッファブロックをバックグラウンドからストレージメディアにフラッシュするのに役立つデーモンプロセスです。図にはこの内容は表示されませんが、kjournald
その横にpdflush
ダーティログブロックをディスクに書き込む同様の操作を実行する別のデーモンがあります。メモ:ログブロックは、ext4やJFSなどのファイルシステムが、ファイルが変更される前にディスクの変更を追跡する方法です。
上記の詳細については、以下で詳しく説明します。この紙。
write()
ステップの概要
write()
I / O Sybsystem操作の簡単な概要を提供するために、ユーザースペースアプリケーションで呼び出されるこの関数の例を使用します。
write()
プロセスはシステムコールを介してファイルの書き込みを要求します。- カーネルはファイルにマップされたページキャッシュを更新します。
- pdflush カーネルスレッドは、ページキャッシュをディスクにフラッシュする役割を担います。
- ファイルシステム階層は、各ブロックバッファを1つに統合します
bio struct
(23ページの1.4.3「ブロックレイヤー」を参照してください。) ブロックデバイス階層に書き込み要求を送信します。 - ブロックデバイス層は、上位層から要求を受け取り、I / Oエレベータ操作を実行し、その要求をI / O要求キューに入れます。
- デバイスドライバ(たとえば、SCSIまたは他のデバイス固有のドライバ)は書き込み操作を担当します。
- ディスク装置ファームウェアは、ヘッド検索、回転、データをプラッタのセクタに転送するなどのハードウェア操作を実行します。
VMMサブシステム
引き続きナビゲーションを続けながら、VMMサブシステムを調べることができます。メインメモリ(RAM)、スワップ領域、物理記憶媒体間の一貫性を維持する役割を果たすコンポーネントです。一貫性を維持する主なメカニズムはですbdflush
。メモリページはダーティページと見なされるため、記憶媒体のデータと同期する必要があります。このデータとストレージメディアの同期はデーモンプロセスbdflush
と連携してpdflush
調整されます。
VMM図
交換
システムメモリが足りなくなったりカーネルスワップタイマーが切れたりした場合、kswapd
デーモンはページを解放しようとします。利用可能なページ数がそれ以上になる限り、何もしませんfree_pages_high
。kswapd
しかし、利用可能なページ数が下がると、kswapd
ページ回収プロセスが開始される。kswapd
ページが再配置の対象としてマークされたら、デーモンを介してストレージメディアへbdflush
のpdflush
未解決の変更を同期させるように注意してください。