【解答】arm架构的linux内核,软件线程切换的时候,TLB作废吗,cache作废吗?
来源:互联网 发布:ubuntu如何启动mysql 编辑:程序博客网 时间:2024/04/30 16:02
首先明确: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 134switch_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 25switch_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.
* 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数才有效。
- 【解答】arm架构的linux内核,软件线程切换的时候,TLB作废吗,cache作废吗?
- PHP中作废的函数,替换之~
- PHP 5.3常见作废函数的替换
- eclipse上httpclient作废的解决办法
- 提交订单的时候提示“该站点的安全证书已作废,节点证书已废弃”的解决办法
- Effective Java Item6-消除作废的对象引用
- ligerui中grid的多表头例子(作废)
- ligerui中toolbar添加split的做法(作废)
- 关于PHP5.3作废函数的处理方法
- 关于PHP5.3作废函数的处理方法
- 关于PHP5.3作废函数的处理方法
- 如何删除eclipse中作废的工作空间
- 【解答】arm架构的linux内核中,clrex指令的作用是什么,内核中什么时候才会用到?
- MMU、Cache、TLB 的作用
- MMU、Cache、TLB 的作用
- TLB和cache的关系
- TLB和cache的关系
- MMU、Cache、TLB 的作用
- Detours简介(转)
- Chrome浏览器快捷键
- EditText是否自动弹出输入法虚拟键盘(软键盘)的问题
- Struts2拦截器的使用 (详解)
- 【VC皮肤】SkinMagic的使用
- 【解答】arm架构的linux内核,软件线程切换的时候,TLB作废吗,cache作废吗?
- 设置光盘为yum源(转)
- Matlab 最大值滤波 中值滤波 最小值滤波 ordfilt2
- AS3库资源
- c面试爱考的
- iOS runtime
- c++强制类型转换:dynamic_cast、const_cast 、static_cast、reinterpret_cast
- 常用的正则表达式
- ORA-12514解决方案