Chapter 6: The Memory Hierarchy
Disk Geometry:
磁盘的结构如图,每个面为surface,surface上的同心圆为track,track包含sector,不同的surface的同半径track构成cylinder。越外围的的track应该包含越多的sectors,这样用于分割sectors的spare space不至于太多而浪费。
SSD:
传统的机械硬盘读写时需要旋转,而固态硬盘则不必如此故而得名。SSD是以flash memory为基础,由blocks组成,每个block又包含pages。一旦某个page的数据要更该,则需要erase整个block,所以寿命的限制是其缺点之一。
Locality:
我们的存储器分级是一个金字塔形,越上层的容量越小、速度越快。每一层作为下一层的cache(音同cash),如果我们需要下层的数据,需要一层层传上来。

Good locality是指我们多次访问相同或临近的地址,因为它们第一次被加载到高层的缓存中后就不用每一次再从下层加载,大大加快了速度。访问相同地址利用了temporal locality(时间的),访问临近地址利用了spatial locality(空间的)。
Cache memory:
我们所需要的内容如果在缓存中称作cache hit,反之称作cache miss。当cache为空时称作cold cache,我们开始进行数据的访问就相当于给它warm up(^o^)
Cache的结构如图

访问cache的地址分作三部分,最高位的t bits表示tag,中间的s bits表示set,最低位的b bits表示block。
访问时先匹配set,然后看数据所在行的valid bit是否为1,接着看tag是否匹配,如果以上三步都顺利就可以从相应block中取出数据啦。
启示:
我们写程序时要注意代码要locality friendly,比如说要选择
for (i=; i<3; i++)
for(j=; j<3; j++)
sum+=a[i][j];
最里层循环中的i和j顺序不能调换。sum作为局部变量会被加载到高层的缓存中,对它的多次访问利用了temporal locality;而对类似a[i][1]、a[i][2]地址相邻,满足spatial locality。
Memory Mountain:

这幅图咱们最熟悉了,就是书本封面嘛。
Size是指block的size,越小则读取越快。Stride-k可以理解为每k个元素,比如说访问stride-3,即访问a[0]、a[3]、a[6]……,k变大时并不利于spatial locality。
总的来说,size越小,stride越小,存储器的读取速度越快!
Chapter 6: The Memory Hierarchy的更多相关文章
- 谈谈计算机上的那些存储器-Memory Hierarchy
文章首发于浩瀚先森博客http://www.guohao1206.com/2016/12/07/1248.html 说到计算机上的存储器,很多人第一反应是硬盘,然后是内存. 其实在计算机上除了硬盘和内 ...
- OpenRisc-39-ORPSoC,or1200的memory hierarchy整体分析
引言 前面我们简单分析了ORPSoC的整体结构,or1200_top的整体结构,or1200_cpu的整体结构. 并对ORPSoC的启动过程,ORPSoC的debug子系统,clock子系统进行了介绍 ...
- 计算机科学基础知识(一)The Memory Hierarchy
一.前言 最近一个问题经常萦绕在我的脑海:一个学习电子工程的机械师如何称为优秀的程序员?(注:本文作者本科学习机械设计,研究生转到电子工程系学习,毕业后却选择了系统程序员这样的职业).经过思考,我认为 ...
- 《CS:APP》 chapter 9 Vitrual Memory 笔记
Vitrual Memory In order to manage memory more efficiently and with fewer errors, modern systems prov ...
- Java软件工程师技能图谱
原文链接:Java软件工程师技能图谱 最近在考虑"拥有怎样的技能才能算一名合格的java软件工程师呢?"这个问题.碰巧在github发现一个很棒的开源项目--程序员技能图谱.@Zh ...
- Linux内核同步机制之(三):memory barrier【转】
转自:http://www.wowotech.net/kernel_synchronization/memory-barrier.html 一.前言 我记得以前上学的时候大家经常说的一个词汇叫做所见即 ...
- CUDA ---- Memory Model
Memory kernel性能高低是不能单纯的从warp的执行上来解释的.比如之前博文涉及到的,将block的维度设置为warp大小的一半会导致load efficiency降低,这个问题无法用war ...
- Linux内核同步 - memory barrier
一.前言 我记得以前上学的时候大家经常说的一个词汇叫做所见即所得,有些编程工具是所见即所得的,给程序员带来极大的方便.对于一个c程序员,我们的编写的代码能所见即所得吗?我们看到的c程序的逻辑是否就是最 ...
- Optimizing TLB entries for mixed page size storage in contiguous memory
A system and method for accessing memory are provided. The system comprises a lookup buffer for stor ...
随机推荐
- winPcap编程之获取适配器信息(二)
首先要读一下这一页的东西:http://www.winpcap.org/docs/docs_412/html/group__wpcapsamps.html 可以结合中文版本看http://www.fe ...
- win7下安装Ubuntu后进不去win7的解决方法
win7下安装Ubuntu后进不去win7的解决方法 刚刚给同学在win7下安装了Ubuntu16.04,结果在安装完后竟然无法在电脑重启后,找到win7的进入选项. 在网上找了找,都不行!就差点重装 ...
- Java 线程基本知识
线程 线程和进程 进程 : 进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 线程 : 线程是进程中的一个执行单元(执行路径 ...
- CSS组件
下拉菜单 .dropdown:将下拉菜单触发器和下拉菜单包含在其中 .dropdown-menu:给<ul>制定下拉菜单的样式 .dropup:向上弹出菜单 .dropdown-menu- ...
- 浅谈前后端分离与实践 之 nodejs 中间层服务(二)
一.背景 书接上文,浅谈前后端分离与实践(一) 我们用mock服务器搭建起来了自己的前端数据模拟服务,前后端开发过程中只需定义好接口规范,便可以相互进行各自的开发任务.联调的时候,按照之前定义的开发规 ...
- Windows下MongoDB常用命令
以下命令中的启动与暂停服务命令需要使用管理员身份运行cmd.exe,其他命令需要先cd到Mongodb安装目录的bin目录. 1.启动服务:net start [Mongodb服务名].示例: net ...
- 跨站请求伪造(CSRF)-简述
跨站请求伪造(CSRF)-简述 跨站请求伪造(英语:Cross-site request forgery),也被称为 one-click attack 或者 session riding,通常缩写为 ...
- 最全的命令行(gradle)打包安卓apk
最近研究安卓方面的打包,因为是React Native,不能使用Android studio打包.找了半天资料,发现没有一个全面的.下面,我来讲解自己下打包时自己遇到的各种坑. 1.首先,需要在项目顶 ...
- iOS之 Category 属性 的理解
在 Objective-C 中可以通过 Category 给一个现有的类添加属性,但是却不能添加实例变量 反正读第一遍的时候我是有点晕的,可以添加“属性”,然后又说“添加实例变量”,第一感觉就好像 有 ...
- angular指令的4种设计模式
指令的功能集非常丰富,不过我们已经发现了指令的帕累托分布:使用angular编写的大量指令只会用到可用性和设计模式中很小的比例,这些指令大概可以分为4类: 只渲染指令--这些指令将渲染作用域中的数据, ...