计算机存储系统学习心得

分层组织

计算机存储系统由高层到低层分别名之寄存器堆、高速缓存(cache)、主存(main memory)和外存(secondary memory)。那么为什么记忆系统要层次化呢?如果答案是效率,那么提效的原理又是什么呢?如果原理是传说中的局部性原理(principle of locality),那么它又是如何实现的呢?对系统开发人员与应用开发人员有什么影响呢(明显的是记忆系统分层是对应用开发人员透明的,他们感觉不到分层的存在)?

高速缓存

高速缓存作为一块从内存到CPU的缓冲区,用来保存在内存中被频繁使用的数据块。存储系统层次化的一个目标就是提高CPU访问数据的时间,让这个时间尽量逼近高速缓存的速度。这个目标完成的效果取决于三个因素:第一,程序本身的行为特质;第二,高速缓存的容量和组织方式;第三,缓存数据替换的策略(cache replacement policy)。处理器的一个数据引用在高速缓存找到称为“缓存命中(cache hits)”,否则叫“缓存不命中(cache misses)”。发生不命中时,(系统得先将)不命中的数据从内存取出,这个动作会将包含不命中数据的整块数据载入高速缓存(KEMIN:怎么个整块法?配置好的?)。

高速缓存的组织方式决定了CPU搜索缓存的方式。高速缓存可以组织成三种方式:直接映射(direct mapped)、全相联映射(fully associative)和组相联映射(set associative)。直接映射方式无须替换算法,而后两都需要一些策略(FIFO, LRU或其它策略)来决定如何替换不命中的数据块。

虚拟内存

计算机存储系统层次化的另一个目的是利用大容量的外存来扩充主存,这就是所谓的虚拟内存机制。虚拟内存可以让我们把程序运行在一个比较实际内存大的虚拟地址空间内。虚拟内存另一项功能就是实现多道技术,让多个进程共享内存资源。虚拟内存机制的代价是需要额外的空间保存管理信息(像地址映射程序、页表等)、对虚拟地址转换所耗费的时间和发生缺页时的处理时间。

虚存与主存的关系与主存与缓存的关系很相似。由于种相似性,高速缓存与地址转换后备缓冲器TLB( Translation Lookaside Buffer)常常让人很迷惑。实际上,TLB也是高速缓存,一种有特定用途的高速缓存区。我们必须清楚,虚拟地址必须先被转为物理地址才能访问主存的,这也就是TLB的功能所在。虽然同样作为一种缓冲区,高速缓存与(分过页的)主存的功能目标不太一致,高速缓存偏向提高访问速度,而分过页的主存(也就是虚存)更多是扩充主存。

思想

计算机存储系统层次化的设计思想是以存储器访问的所谓“局部性”为基础的,包括时间局部性和空间局部性。

P.S.这个以局部性为基础的基础字眼使用我意识到,是局部性的客观存在决定了存储器的层次化设计,不是反之。换句话说,局部性是事物存在的普遍法则,而存储器层次化只是一个特例。

P.S.这局部性思想又让我想起了其它的思想的客观存在性,比如实现并发机制是中断思想……

计算机存储系统层次结构的中心思想是,是对每个K,位于K层的更快更小的存储设备作为位于K+1层的更大更慢的存储设备的缓存。换句话说,层次结构中的每一层都缓存来自较低一层的数据对象。

管理

对计算机存储系统层次结构中的每一层,必须有某种形式的逻辑照管(manage)缓存(的功能实现)。这个逻辑包括如何划分缓存为块、如何访问缓存、如何判断缓存是否命中,如何用新的数据块替换旧的数据块。这个逻辑可以由硬件、软件或两者的一种结合来实现。比如,寄存器堆(register file)是位层次结构中的最高层,它比较特殊,是由编译器来“管理”,管理方式如分配寄存器给某变量。这个“管理”逻辑是软件;

再如CPU的一级(L1)及二级(L2)高速缓存是完全靠内置的硬件来“管理”的。这个管理逻辑是硬件;在实现了虚拟内存的系统里,内存作为外存的缓存,这个虚拟的“缓存”是由操作系统软件和CPU的地址转换硬件(如MMU)共同“管理”的。

还有一个例子,在具有分布式文件系统(比如AFS)的机器里,外存作为整个分布式网络数据库的“缓存”,由本机的AFS客户端进行“管理”。

在作为一个数据的使用者,比如应用开发人员,是不需关心缓存的实现的,缓存机制对他们来是自动的,透明的;但是对计算机存储系统的管理者,比如操作系统开发人员则必须了解这些“管理”功能的实现原理。

KEMIN:作为一个系统开发人员,接触硬件开发可能性比较小,所以对CPU高速缓存有基本的了解就行了;但计算机存储系统开发人员很可能参与像编译优化、操作系统移植等工作,所以对这两个“管理”功能实现必须要掌握。
转自:http://storage.cnw.com.cn/storage-case/htm2013/20130331_266755.shtml

时间: 2024-11-09 12:37:31

计算机存储系统学习心得的相关文章

计算机操作系统--学习心得

