0

sched.h ファイルの struct task_struct にフィールドを追加する方法は?

私はこの構造を持っていると言います:

struct Node{
 int counter;
 char* buffer;
 int sum;
} 

など、そのようなノードのリストを追加したいですか? リストを再実装したくありません

struct Node{
 int counter;
 char* buffer;
 int sum;
 Node* next;
} 

しかし、実装ではなく、一般的なカーネル リストで struct list_head を使用したいと考えています。しかし、struct list_head を task_struct に追加すると、特定のフィールドを含む特別なリストを追加したいときに、task_struct の別のインスタンスが得られます。

C++ に関しては、リストを struct_task に追加して、ファイル scehd.h が次のようになるようにします。

struct task_struct {
.
.
.
List<Node> myList;
.
.
}

それを行う方法と、INIT_TASK マクロでノードを初期化する方法を教えてください。

4

1 に答える 1

1

「structlist_headをtask_structに追加すると、task_structの別のインスタンスが得られる」とあなたは言います。私があなたを誤解しない限り、それは真実ではありません。

にを追加するstruct list_headと、task_structstruct list_headtask_structそれ以上でもそれ以下でもありません。何に使用するかはあなた次第ですlist_head

念頭に置いていることを実装するには、次のようなものが必要になります。

struct task_struct {
    ...
    struct list_head node_list;
};

struct your_node {
    struct list_head list;
    int counter;
    char* buffer;
    int sum;
};

task_struct作成さnode_listれると、初期化して空のリストになります。あなたのインスタンスを作成するときyour_nodeも同様に行い、それをnode_listwithに追加します。

list_add_tail(&your_node->list, &your_task->node_list);

実際の例についてperf_event_listは、を参照してください。またtask_struct、でそれを繰り返すコードを参照してくださいkernel/events/core.c

于 2012-05-01T03:48:20.183 に答える