【解答】arm架构的linux内核,软件线程切换的时候,TLB作废吗,cache作废吗?

37 篇文章 2 订阅

首先明确:linux下,线程即进程

这种纠结的问题,必须读内核源码才能找到答案,ok,let's go!

armv8 内核中上下文切换代码:
1、linaro-aarch64/kernel/sched/core.c line 1852 context_switch==>该函数调用两个主要函数: switch_mm(),switch_to()如下所示

2、 arch/arm64/include/asm/mmu_context.h line 134 switch_mm()==>
/* check for possible thread migration */
if (!cpumask_empty(mm_cpumask(next)) &&
!cpumask_test_cpu(cpu, mm_cpumask(next)))
__flush_icache_all();
line 63 check_and_switch_context ()==》
arch/arm64/mm/proc.s cpu_do_switch_mm 没有对tlb进行操作,但是有icache的flush操作
3、 include/asm-generic/switch_to.h line 25 switch_to ==> arch/arm64/kernel/process.c line 297 (__switch_to) ==>
arch/arm64/kernel/entry.s line 538 cpu_switch_to() : 没有tlb flush操作

综上所述,没有发现上下文切换时,对tlb进行flush操作,但是在swtich_mm中,有flush icache的操作,其前提条件是cpu的mask不为空且cpu中的cpumask位不为0。

这里又涉及到cpumask,其作用如下:
 * Cpumasks provide a bitmap suitable for representing the
 * set of CPU's in a system, one bit position per CPU number.  In general,
 * only nr_cpu_ids (<= NR_CPUS) bits are valid.

cpumask代表一个cpu中核的位图,一个bit对应一个cpu,当然所有cpumask位数要小于等于总的cpu数才有效。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值