一. 为什么要缓存同步

同一进程可以同时在多个内核上执行(如果是多线程的),并且可以在进程之间共享内存,因此无论上下文切换发生什么,缓存同步都是不可避免的。

二. 处理器如何查找缓存

当处理器在高速缓存中查找内存位置时,如果存在MMU,则它可以使用该位置的物理或虚拟地址(有时甚至使用两者的组合,但这在这里并不重要)。

三. 上下文切换与使用物理地址查找的缓存

使用物理地址,无论哪个进程访问该地址都可以共享内容。因此,无需在上下文切换期间使缓存内容无效。如果两个进程映射具有不同属性的同一物理页面,则由MMU(充当MPU(内存保护单元))处理。物理寻址缓存的缺点是MMU必须位于处理器和缓存之间,因此缓存查找速度很慢。L1缓存几乎从不物理寻址;更高级别的缓存可能是。

四. 上下文切换与使用虚拟地址查找的缓存

相同的虚拟地址可以表示不同进程中的不同内存位置。因此,对于虚拟寻址的缓存,处理器和操作系统必须配合以确保进程将找到正确的内存。有几种常用技术。操作系统提供的上下文切换代码可能会使整个缓存无效。这是正确的,但代价很高。某些CPU体系结构在其高速缓存行中有空间供ASID(地址空间标识符)使用,该ID是进程ID的硬件版本,也由MMU使用。这样可以有效地将缓存项与不同进程分开,这意味着映射同一页面的两个进程将具有同一物理页面的不一致视图(通常会有一个特殊的ASID值指示共享页面),但是如果未在映射它们的所有进程中将它们映射到相同的地址,则需要刷新它们。如果操作系统注意不同的进程使用不重叠的地址空间(这违反了使用虚拟内存的某些目的,但有时可以做到),则缓存行将保持有效。

五.处理器如何查找TLB

大多数具有MMU的处理器也具有TLB。TLB是从虚拟地址到物理地址的映射的缓存。在物理寻址的缓存中查找之前,请先咨询TLB,以便在可能的情况下快速确定物理地址。处理器可以在TLB查找完成之前开始高速缓存查找——因为通常可以从地址的中间位(确定高速缓存行中的偏移量的位与确定页的位之间)识别候选高速缓存行。

如果发生高速缓存命中,则虚拟寻址的高速缓存会绕过TLB,尽管在未命中的情况下,处理器可能会在查询高速缓存时启动TLB查找。

六.上下文切换与TLB管理

必须在上下文切换期间管理TLB本身。如果TLB条目包含ASID,则它们可以保留在原位;如果操作系统的ASID的含义已更改(例如,因为进程已退出),则操作系统仅需要刷新TLB条目。

如果TLB条目是全局的,则在切换到其他上下文时必须使它们无效。

上下文切换与cache内容处理相关推荐

  1. TLB和cache的关系

    一)TLB 1)TLB的概述 TLB是一个内存管理单元用于改进虚拟地址到物理地址转换速度的缓存. TLB是位于内存中的页表的cache,如果没有TLB,则每次取数据都需要两次访问内存,即查页表获得物理 ...

  2. lighttpd 负载均衡-反向代理+cache浅谈

    Lighttpd有硬盘级别的cache-(mod_cache)和内存级别的cache(mod_mem_cache),内存级别的cache是国人的产品,我喜欢用lighttpd就是因为它具有2种选择的c ...

  3. Asp.net支持三种类型的cache[转]

    from:http://www.cnblogs.com/thomasnet/archive/2006/11/26/573104.html Asp.net支持三种类型的cache 想写一个技术快速概述, ...

  4. 同步手绘板——将View的内容映射成Bitmap转图片导出

    在Android中自有获取view中的cache内容,然后将内容转换成bitmap,方法名是:getDrawingCache(),返回结果为Bitmap,但是刚开始使用的时候,得到的结果都是null, ...

  5. 和linux关系_Linux内核Page Cache和Buffer Cache关系及演化历史

    在我们进行数据持久化,对文件内容进行落盘处理时,我们时常会使用fsync操作,该操作会将文件关联的脏页(dirty page)数据(实际文件内容及元数据信息)一同写回磁盘.这里提到的脏页(dirty ...

  6. 【Laravel Cache】 配置redis 存储缓存,通俗易懂,一次就掌握

    文章目录 1. 配置缓存 /config/cache.php 配置缓存驱动是什么?(即 CACHE_DRIVER="stores 中的key") 配置stores中具体的模块 配置 ...

  7. 怎样建设WEB Cache

    怎样建设WEB Cache 计算机网络技术的成熟和不断发展使之成功地应用在了许多领域当中.其中,Internet可以说是大家最为熟悉,同时也是最为成功的一个范例,因为它已经***到了人们工作.生活.学 ...

  8. linux刷新磁盘_Linux内核Page Cache和Buffer Cache关系及演化历史

    在我们进行数据持久化,对文件内容进行落盘处理时,我们时常会使用fsync操作,该操作会将文件关联的脏页(dirty page)数据(实际文件内容及元数据信息)一同写回磁盘.这里提到的脏页(dirty ...

  9. mysql query cache

    1.概述: MySQL Query Cache 缓存客户端提交给MySQL的SELECT(注意只是select)语句以及该语句的结果集. 注意:query_cache是mysql server端的查询 ...

最新文章

  1. IEEE Transaction ------laxTex模板,代码以及生成的PDF样式
  2. Meson:支持Netflix的机器学习工作流
  3. bzoj 1207: [HNOI2004]打鼹鼠
  4. 那些藏在你键盘里的emoji,背后到底有着怎样的故事?
  5. 滴滴为啥值3600亿?看它的数据中台就知道了
  6. linux中的memory management和page mapping
  7. mysql降级_mysql8降级到mysql5的方法介绍
  8. C++程序的单元测试
  9. 闭式系统蒸汽管径推荐速度_暖通丨空调水系统的设计
  10. Django中views笔记
  11. swift语言 数组定义_如何在Swift中声明弱引用数组?
  12. [转载] Python: ord()函数
  13. 通过VNC远程连接ubuntu桌面(多种客户端连接方式)
  14. 简易编程入门Part1
  15. 用u盘装linux系统黑屏,u盘启动黑屏 u盘装系统启动不了黑屏咋办
  16. Allegro铜皮动静态切换操作指导
  17. adjacent_find
  18. 《历术甲子篇》冬至合朔表
  19. 基于大佬的代码实现看板娘效果(三段代码实现)
  20. 远程语音 开源_通过开源语音聊天简化远程会议

热门文章

  1. Hive学习之路(一)Hive初识
  2. UE4大数据可视化教程(2)——通过谷歌地图创建任意一片3D地形
  3. 基于Python3多进程(多线程)+多协程的数据并发处理模版
  4. 【Android Studio】修改C盘.gradle文件夹位置
  5. 为什么要进行数据库分区
  6. 1.STM32基本知识
  7. 万文多图之搜索引擎使用教程
  8. 全球一共有多少个搜索引擎?
  9. 云计算与大数据-虚拟化与容器技术题库
  10. 罩形件冲压模具设计及制造(论文+CAD图纸)