Linux kernel 一个内核怎么可能是非抢占的并且仍然有多个控制路径

Linux kernel 一个内核怎么可能是非抢占的并且仍然有多个控制路径,linux-kernel,Linux Kernel,在我不久前参加的一个操作系统课程中,我们正在研究一个旧的、非抢占式的Linux内核(2.4.X)。然而,我们被告知内核中可能同时存在多个控制路径。这与内核的非抢占性不矛盾吗? EDIT:我的意思是,内核中没有上下文切换。上次我试着问这个问题时,我得到的回答是“嗯,Linux内核是抢占式的,所以没有问题。”非抢占式内核意味着内核不会代表另一个进程执行上下文切换,或者中断另一个正在运行的进程。通过实现协作多任务,它仍然可以是多处理,实际运行的进程本身可以控制内核或其他进程。因此,是的,您可以拥有多任

在我不久前参加的一个操作系统课程中,我们正在研究一个旧的、非抢占式的Linux内核(2.4.X)。然而,我们被告知内核中可能同时存在多个控制路径。这与内核的非抢占性不矛盾吗?
EDIT:我的意思是,内核中没有上下文切换。上次我试着问这个问题时,我得到的回答是“嗯,Linux内核是抢占式的,所以没有问题。”

非抢占式内核意味着内核不会代表另一个进程执行上下文切换,或者中断另一个正在运行的进程。通过实现协作多任务,它仍然可以是多处理,实际运行的进程本身可以控制内核或其他进程。因此,是的,您可以拥有多任务和非抢占式内核


对于单片内核,内核内没有上下文切换,但当然内核仍然执行多任务处理……因此,您仍然具有多任务和非前置性

Linux内核将大量工作卸载到内核线程,这些工作可能与用户空间任务一起被安排进或出,独立于内核抢占。即使是旧的2.4内核也有这些内核线程,尽管比现代的2.6内核要少。2.6内核现在有几个级别的抢占,可以在编译时选择,但完全抢占不是默认的。

Linux内核可以在中断上下文或进程(用户)上下文中运行。流程上下文意味着它代表调用了系统调用的流程运行。中断上下文意味着它代表某种中断(硬件中断、软件中断等)运行

当您谈到抢占式多任务时,它意味着内核可以决定抢占某个任务来运行另一个任务。当您谈到抢占式内核时,它意味着内核可以决定抢占自己的运行,以运行其他内核代码

现在,在Linux成为抢占式内核之前,您可以在多个CPU上运行内核代码,内核代码可能会被硬件中断中断(这可能会在返回之前运行softirq,…)。抢占式内核意味着内核也可以被进程上下文内核代码抢占,以避免长时间延迟(抢占式Linux来自Linux实时树)

当然,所有这些在Rusty Russell和

编辑:


或者,为了更好地解释这一点,当任务调用非抢占式内核上的系统调用时,在系统调用结束之前,该任务无法被抢占(可能使用EINTR,但这可能需要很长时间)。抢占式内核允许抢占该任务,从而降低等待运行的其他任务的平均情况和最坏情况延迟。

在2.4内核中,虽然内核代码不能被其他内核代码任意抢占,但内核代码仍然可以通过休眠自愿放弃CPU(这显然是很常见的情况)


此外,内核代码总是可以被中断处理程序抢占(除非它特别禁用了中断),2.4内核也支持SMP,允许多个CPU在内核中同时执行。

谢谢,但事实证明我的问题模棱两可,你误解了我。我修改了它。你能给我一个2.4内核中正在进行的多线程的例子吗?我不记得我看到过任何迹象n schedule.c.@epsionvector:当你执行ps aux时,你会看到一些任务的名称以方括号开始和结束。这些是内核线程。其中一些任务每个CPU有一个线程,CPU的数量在斜杠后面:例如:[ksoftirqd/0]