Cache As Ram
1. Why need Cache?
Cache又称之为高速缓存,是为了弥补CPU和主存之间逐渐增大的速度上的差距 而被迫在两者之间加入的一个小的SRAM。现代处理器上通常都会有三级或者是四级缓存,这部分高速缓存通常被集成在CPU上,这些高速缓存也就是通常所讲的L1 L2 L3…。Cache的工作原理主要是基于两个原因:a).现代计算机存储体系的山状结构,在山尖的是最快的存储设备当然它的价格也最贵(如Cache),山底的就是容量最大 最慢的存储设备(如硬盘)。b).计算机对数据的访问有一个局部性的原理,这次被引用过的数据可能过一会还会被频繁的用到,而且该数据附近位置的数据也很可能会被用到。基于以上两个原因Cache的机制就被加入到了CPU中来。
2. MTRR
提到Cache就不能不讲MTRR,MTRR全称是Memory Type Range Registers,基本上Cache相关的设定就通过设置MTRR才可以达到。MTRR分Fixed Range MTRR & Variable Range MTRR两种类型的Register 分别用于设置固定范围的内存属性和可变范围的内存属性。关于内存属性部分一共又有UC WC WT WP WB这些类型,关于MTRR的详细的介绍请参考Intel的三部曲 :)。我们可以通过设置MTRR中的内存地址区间的属性告知CPU如何去存取这段空间,当然在此之前我们先要设置CR0.CD bit去Enable Cache然后才可以去设置它。
3. Cache for Stack & Code
Intel现在的处理器基本上都支持在Memory初始化之前将CPU的Cache配置为可以VR/W stack(当然可以配置的内存地址以及范围也都是有一些限制的),这也就是所谓的Cache As Ram。code stack和data stack必需在 4GB-64MB ~ 4GB的范围内,data stack必需至少举例code region 4KB,而且region的大小受限于MLC以及LLC。当然code region至少要将Intel MRC存在的位置包含在内。经由CPU提供的这个机制可以达成以下的目标:1.加快SBIOS的启动速度,post time的改善 那可是十分的明显的谁用谁知道:)。2.因为很早就有stack了(SEC),所以就能够使用高级语言像C去写code了,这样source code就会比较容易写,而且也可以设计的很优雅并且易于理解了。废话到此为止了,坚持无图无真相的基本原则,上一个基本的流程图作为结尾吧:)。
Cache As Ram的更多相关文章
- 程序与CPU,内核,寄存器,缓存,RAM,ROM、总线、Cache line缓存行的作用和他们之间的联系?
目录 缓存 什么是缓存 L1.L2.L3 为什么要设置那么多缓存.缓存在cup内还是cup外 MESI协议----主流的处理缓存和主存数据不一样问题 Cache line是什么已经 对编程中数组的影响 ...
- CPU Cache与缓存行
编译环境:windows10+Idea+x86 CPU. 1.CPU Cache CPU 访问内存时,首先查询 cache 是否已缓存该数据.如果有,则返回数据,无需访问内存:如果不存在,则需把数据从 ...
- 深入理解Cache工作原理
内容来源:https://zhuanlan.zhihu.com/p/435031232 内容来源:https://zhuanlan.zhihu.com/p/102293437 本文主要内容如下,基本涉 ...
- Cache一致性与DMA
cache一致性与DMA 第一个问题 对于进行DMA操作的设备, 并不是所有系统都保持它们的cache一致性.在这种情况下, 准备进行DMA的设备可能从RAM得到陈旧的数据, 因为脏的cache行可能 ...
- cloudera learning4:Hadoop集群规划
涉及到一些关于硬件的东西,我也不是很懂,记录下来有待以后学习. Hadoop集群一般都是由小到大,刚开始可能只有4到6个节点,随着存储数据的增加,计算量的增大,内存需求的增加,集群慢慢变大. 比如按照 ...
- sphinx的配置
## Sphinx configuration file sample## WARNING! While this sample file mentions all available options ...
- Hadoop学习笔记(老版本,YARN之前),MapReduce任务Namenode DataNode Jobtracker Tasktracker之间的关系
一.基本概念 在MapReduce中,一个准备提交执行的应用程序称为“作业(job)”,而从一个作业划分出的运行于各个计算节点的工作单元称为“任务(task)”.此外,Hadoop提供的分布式文件系统 ...
- sphinx配置文件sphinx.conf参数详细说明
sphinx配置文件sphinx.conf参数详细说明 sphinx.conf各个参数详细说明 # # Sphinx configuration file sample # # WARNING! Wh ...
- PostgreSQL Hardware Performance Tuning
Bruce Momjian POSTGRESQL is an object-relational database developed on the Internet by a group of de ...
随机推荐
- 初学java2 认识面向对象 以及运算符 输入输出
面向对象 面向对象是一种程序设计思路,在设计一个程序时不需要考虑内部如何实现,只需要想他要实现什么功能 就像在餐馆点菜一样,你不需要知道他应该怎么做,你只需要决定你要吃什么 面向对象三大特征 继承 封 ...
- GoBelieve service部署问题整理
- JS-闭包练习
首先,第一个输出,因为前置运算,i要先参与输出,然后再自增,所以输出为0 第二个输出,因为f1和f2是不同的函数,不共享i变量,所以输出也为0 第三个输出,因为是f1,共享i,所以i加了1,输出为1 ...
- Notepad++快捷键及使用技巧
常用快捷键: CTRL+Q 注释/取消注释 用Notepad++写代码,要是有一些重复的代码想copy一下,还真不容易,又得动用鼠标,巨烦人....有木有简单的方法呢,确实还是有的不过也不算太好用.主 ...
- Java在常见的spring面试问题TOP50
1. 一般问题 1.1. 不同版本的 Spring Framework 有哪些主要功能? Version Feature Spring 2.5 发布于 2007 年.这是第一个支持注解的版本. Spr ...
- 【Git】三、版本回退&撤消修改&文件删除
提要 //查看git操作日志 $ git log //单行格式查看操作日志 $ git log --pretty=oneline //还原操作到上一次版本,有几个^就上几次 $ git reset - ...
- Linux系统上对其他用户隐藏进程的简单方法
mount -o remount,rw,hidepid=2 /proc 我使用的是多用户系统,大部分的用户通过ssh客户端访问他们的资源.我如何(怎么样)避免泄露进程信息给他们?如何(怎么样)在Deb ...
- DataSnap初步二
转:https://blog.csdn.net/a00553344/article/details/51670486 1. 一个典型的DataSnap服务器至少需要三个控件: TDSServer: D ...
- PAT Basic 1082 射击比赛 (20 分)
本题目给出的射击比赛的规则非常简单,谁打的弹洞距离靶心最近,谁就是冠军:谁差得最远,谁就是菜鸟.本题给出一系列弹洞的平面坐标(x,y),请你编写程序找出冠军和菜鸟.我们假设靶心在原点(0,0). 输入 ...
- Python项目列表
70个Python项目列表: 1.[Python 图片转字符画]2.[200行Python代码实现2048]3.[Python3 实现火车票查询工具]4.[高德API+Python解决租房问题 ]5. ...