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的更多相关文章

  1. 谈谈计算机上的那些存储器-Memory Hierarchy

    文章首发于浩瀚先森博客http://www.guohao1206.com/2016/12/07/1248.html 说到计算机上的存储器,很多人第一反应是硬盘,然后是内存. 其实在计算机上除了硬盘和内 ...

  2. OpenRisc-39-ORPSoC,or1200的memory hierarchy整体分析

    引言 前面我们简单分析了ORPSoC的整体结构,or1200_top的整体结构,or1200_cpu的整体结构. 并对ORPSoC的启动过程,ORPSoC的debug子系统,clock子系统进行了介绍 ...

  3. 计算机科学基础知识(一)The Memory Hierarchy

    一.前言 最近一个问题经常萦绕在我的脑海:一个学习电子工程的机械师如何称为优秀的程序员?(注:本文作者本科学习机械设计,研究生转到电子工程系学习,毕业后却选择了系统程序员这样的职业).经过思考,我认为 ...

  4. 《CS:APP》 chapter 9 Vitrual Memory 笔记

    Vitrual Memory In order to manage memory more efficiently and with fewer errors, modern systems prov ...

  5. Java软件工程师技能图谱

    原文链接:Java软件工程师技能图谱 最近在考虑"拥有怎样的技能才能算一名合格的java软件工程师呢?"这个问题.碰巧在github发现一个很棒的开源项目--程序员技能图谱.@Zh ...

  6. Linux内核同步机制之(三):memory barrier【转】

    转自:http://www.wowotech.net/kernel_synchronization/memory-barrier.html 一.前言 我记得以前上学的时候大家经常说的一个词汇叫做所见即 ...

  7. CUDA ---- Memory Model

    Memory kernel性能高低是不能单纯的从warp的执行上来解释的.比如之前博文涉及到的,将block的维度设置为warp大小的一半会导致load efficiency降低,这个问题无法用war ...

  8. Linux内核同步 - memory barrier

    一.前言 我记得以前上学的时候大家经常说的一个词汇叫做所见即所得,有些编程工具是所见即所得的,给程序员带来极大的方便.对于一个c程序员,我们的编写的代码能所见即所得吗?我们看到的c程序的逻辑是否就是最 ...

  9. 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 ...

随机推荐

  1. 运用 finereport 和 oracle 结合开发报表思路大总结

    近排自己学习了一款软件finereport开发报表模块,自己总结了如何了解需求,分析需求,再进行实践应用开发,最后进行测试数据的准确性,部署报表到项目对应的模块中显示. 一.需求(根据需求文档分析) ...

  2. mybatis 和hibernate的区别

    mybaits 是不完全的orm(对象关系映射(Object Relational Mapping)框架,需要自己书写sql语句 mybatis学习难度必hibernate低适合关系型模型要求不高的软 ...

  3. Swift 算法实战之路:栈和队列

    这期的内容有点剑走偏锋,我们来讨论一下栈和队列.Swift语言中没有内设的栈和队列,很多扩展库中使用Generic Type来实现栈或是队列.笔者觉得最实用的实现方法是使用数组,本期主要内容有: 栈和 ...

  4. UITextView实现限制100字

    placeHoderLable = [[UILabel alloc]initWithFrame:CGRectMake(3, 3, DeviceWidth-6, 40)]; //根据情况调节位置 pla ...

  5. win10 uwp 视差效果

    本文翻译:http://jamescroft.co.uk/blog/uwp/playing-with-scrolling-parallax-effects-on-ui-elements-in-wind ...

  6. 【转】嵌入式C语言调试开关

    在调试程序时,经常会用到assert和printf之类的函数,我最近做的这个工程里就有几百个assert,在你自认为程序已经没有bug的时候,就要除去这些调试代码,应为系统在正常运行时这些用于调试的信 ...

  7. Java 多线程的一些问题

    1.volatile关键字的作用 一个非常重要的问题,是每个学习.应用多线程的Java程序员都必须掌握的.理解volatile关键字的作用的前提是要理解Java内存模型,volatile关键字的作用主 ...

  8. Mysql Explain 参数解释

    查询计划使用以及使用说明 table:显示这一行数据是关于哪张表的. type:显示使用了何种类型,从最好到最差的连接类型为system.const.eq_ref.ref.fulltext.ref_o ...

  9. JavaScript 中的对象引用

    ECMAScirpt 变量有两种不同的数据类型:基本类型,引用类型.也有其他的叫法,比如原始类型和对象类型,拥有方法的类型和不能拥有方法的类型,还可以分为可变类型和不可变类型,其实这些叫法都是依据这两 ...

  10. hive中UDF、UDAF和UDTF使用

    Hive进行UDF开发十分简单,此处所说UDF为Temporary的function,所以需要hive版本在0.4.0以上才可以. 一.背景:Hive是基于Hadoop中的MapReduce,提供HQ ...