小编Zih*_*han的帖子

为什么Linux内核在preempt_schedule_irq中启用中断?

我正在阅读 Linux 源代码来了解调度的工作原理。我了解到,在可抢占内核(CONFIG_PREEMPT已设置)中,通过调用从中断处理程序返回内核空间后有机会抢占preempt_schedule_irq

但是,我还在preempt_schedule_irq中找到了以下代码片段

do {
    preempt_disable();
    local_irq_enable(); //why enable interrupt here?
    __schedule(true); //interrupt would be disabled inside it
    local_irq_disable();
    sched_preempt_enable_no_resched();
} while (need_resched());
Run Code Online (Sandbox Code Playgroud)

里面有一个local_irq_enable()电话,这让我很困惑。为什么我们需要在这里启用中断,因为在开始时__schedule它会再次禁用

我的粗略猜测是,这为首先安排优先级较高的进程提供了机会。然而,这是没有意义的,因为抢占已经被禁用preempt_schedule_irq,即使有中断,也不会有抢占重新安排。

那么抢占调度程序到底有什么意义呢?我想我一定错过了什么,但我不明白。

c linux interrupt linux-kernel

5
推荐指数
1
解决办法
857
查看次数

PCI段(域)如何与多个主机桥(或根桥)相关?

我试图了解PCI段(域)如何与多个主机桥相关联?

有人说多个PCI域对应多个主机桥,但有人说它意味着在一个主机桥下有多个根桥.我很困惑,我在PCI SIG基本规范中找不到太多有用的信息.

我想知道

(1)假设我在MCFG中设置了3个PCI域,我是否有3个主机桥连接3个CPU和总线,或者我有3个根桥支持3倍总线但是在一个CPU中共享一个公共主机桥?

(2)如果我有多个主桥(或根桥),这些桥是否共用一个共同的南桥(例如,ICH9),或者它们是分开的?

我是初学者,谷歌并没有解决我的问题.如果有人能给我一些线索,我将不胜感激.

cpu cpu-architecture pci-bus pci pci-e

5
推荐指数
2
解决办法
1987
查看次数

标签 统计

c ×1

cpu ×1

cpu-architecture ×1

interrupt ×1

linux ×1

linux-kernel ×1

pci ×1

pci-bus ×1

pci-e ×1