pdflush
、kjournald, and
kswapd` の詳細を説明する前に、Linuxカーネルに関して正確に話している内容の背景について少し説明しましょう。
GNU / Linuxアーキテクチャ
GNU / Linuxのアーキテクチャは、2つのスペースと考えることができます。
間でユーザ空間とカーネル空間は、 GNU Cライブラリ(座っていますglibc
)。これにより、カーネルをユーザー空間アプリケーションに接続するシステムコールインターフェイスが提供されます。
カーネルスペースは、さらに3つのレベルに分割できます。
- システムコールインターフェース
- アーキテクチャに依存しないカーネルコード
- アーキテクチャ依存コード
システムコールインターフェイスは、その名前が示すとおり、glibc
カーネルとカーネル間のインターフェイスを提供します。建築独立したカーネルコードは、このようなVFS(仮想ファイルシステム)とVMM(仮想メモリ管理)などの論理ユニットで構成されています。アーキテクチャに依存するコードは、特定のハードウェアアーキテクチャのプロセッサとプラットフォーム固有のコードである成分です。
GNU / Linuxアーキテクチャの図
この記事の残りの部分では、カーネルスペース内のVFSおよびVMM論理ユニットに注目します。
GNU / Linuxカーネルのサブシステム
VFSサブシステム
GNU / Linuxカーネルがどのように構成されているかについての高レベルの概念があれば、VFSサブシステムをもう少し深く掘り下げることができます。このコンポーネントは、物理デバイス(HDD /など)上のファイルシステム(ext3 / ext4 / etc。)に最終的にマップされるさまざまなブロックストレージデバイスへのアクセスを提供します。
VFSの図
この図はwrite()
、ユーザーのプロセスからVFSを通過し、最終的にデバイスドライバーに到達して物理ストレージメディアに書き込まれる方法を示しています。これは私たちが遭遇する最初の場所pdflush
です。これは、ダーティデータとメタデータバッファブロックをバックグラウンドでストレージメディアにフラッシュするデーモンです。この図には示されていませんが、別のデーモンがありますkjournald
。これはpdflush
、サイドに並んで、ダーティジャーナルブロックをディスクに書き込む同様のタスクを実行します。注:ジャーナルブロックは、ext4やJFSなどのファイルシステムが、ファイル内のディスクへの変更を、それらの変更が行われる前に追跡する方法です。
上記の詳細は、このペーパーでさらに説明します。
write()
手順の概要
I / O sybsystem操作の簡単な概要を提供するために、write()
ユーザースペースアプリケーションによって関数が呼び出される例を使用します。
- プロセスは、
write()
システムコールを介してファイルの書き込みを要求します。
- カーネルは、ファイルにマップされたページキャッシュを更新します。
- pdflushカーネルスレッドは、ページキャッシュをディスクにフラッシュします。
- ファイルシステムレイヤーは、各ブロックバッファーをaにまとめ
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
デーモンを介して、記憶媒体への未解決の変更を同期するように注意します。
参考資料と詳細資料