Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C linux内核模块中的每任务数据结构_C_Linux_Data Structures_Linux Kernel - Fatal编程技术网

C linux内核模块中的每任务数据结构

C linux内核模块中的每任务数据结构,c,linux,data-structures,linux-kernel,C,Linux,Data Structures,Linux Kernel,我正在为Linux编写一个可加载的内核模块。我需要在Linux内核中为每个任务存储一些数据(这些数据将在调度程序回调中使用) 我知道我可以修改struct task\u struct并插入我自己的字段。但由于我愿意编写一个相对干净的内核模块,所以我不能修改原始Linux源代码树中的任何代码 还可以在哈希表中维护从struct task\u struct到我的数据的某种映射。但它似乎有点太重了 我已经把答案读了一遍。它提到在struct file中使用private\u数据。但是它需要每个线程来打

我正在为Linux编写一个可加载的内核模块。我需要在Linux内核中为每个任务存储一些数据(这些数据将在调度程序回调中使用)

我知道我可以修改
struct task\u struct
并插入我自己的字段。但由于我愿意编写一个相对干净的内核模块,所以我不能修改原始Linux源代码树中的任何代码

还可以在哈希表中维护从
struct task\u struct
到我的数据的某种映射。但它似乎有点太重了

我已经把答案读了一遍。它提到在
struct file
中使用
private\u数据。但是它需要每个线程来打开它,以便获得一个
结构文件
。而且无法使用
struct task\u struct
查询每个任务的数据。(因为我需要在调度程序回调中使用数据)

我的问题是:有没有一种简单而干净的方法允许我在Linux内核中注册每个任务的数据结构,而无需修改
struct task\u struct


非常感谢

允许您注册每个任务数据结构的唯一简单明了的方法是修改
struct task\u struct

模块是为内核的可选部分设计的;它们只能使用从基本内核显式导出的函数。
如果必须更改基本内核,则不能再使用模块。

每个任务的数据是什么?模块真正在做什么?解释更多@Basile Starynkevitch我需要在内核中为每个
任务结构
存储一些数据。在调度期间,可能会访问这些数据。假设我正在编写一个模块,为每个线程计算#上下文切换(我知道这个功能存在于原始内核中,所以这只是一个示例。很难用几句话清楚地解释我的模块到底在做什么。)@Naruil:你有一个完整的问题要说。很少有内核模块真正需要跟踪每个进程的数据;如果你能说出为什么需要这样做,这将使我们更清楚地了解如何进行。@nneonneo好的,让我更清楚地说明。该模块为用户程序实现了一种高性能的内核辅助同步机制。每个用户线程将向内核注册一个数据结构。这个数据结构可以通过调度器回调函数和它通过设备公开的一些同步原语在内核空间中访问。你有什么想法吗?