Linux系统 preempt_count定义的各种上下文

本文探讨了Linux系统中产生并发访问的四种主要来源:中断异常、软中断/Tasklet、内核抢占和多处理器并发执行。在单核和多核系统中,这些并发源导致不同的并发行为,例如中断处理程序可能打断进程或软中断的执行。为了解决并发带来的资源和数据保护问题,内核使用preempt_count计数器在特定点禁用抢占,如开启抢占、启用软中断、释放自旋锁和中断处理程序返回时。在内核模式下,如果发现可抢占进程,preempt_schedule_irq将执行抢占调度。
摘要由CSDN通过智能技术生成

在内核中产生并发访问的并发源主要有如下四种:

1.中断和异常,中断发生后,中断处理程序和被中断的进程之间可能产生并发访问。

2.软中断和tasklet,软中断和tasklet随时可能会被调度,执行,从而打断当前正在执行的进程上下文。

3.内核抢占,调度器支持可抢占特性,会导致进行和进程之间的并发访问。

4.多处理器并发执行,多处理器可以同事执行多个进程。

上述情况需要针对单核和多核系统区别对待,对于单处理器系统,主要有如下的并发源:

1.中断处理程序可以打断软中断和TASKLET的执行。

2.软中断和TASKLET之间不会并发执行,但可以打断进程上下文执行。

3.在支持抢占的内核上,进程上下文之间会产生并发。

4.在不支持抢占的内核中,进程上下文之间不会产生并发。

对于SMP系统,情况会更复杂:

1.同一类型的中断处理程序不会并发执行,但是不同类型的中断可能送达不同的CPU,因此不同类型的中断处理程序可能会并发执行。

2.同一类型的软中断会在不同的CPU上并发执行。

3.同一类型的TASKLET是串行执行的,不会在多个CPU上并发执行。

4.不同CPU上的进程上下文会并发执行。

并发要解决的问题是保护资源和数据,而不是保护代码,关于数据需要做如下思考:

1.除了从当前内核代码路径外,似乎否还可以从其他内核代码路径会访问这些数据,如从中断处理程序,工作线程处理程序,TASKLET处理程序,软中断等等。

2.如从当前内核带啊路径访问数据时发生抢占,被调度,执行的进程会不会访问该数据?

3.进程会不

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

papaofdoudou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值