
Linuxカーネルマネージャーおよびアクティビティモニター 🐧💻
カーネルは、オペレーティングシステムの一部であり、_ハードウェア_と_ソフトウェア_コンポーネント間のやり取りを促進します。ほとんどのシステムでは、_ブートローダー_の後に起動時にロードされ、I/O要求やキーボード、モニター、ネットワークアダプター、スピーカーなどの周辺機器を処理します。通常、カーネルはメモリ管理、プロセス管理、デバイス管理、システムコール、セキュリティを担当します。 アプリケーションは、システムコール機構を使用してオペレーティングシステムからサービスを要求し、ほとんどの場合、この要求はオペレーティングシステムが提供するライブラリを使用してカーネルに渡され、関連するカーネル関数が呼び出されます。カーネルがこれらの低レベルタスクを実行している間、カーネルはアプリケーションやシステムの他の部分からアクセスできない保護カーネル空間と呼ばれるメモリの別の領域に常駐します。対照的に、ブラウザ、テキストエディタ、ウィンドウマネージャ、オーディオ/ビデオプレーヤーなどのアプリケーションは、メモリの異なる別の領域であるユーザ空間を使用します。この分離により、ユーザデータとカーネルデータが相互に干渉して不安定性や速度低下を引き起こすのを防ぎ、また、誤動作するアプリケーションプログラムがオペレーティングシステム全体をクラッシュさせるのを防ぎます。 システムコールとリソースを管理する方法が異なるため、さまざまなカーネル設計があります。たとえば、モノリシックカーネルはすべてのオペレーティングシステム命令を同じアドレス空間で実行します(速度のため)、一方マイクロカーネルはユーザとカーネルのサービスに異なる空間を使用します(モジュール性のため)。これら以外にも、ハイブリッドカーネル、ナノカーネル、エクソカーネルがあります。ハイブリッドカーネルアーキテクチャは、マイクロカーネルとモノリシックカーネルの側面を組み合わせたものです。
Linuxカーネルは、オープンソースでモノリシックなUnix系オペレーティングシステムカーネルであり、Linuxディストリビューション、ルーターなどのさまざまな組み込みシステム、およびすべてのAndroidベースシステムで使用されています。リーナス・トーバルズは1991年にLinuxカーネルを考案・作成し、今日も数千人の開発者によって開発が続けられています。これはフリーかつオープンソースソフトウェアの顕著な例であり、特にGNUオペレーティングシステムなどの他のフリーソフトウェアプロジェクトで使用されています。 Linuxベースのオペレーティングシステムはコンピューティングの大部分を支配していますが、それでもLinuxの初期に多くの議論の的となった設計上の欠陥をいくつか抱えています。たとえば、他のタイプのカーネルに比べて最も大きなフットプリントと最も複雑さを持っています。しかし、これはモノリシックカーネルが本質的に持つ設計上の特徴です。このような設計上の問題により、開発者は他のカーネルにはない新しい機能やメカニズムをLinuxカーネルに追加するようになりました。
標準のモノリシックカーネルとは異なり、Linuxカーネルはモジュール式でもあり、新しい_ハードウェア_(デバイスドライバとして)や_ファイルシステム_のサポートを追加したり、_システムコール_を追加したりするために通常使用される**ローダブルカーネルモジュール(LKM)**を受け入れます。LKMはランタイムでシステムにロードおよびアンロードできるため、再起動や再コンパイルせずにカーネルを拡張できる利点があります。したがって、モジュールが提供するカーネル機能は使用されていない間はメモリに常駐せず、関連するモジュールをアンロードしてメモリやその他のリソースを解放できます。
ローダブルカーネルモジュールは、Linuxでは/lib/modulesに.ko(カーネルオブジェクト)拡張子で配置されます。ロードされたカーネルモジュールの一覧表示にはlsmodコマンドが使用でき、カーネルモジュールのロードまたはアンロードにはmodprobeまたはinsmod/rmmodが使用されます。insmod/rmmodは、modprobeから独立しており、/lib/modules/$(uname -r)へのインストールを必要としないモジュールに使用されます。
以下に、ロード時とアンロード時にメッセージを出力する簡単なLinuxカーネルモジュールの例を示します。モジュールのビルドおよびインストール手順をMakefileを使用して以下に示します。``` make # build sudo make install # install sudo modprobe lkm_example # load sudo modprobe -r lkm_example # unload
以下の例では、カーネルのメッセージバッファを取得するために[dmesg](https://linux.die.net/man/8/dmesg)コマンドが使用されています。```
[16994.295552] [+] Example kernel module loaded.
[16996.325674] [-] Example kernel module unloaded.
kmon は、テキストベースのユーザーインターフェース を提供し、Linux カーネルモジュールの管理とカーネルアクティビティの監視を行います。管理とは、モジュールのロード、アンロード、ブラックリスト登録、情報表示を意味します。カーネルモジュールのこれらの更新、ハードウェアに関するログ、その他のカーネルメッセージは、kmon のリアルタイムアクティビティモニターで追跡できます。Linux ではこれらのタスクに dmesg や kmod などの異なるツールの使用が必要であるため、kmon はそれらを1つのターミナルウィンドウに集約し、機能を維持しながら可能な限り使いやすくすることを目指しています。
kmon は Rust で書かれており、テキストベースのユーザーインターフェースに Ratatui と termion ライブラリを使用しています。
kmon は、Rust がインストールされていれば、Cargo を使用して crates.io からインストールできます。``` cargo install kmon
サポートされる最小のRustバージョン(MSRV)は`1.74.1`です。
### Arch Linux
**kmon**はArch Linuxの[公式リポジトリ](https://www.archlinux.org/packages/extra/x86_64/kmon/)からインストールできます。```
pacman -S kmon
開発パッケージはAURにもあります。お好みのAUR helperを使用してインストールしてください。例えば、``` paru -S kmon-git
### Nixpkgs