TL;DR:最好的方法是什么:
- 获取当前流程;
- 访问其印刷电路板;
- 访问并返回其
vruntime
值?
我正在尝试实现一个新的系统调用(在 C 中(,它将返回当前进程的虚拟运行时。
虚拟运行时存储在进程PCB的vruntime
字段中,但我找不到如何访问它。
我一直在尝试找到一种使用进程的 PID 或进程名称本身的方法,但没有成功。 有没有办法将流程作为struct task_struct
变量并访问vruntime
字段?
已经有一个,getrusage(RUSAGE_SELF, &rusage)
,在kernel/sys.c:getrusage((中实现。
您的系统调用将在调用它的线程的上下文中以内核模式运行,因此以下表达式将获取当前进程task_struct:
current_thread_info() -> task
然后,您可以使用copy_to_user
或类似内容将 vruntime 字段读取到用户提供的缓冲区,以确保来自调用方的不受信任地址的安全。