我有一项工作需要从context_switch
(原子上下文)和scheduler_tick
(也是原子)进行安排。这个工作功能需要在呼叫过程中运行。 task_struct
找出此流程的最佳频率,并将其存储在流程中' task_struct
以便下次调度时,内核可以设置计算的频率。
现在,改变频率被认为是可能睡眠的操作。这意味着我不能直接从context_switch
调用我的工作函数,而是必须设置工作队列或小工具。
考虑到我希望如何更改 {/ 1>}上的频率以及我如何创建一个为我进行切换的流程以及这将如何涉及上下文切换本身,我不知道该怎么办。
详细说明:
让我们假设2个进程当前正在运行PID 1000,2000。
我正在使用' - >'发出上下文切换信号,500表示工作队列/ tasklet进程。
我们最终会得到类似的结论:
1000 - > 2000 - > 500(设置为PID 2000) - > 1000 - > 500(设置为
PID 1000) - > 2000 - > 500(设置为PID 2000)...... ......
换句话说,当上下文从1000切换到2000时,context_switch
会调度我的工作函数来计算和/或更改新进程的频率(2000)。这可能涉及到我的进程的上下文切换(500)。一旦完成此过程,我们可能最终切换回1000,然后将涉及重新调度我的过程(500)等等。这个例子的重点在于,有些情况下我们可能会在没有实际执行任何真正的工作的情况下进行大量切换
我相信我可以用来解决这个问题的一个问题是,如果我的进程在启动后有一个固定的PID。然后,我可以更新context_switch
代码说:
context_switch
请注意,以上只是伪代码,因为我不知道我应该使用哪个界面。
在内核中设置应该在上下文切换时发生的工作的正确方法是什么?