linux - 从内核空间向用户空间传递地址

标签 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 以 block 的形式复制数据?如果有人能给我指示如何继续,我将不胜感激。谢谢!

最佳答案

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

一个简单的方法是:

 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));

关于linux - 从内核空间向用户空间传递地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15676185/

相关文章:

linux - Shell 命令中不需要的换行符(来自 VIM)

linux - 我们可以为正在运行的程序设置 LD_PRELOAD 环境变量吗?

linux-kernel - 使用旧的设备文件作为字符设备驱动程序

memory - 保留 SDRAM 的一部分在 U-Boot 和 Linux 内核之间传递数据

java - 如何在java spring中运行预定的作业?

MYSQL查询查找不与其他表重叠的行

node.js - 使用 Twilio、Heroku Scheduler 和 Node 发送预定文本消息 - 没有任何反应

linux - 关于 Linux 中的线程

在 bash 脚本上调用 execve bash 找不到参数

linux - 使用 sips 调整一长串 jpg 文件的大小