我有一个多线程应用程序,它运行在Linux 2.6.30的8核PowerPC处理器上。我想确定启动线程时使用的CPU。显而易见的答案是打印PID处理器ID专用寄存器。使用mfspr指令访问PID寄存器。我尝试在我的C程序中使用以下asm访问它:
asm(" mfspr %0, 286 " : "=r" (cpu_no));
问题是mfspr
是一个特权指令,即使这个应用程序以root身份运行,它也会因非法指令错误而出错。在裸机应用程序上执行时,此指令工作正常。
虽然可以创建一个在内核空间中执行此指令的驱动程序,但当答案返回到线程时,它可能已经移动到另一个核心。
从Linux用户级进程有没有办法获取当前线程正在运行的核心的id?
答案 0 :(得分:3)
答案 1 :(得分:-1)
另一种方法是使用WHOAMI注册。 WHOAMI寄存器返回读取它的核心的CPU ID。