linux - 内核态上下文切换时如何保持原子性?

标签 linux operating-system linux-kernel x86 kernel

毫无疑问,内核态的上下文切换,是被硬件中断或者软件中断困住了。也知道上下文切换应该保持原子性,但是如何实现原子性呢?众所周知,中断门是禁止所有中断的(不知道有没有NMI)。难道一个中断门本身就可以自然地看作原子序列吗?

最佳答案

原子操作在内核中的实现如下。在高层(例如,从设备驱动程序开发人员的 POV),内核提供 locks获取和释放类似于用户空间互斥锁。在较低级别,这些锁是使用 atomic operations 的组合实现的。并向内核调度程序发出信号 preemption should not occur .

在调度程序本身中,原子性由 masking interrupts 保证.这是使用单个指令(cli 或 sti)完成的,因此它本身是原子的。 NMI 确实可以在中断被清除时发生,但是,这是一种特殊情况。 NMI 处理程序知道它可以在一个奇怪的上下文中被调用,所以它确保它确实是 not change the context .

关于linux - 内核态上下文切换时如何保持原子性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10477591/

相关文章:

linux - 将应用程序部署到 Google 计算引擎上的 Linux 服务器

从用户输入打开文件的 C 语言 Cat 程序

动态库中定义的小函数可以内联吗?

Java获取可用内存

c - 出于性能原因将代码推送到内核或用户空间?

linux-kernel - 分配大的 DMA 缓冲区

c - C 中包含条件字段的结构

linux - 如何从 Linux 进程中保留特定范围的虚拟内存

linux - linux内核中指令{interrupt do_IRQ}是什么意思?

linux - 在 bash 中从 google 页面提取链接