2013-08-28 13 views
6

Linux用のロード可能なカーネルモジュールを作成しています。そして、私はLinuxカーネルの各タスクにいくつかのデータを保存する必要があります(これらのデータはスケジューラーコールバックで使用されます)。Linuxカーネルモジュールのタスク単位のデータ構造

struct task_structを変更して自分のフィールドを挿入することができます。しかし、私は比較的のカーネルモジュールを作成しているので、元のLinuxソースツリーのコードは変更できません。

struct task_structからハッシュテーブルのマイデータへのマッピングを維持することもできます。しかしそれはちょっと重すぎるようです。

私はThread local data in linux kernel moduleの答えを読んでいます。 struct fileprivate_dataを使って説明しました。しかし、struct fileを取得するには、それを開くためにすべてのスレッドが必要です。 struct task_structを使用してタスクごとのデータを照会する方法はありません。 (私はスケジューラーのコールバックでデータを使用する必要があるので)

私の質問は:struct task_structを変更せずに、Linuxカーネルでタスクごとのデータ構造を登録できる単純な方法ですか?

多くの感謝!

+0

タスクごとのデータとは何ですか、あなたのモジュールは実際に何をしていますか?もっと説明してください! –

+0

@Basile Starynkevitchカーネル内の各 'task_struct'にいくつかのデータを格納する必要があります。スケジューリング中にこれらのデータにアクセスする可能性があります。私は、各スレッドの#コンテキストスイッチをカウントするモジュールを作成しているとします(この機能は元のカーネルに存在するので、単なる例です)。 – Naruil

+0

@ Naruil:あなたはこれを言う全面的な質問があります。プロセス単位のデータを追跡する必要があるカーネルモジュールはごくわずかです。なぜこれが必要なのか言うことができれば、どのように進めるかをより明確にするでしょう。 – nneonneo

答えて

2

タスク単位のデータ構造を登録できるシンプルでクリーンな方法は、struct task_structを変更することです。

モジュールは、のために設計されています。オプションで、カーネルの部分です。基本カーネルから明示的にエクスポートされた関数のみを使用できます。 基本カーネルを変更する必要がある場合は、モジュールを使用できなくなります。

関連する問題