Linux 内核是否仅在发生异常时执行

Linux 内核是否仅在发生异常时执行,linux,linux-kernel,embedded-linux,userspace,Linux,Linux Kernel,Embedded Linux,Userspace,我正在学习嵌入式Linux。对于下面的问题,我似乎找不到合适的答案 我的理解是,当用户空间应用程序执行时,如果我们想执行IO,例如,系统调用将导致SW中断,通常导致MCU从非特权模式切换到特权模式,内核将代表应用程序执行IO 相似性当硬件中断发生时,我猜这将导致模式再次切换并在内核中执行中断处理程序 我不清楚的是,这是内核代码控制CPU的唯一时间吗 例如,对于只有一个内核的情况,如果用户应用程序代码正在运行,那么内核不应该不时地控制CPU来检查事情,而不管是否发生了中断。也许有一个周期性的定时器

我正在学习嵌入式Linux。对于下面的问题,我似乎找不到合适的答案

我的理解是,当用户空间应用程序执行时,如果我们想执行IO,例如,系统调用将导致SW中断,通常导致MCU从非特权模式切换到特权模式,内核将代表应用程序执行IO

相似性当硬件中断发生时,我猜这将导致模式再次切换并在内核中执行中断处理程序

我不清楚的是,这是内核代码控制CPU的唯一时间吗

例如,对于只有一个内核的情况,如果用户应用程序代码正在运行,那么内核不应该不时地控制CPU来检查事情,而不管是否发生了中断。也许有一个周期性的定时器中断允许这样做

另外,如果我们有多个内核,那么内核会一直在一个内核上运行,而用户应用程序在另一个内核上运行吗

我不清楚的是,这是内核代码控制CPU的唯一时间吗

是的,内核不能中断用户代码的运行。但内核将设置一个定时器硬件,它将在一致的时间段之间生成定时器中断。内核利用它来实现任务调度

另外,如果我们有多个内核,那么内核会一直在一个内核上运行,而用户应用程序在另一个内核上运行吗

可以将多核系统视为多个机器,但它们共享内存,并且能够相互发送中断。

Read,因为需要一整本书来回答您的问题。稍后,在

中断确实经常发生(也许每秒数百次,甚至数千次)。在终端中尝试几次cat/proc/interrupts(请参阅)

内核将代表应用程序执行IO

不总是马上。如果您读取一个文件,其内容可能位于中(然后不需要物理IO)。如果需要磁盘访问(或联网),内核将安排(读取)一些IO并切换到其他可运行任务。很久以后,处理了几个中断(其中一些可能由与IO相关的物理设备触发),最后(几毫秒之后),您的进程可以从系统调用返回并再次运行。在此延迟期间,其他进程一直在运行

另外,如果我们有多个内核,那么内核会一直在一个内核上运行,而用户应用程序在另一个内核上运行吗


这在很大程度上取决于(甚至取决于内核版本)。可能内核没有在同一个内核上运行。YMMV.

SoC制造商通常将支持Linux的芯片称为MPU,而不是MCU。“这是内核代码获得CPU控制权的唯一时间吗?”--在启动时,控制权只是从启动程序移交给内核。是的,有一个周期性的计时器会中断。对于多芯,无;内核中互斥的需要证明您的猜测是错误的。内核正在处理中断。然后每次都可能发生(计时器、IO设备、页面错误…)。查看
/proc/interrupts
,看看中断发生的频率。内核的调度器可以进行上下文切换。所以我相信你的说法“内核不能中断用户代码的运行”是错误的和令人困惑的。@BasileStarynkevitch-这可以说得更好,但它是准确的-内核不会中断用户空间,硬件会。内核代码不能仅仅导致执行切换到内核,而不使用硬件中断之类的机制,或者没有用户模式代码触发异常。当然,内核会为自己或用户空间设置这些东西。但在发生这种情况的瞬间,并不是内核进行切换,而是硬件中断或用户空间代码。