上下文及内核同步

1:上下文:context 处于某种状态下所使用的资源集合。比如说进程又可以称为进程上下文,中断处理称为中断上下文,中断处理可以分为两个部分,又可以认为是两个不同的上下文。

在不同的上下文中,可能处理相同的数据。能够被不同上下文访问的数据称为临界资源。

现在内核中的ip转发是在软中断中进行的。

ip转发需要查找Fib表项;而Fib表项的添加删除、维护是在进程上下文进行,所以fib可以称为临界资源。

因为linux内核支持可抢占,且能够支持多核系统。就是说会出现多个上下文中“同时”访问临界资源的情况。而且访问涉及读操作和写操作。所以访问临界资源的时候需要保护,也就是内核同步。还以Fib为例,cpu0上在进行ip转发处理,在软中断上下文对Fib表项进行遍历访问,同时cpu1上Fib维护进程将节点删除,cpu0上的ip转发继续处理是,则可能出现访问已释放内存的问题。

2:如何保护临界资源

要保护临界资源,首先需要考虑临界资源有可能会在那几个上下文中被访问,这是模块设计首先要考虑的问题。

只有明确了临界资源可能所处的上下文,才能进行针对性的保护。linux内核主要涉及下面几种上下文:

1:进程上下文

2:中断上下文

3:中断下半部分

对于多核SMP来说,又涉及到不同核之间的临界资源的保护。A和B进程分别在CPU0和CPU1上运行,同时访问同一个数据,也需要进行

同步保护。

常见的同步方法:

1:关闭内核抢占。

单核系统如何保护不同进程上下文可以访问的临界资源。

1:限制内核抢占。

在线程描述符thread_info结构中,有一个标识是否可以被抢占的标志位:preempt_count 如果此标志位为0,则表示是可以抢占的,如果大于0,则表示不能被抢占。

 

转载于:https://www.cnblogs.com/starksqi/p/8857299.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值