Linux用のロード可能なカーネルモジュールを作成しています。そして、私はLinuxカーネルの各タスクにいくつかのデータを保存する必要があります(これらのデータはスケジューラーコールバックで使用されます)。Linuxカーネルモジュールのタスク単位のデータ構造
struct task_struct
を変更して自分のフィールドを挿入することができます。しかし、私は比較的のカーネルモジュールを作成しているので、元のLinuxソースツリーのコードは変更できません。
struct task_struct
からハッシュテーブルのマイデータへのマッピングを維持することもできます。しかしそれはちょっと重すぎるようです。
私はThread local data in linux kernel moduleの答えを読んでいます。 struct file
にprivate_data
を使って説明しました。しかし、struct file
を取得するには、それを開くためにすべてのスレッドが必要です。 struct task_struct
を使用してタスクごとのデータを照会する方法はありません。 (私はスケジューラーのコールバックでデータを使用する必要があるので)
私の質問は:struct task_struct
を変更せずに、Linuxカーネルでタスクごとのデータ構造を登録できる単純な方法ですか?
多くの感謝!
タスクごとのデータとは何ですか、あなたのモジュールは実際に何をしていますか?もっと説明してください! –
@Basile Starynkevitchカーネル内の各 'task_struct'にいくつかのデータを格納する必要があります。スケジューリング中にこれらのデータにアクセスする可能性があります。私は、各スレッドの#コンテキストスイッチをカウントするモジュールを作成しているとします(この機能は元のカーネルに存在するので、単なる例です)。 – Naruil
@ Naruil:あなたはこれを言う全面的な質問があります。プロセス単位のデータを追跡する必要があるカーネルモジュールはごくわずかです。なぜこれが必要なのか言うことができれば、どのように進めるかをより明確にするでしょう。 – nneonneo