软件与Cache

news/2024/6/29 16:31:37 标签: cache, 存储, linux, 语言, 化工, 编程

Cache是提高CPU性能的一种技术手段,通过Cache存储器把程序频繁用到的指令和数据存储起来,等再次访问该指令或数据时CPU可以直接从Cache中读取而不用访问主存从而能提高程序运行的效率。

 

Cache背后的理论基础是程序运行的“局部性”原理, “程序局部性原理”包括

时间局部性   和 空间局部性。

时间局部性的主要表现为刚被访问过的指令或数据很可能在最近的将来再次被访问,编程语言的循环结构是时间局部性产生的主要原因。

空间局部性描述的是:若一个存储单元被访问则其相邻的存储单元也被访问,软件程序的顺序执行及语言中的数组结构是空间局部性产生的主要原因。

 

在硬件设计方面cache的实现大体上分为两种:

虚拟cache和物理cache

存储虚拟地址的cache叫虚拟cache,这种cache存储编译程序时产生的虚拟地址对应的存储器单元内容,其优点是匹配速度快,因为在CPU MMU地址转换前即可对cache进行访问,其缺点为因为不同虚拟地址可对应相同的物理地址而导致的cache别名问题。

物理cache存储经由MMU转换后的物理地址对应的存储器单元内容。

 

cache的具体实现方法包括:

直接映射cache,组相连cache和全映射cache,其中直接映射cache的实现最简单,全映射cache的实现最难,而组相连cache的实现居于以上两者之间。

 

从软件的角度来说编写应用程序的程序员是看不见cache的,只有编写操作系统等系统软件的程序员才能看见cache。以linux OS为例,在linux引导启动时必须对cache进行初始化工作,包括对指令/数据cache的各行进行invalidate操作。

不同体系结构的cache实现方法的不同导致操作系统对其cache的失效操作也不尽相同,如对I386体系结构来说体系结构在其内部实现了cache失效操作所以linux就无需进行重复的cache失效操作,但对MIPS等RISC体系结构linux引导启动代码必须实现cache初始化操作。 

 

另一方面在linux中访问外围设备时必须屏蔽cache,一般情况下体系结构提供特殊指令访问I/O设备寄存器及内存,而这些指令实现了屏蔽cache的操作。

 

系统软件能够感觉到cache的另一点是对设备进行DMA操作时。无论是对设备进行DMA写还是从设备DMA读取,都必须在启动DMA操作之前进行cache失效操作。

http://www.eefocus.com/neubhs/blog/08-02/143389_de387.html


http://www.niftyadmin.cn/n/1535000.html

相关文章

12-Linux mmc system

Linux mmc system MMC、SD、SDIO的技术本质是一样的(使用相同的总线规范,等等),都是从MMC规范演化而 来;MMC强调的是多媒体存储(MM,MultiMedia),SD强调的是安全和数据保护(S,Secure)…

Eclipse启动tomcat后404错误

题描述 在eclipse部署web项目后,发现tomcat可以启动,但是访问http://localhost:8080地址报404错误。而不使用eclipse启动tomcat,直接通过通过tomcat安装目录下的bin目录启动tomcat则一切正常。 解决方案: 在eclipse的server页面下&#xff0c…

cache调度算法

在虚拟存储器中,当发生页面失效时,需要从磁盘存储器中调入一页(或一段)到主存储器中。在段式和段页式虚拟存储器中,由于多用户虚页数比主存储器的实 页数要多得多。在段式虚拟存储器中,虚存空间中能容纳的程…

15、shell编程—定义有类型变量

文章目录1.declare typeset2.命令参数表3.实例1.declare typeset declare 和 typeset 命令是等价的 2.命令参数表 参数含义-r将参数设置为只读变量-i将参数设置为整数-a将参数设置为数组-x将变量声明为环境变量 3.实例 declare -i num num"haha" echo $num num50…

13-Linux-gpio-system

对于gpio的应用其实会在很多地方,最常用的就是led和key,我们也可以使用类似单片机的写法,去直接读写寄存器来控制,没有文件的体现,但这样总感觉不够Linux,所以我们还是要使用linux已有的一些设备节点来实现…

16、shell编程—实战:计算输入正整数的和

#!/usr/bin/env bashwhile true doread -p "请输入对应的数字:" num# 第一步判断是否是整数sum0expr $num 1 &> /dev/null# echo "获取的结果为:$?"if [ $? -eq 0 ]; thenif [ expr $num \> 0 -eq 1 ]; thenfor (( VAR 0; VAR &l…

mysql分页查询-limit

分页查询的sql: select * from table limit 4,10; 4表示查询的索引,索引是从0开始,4表示从第五条数据开始查询,10表示要查询多少条数据,10表示查询十条数据 如果从0开始也可以这么写: select * from table …

cache和write buffer读写算法

Cache是一种容量小、速度快的存储器阵列,它位于主存和处理器内核之间,保存着最近一段时间处理器涉及到的主存块内容,主要是为了缓解慢速存储器和处理器之间的速度不匹配造成的访问瓶颈问题。write buffer经常和Cache配合使用。用来缓解处理器…