第一周: 第一章 计算机操作系统概述 1.1 计算机系统概览 1.2 计算机硬件系统 1.3 计算机软件系统 1.4 计算机操作技术的发展 1.5 计算机操作系统 1.6 资源管理的角度 1.7 程序控制的角度 第二周: 第一章 计算机操作系统概述 1.8 操作系统控制计算机的角度 1.9 人机交互的角度 1.10 程序接口的角度 1.11 系统结构的角度 第二章 处理器管理 2.1 处理器与寄存器 2.2 指令与处理器模式 2.3 中断 2.4 中断源 第三周: 第二章 处理器管理 2.5 中

计算机学习心得

计算机学习心得体会 心得一:计算机学习心得体会 21世纪是一个信息经济时代,为适应时代的发展,作为一名当代大学生,所受的社会压力将比任何时候的大学生都要来得沉重,因此在校期间,我们必须尽可能的利用好学习时间,尽可能地学习更多的知识和能力,学会创新求变,以适应社会的需要. 毕竟,不管将来是要从事什么样的相关行业,都需要掌握较为全面的计算机知识,因为小到计算机的组装维修,大到服务器的维护与测试,知道的更多更全面,那么对于自己以后找工作以及参加工作帮助就越大.在知识经济时代,没有一个用人单位会傻到和知

Linux系统理解以及Linux系统学习心得

原创作品转载请注明出处  <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 作者:严哲璟 说一下我对Linux系统的理解 1.加载Linux内核准备:在加载基本输入输出模块(BIOS)之后,从磁盘的引导扇区读入操作系统的代码文件块到内存中,之后开始整个系统的初始化. 2.main.c的start_kernel函数是整个操作系统的入口,这也与Linux是基于C语言的特性相符,start_kernel具体做的动作很多

在马哥linux运维学院学习心得

题目:在马哥linux运维学院学习心得 姓名:谭龙 班级:M18 学号:26 时间:2016-02-29--2016-06-02(正常毕业时间预计在7月中上旬)   正文: 个人基本情况: 我是一名在校的即将毕业的大四学生,毕业时间为2016.7.专业为矿物加工工程专业,纯正的四川-广安人(邓小平故居就在那).因找不到工作,加上自己也不知道干什么,在堂弟的推荐下,来参加了马哥linux运维学院的学习:怀揣着一颗对计算机懵懂的心,开始涉足从未接触过了linux. 个人收获与心理变化: 在一开始接触

小小六的前端学习心得

打算写这篇文章已经好久了,但是文采不行,不知道如何下笔,今天终于鼓起勇气用我拙劣的作文水平来讲述一下这段时间我学习前端开发的心得. 先从我的专业说起.我本人是学计算机的.全名是叫计算机科学与技术(软件方向),学校虽然是一个211学校,学习成绩也还行,但是对于编程这一块,真的是很弱很弱.所以我对计算机编程真正的学习是从实习这段时间开始的.说到这里,我必须得感谢带我进入前端的学长.因为他我才能在今天坐在这里写这篇学习心得. 所以,首先最好是有一个愿意耐心的指导你学习的人,也就是一个好的师傅.他能根据

windows类书的学习心得(转载)

原文网址:http://www.blogjava.net/sound/archive/2008/08/21/40499.html 现在的计算机图书发展的可真快,很久没去书店,昨日去了一下,真是感叹万千,很多陌生的出版社,很多陌生的作者,很多陌生的译者,书名也是越来越夸张,什么××天精通××,精通××编程, ××宝典等等,书的印刷质量真的很好,纸张的质量也是今非昔比啊,但书的内容好象却是越来越让人失望,也许是我老了,我的思想我的观念已脱离现实社会,也许是外面的世界变化得太快,我编程数月,出去一走,

我的C++学习心得

记得大一刚接触C++的时候,老师上课的时候根本听不懂就如同在听天书,当时自己还在抱怨怎么会有这么难得语言啊,上课听不懂下课回去又不看书,到了期中考试的时候,刚拿到试卷的时候目瞪口呆,根本无从下笔.最后只能无奈的写了几题选择题. 之后自己就开始下功夫学习这门语言,我是先从写一个简单的C++程序开始,第一步就是编译预处理#include<iostream>  using namespace std;第二步就是main函数,第三步就是输入,第四步算法,第五步输出.其实最主要的就是算法这一步,只要你把

我的MYSQL学习心得(十五)

我的MYSQL学习心得(十五) 我的MYSQL学习心得(一) 我的MYSQL学习心得(二) 我的MYSQL学习心得(三) 我的MYSQL学习心得(四) 我的MYSQL学习心得(五) 我的MYSQL学习心得(六) 我的MYSQL学习心得(七) 我的MYSQL学习心得(八) 我的MYSQL学习心得(九) 我的MYSQL学习心得(十) 我的MYSQL学习心得(十一) 我的MYSQL学习心得(十二) 我的MYSQL学习心得(十三) 我的MYSQL学习心得(十四) 这一篇<我的MYSQL学习心得(十五)>

ACM 学习心得

ACM 学习心得 STL:完美的艺术品 STL 由四大部分组成:算法.容器.迭代器.仿函数. 算法(algorithm) 算法定义了一组与实现无关的操作,也是 ACM 学习的核心.C++ 算法库的内容全都是一些比较基本的算法,包括移动.转换.遍历.删除.过滤等等.C++ 算法库本身是基于抽象的,在迭代器的抽象下,使得这些算法可以在不同结构的容器中重用.一个比较坑的地方就是我高中的时候学完 C++ 之后报名了 NOIP.那一年刚刚允许用 STL(之前一直不准用),然后我对于标准库的依赖很严重,连快