从内核空间将地址传递给用户空间

时间:2013-03-28 07:12:23

标签: linux linux-kernel scheduler

我正在使用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以块的形式复制数据,所以如何发送这些整个值?如果有人能给我指示如何继续,我真的很感激。谢谢!

1 个答案:

答案 0 :(得分: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));