linux - Linux 内核致命异常(对齐陷阱)
问题描述
我正在尝试进入内核编程。当发生特定的内核恐慌时,我想尝试在每个 CPU 上的运行队列中打印出进程。我一直在查看内核中的各种代码块,并试图以我自己的方式模拟相同的代码块,但我想我制作了某种导致致命异常和对齐陷阱的科学怪人:
int cpu = 0;
struct rq *rq;
struct task_struct *p, *n;
for_each_possible_cpu(cpu) {
rq = cpu_rq(cpu);
raw_spin_lock(&rq->lock);
printk(KERN_INFO, "rq->nr_running=%u\n", nr_running);
list_for_each_entry_safe(p, n, &rq->cfs_tasks, se.group_node) {
printk(KERN_INFO, "%d : %s\n", p->pid, p->comm);
}
raw_spin_unlock(&rq->lock);
};
循环只为 CPU 0 执行,然后它变得疯狂。你能为我指出正确的方向吗?(这是我在 core.c 中编写的代码)
编辑:问题出在自旋锁上。我猜想只有在那个 CPU 上运行的进程才能锁定?
Edit2:看来我让它工作了。我认为问题在于,在原始源代码中, struct rq* rq 声明位于 for 循环内。
解决方案
推荐阅读
- python - 将 2D 灰度重塑为 4D 以进行 Keras 模型推理
- php - SELECT count(*) from where date(week number) 等于当前周数
- javascript - Node Express 中的全局变量和类文件中的访问
- oracle - 为什么 AFTER UPDATE (FOR EACH ROW) 触发器在 (NOT DEFERRABLE) 完整性约束检查之前触发?
- python - 尝试并行运行 sklearn KMeans 的多个实例
- javascript - cypress-cucumber-preprocessor 数据表
- sql - 如何将一个查询的总和减去同一个oracle sql表中另一个查询的总和?
- ios - 链接器命令失败,退出代码为 1(使用 -v 查看调用)本机反应
- javascript - React-Native 无限循环
- javascript - 尝试以“while循环”的形式编写JavaScript“for循环”,同时保持相同的功能