Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 如何在内核模式下强制调度程序在特定内核上运行_Windows_Assembly_Kernel_Driver_Scheduler - Fatal编程技术网

Windows 如何在内核模式下强制调度程序在特定内核上运行

Windows 如何在内核模式下强制调度程序在特定内核上运行,windows,assembly,kernel,driver,scheduler,Windows,Assembly,Kernel,Driver,Scheduler,我正在尝试使用内核模式驱动程序读取多个内核上的MSR。RDMSR无法从其他内核读取某些MSR(APERF)。如何强制调度程序在特定内核上运行线程。有没有办法找到调度程序存储线程和进程信息的位置 现在,我的解决方案是使用KeSetSystemAffinityThreadEx设置亲和性,然后使用CPUID检查内核,如果错误,最后重试。我需要一种更可靠的方法来交换内核。术语:调度是一种分布式算法。每个核心运行调度程序函数,以确定下一步应该运行什么。它可能使用互锁操作来确保同一任务不能同时在两个线程上启

我正在尝试使用内核模式驱动程序读取多个内核上的MSR。RDMSR无法从其他内核读取某些MSR(APERF)。如何强制调度程序在特定内核上运行线程。有没有办法找到调度程序存储线程和进程信息的位置


现在,我的解决方案是使用KeSetSystemAffinityThreadEx设置亲和性,然后使用CPUID检查内核,如果错误,最后重试。我需要一种更可靠的方法来交换内核。

术语:调度是一种分布式算法。每个核心运行调度程序函数,以确定下一步应该运行什么。它可能使用互锁操作来确保同一任务不能同时在两个线程上启动。但无论如何,没有一个“主控制程序”将线程分配给内核。与其让您的任务跳转到多个内核,广播一个IPI(处理器间中断)在每个内核上运行中断处理程序是否有用?或者将目标发送到特定的核心?IDK您希望在侵入性和低延迟之间进行何种折衷。否则,Windows可能有一个调度程序函数,您可以在内核任务中的任何安全点调用它。至少Linux就是这样工作的;您只需调用
schedule()
yield()
即可调用当前核心上的调度程序。(当core!=affinity时,应该拒绝让您的任务继续运行)在linux上,您还有一个内核函数,可以从已经实现的其他内核读取MSR。windows可能也存在类似的情况。我认为只有两种方法:1)从固定到不同CPU的不同用户模式线程调用驱动程序。只要驱动程序上没有附加任何筛选器驱动程序,就会在调用线程的上下文(即cpu)中调用它。2) 您使用DPC并使用设置其目标。这需要异步处理请求,WDF应该有助于正确处理流。术语:调度是一种分布式算法。每个核心运行调度程序函数,以确定下一步应该运行什么。它可能使用互锁操作来确保同一任务不能同时在两个线程上启动。但无论如何,没有一个“主控制程序”将线程分配给内核。与其让您的任务跳转到多个内核,广播一个IPI(处理器间中断)在每个内核上运行中断处理程序是否有用?或者将目标发送到特定的核心?IDK您希望在侵入性和低延迟之间进行何种折衷。否则,Windows可能有一个调度程序函数,您可以在内核任务中的任何安全点调用它。至少Linux就是这样工作的;您只需调用
schedule()
yield()
即可调用当前核心上的调度程序。(当core!=affinity时,应该拒绝让您的任务继续运行)在linux上,您还有一个内核函数,可以从已经实现的其他内核读取MSR。windows可能也存在类似的情况。我认为只有两种方法:1)从固定到不同CPU的不同用户模式线程调用驱动程序。只要驱动程序上没有附加任何筛选器驱动程序,就会在调用线程的上下文(即cpu)中调用它。2) 您使用DPC并使用设置其目标。这需要异步处理请求,WDF应该有助于正确处理流。