1

我正在研究 linux-3.7.6/kernel/sched/core.c,在 schedule() 函数中,我必须记录进程的 pid 和 tgid,并且必须将记录的值显示给用户空间。我在存储 tgid 和 pid 的内核空间中获取了全局结构数组,我在想是否可以将数组的地址传递给用户空间,然后在用户空间访问 tgid 和 pid 的值。

typedef struct process{
int pid;
int tgid;
}p;

p proc[100];

有没有一种方法可以一次性将存储在结构数组中的所有数据发送到用户空间?我之前使用过 copy_to_user 但只是停留在这里,因为 copy_to_user 以块的形式复制数据,如何发送这些整组值?如果有人可以指导我如何继续前进,我将不胜感激。谢谢!

4

1 回答 1

1

我假设您希望在将数组复制到用户级别时保持原子性。

一个简单的方法是:

 p local_array[100];

preemption_disable();   //disable preemption so you array content will not change,
                        //because no schedule() can be executed at this time.

memcpy(local_array, array, sizeof(array));   //then we get the consistent snapshot of
                                             //array.
preemption_enable();

copy_to_user(user_buff_ptr, local_array, sizeof(array));
于 2013-03-28T08:16:39.297 回答