JavaShuo
栏目
标签
Linux第六次学习笔记
时间 2019-11-09
标签
linux
第六
学习
笔记
栏目
Linux
繁體版
原文
原文链接
存储器层次结构
存储器系统是一个具备不一样容量、成本和访问时间的存储设备的层次结构。
CPU寄存器保存着最经常使用的数据。
主存储器(简称主存)暂时存放存储在容量较大的、慢速磁盘上的数据。
高速缓存存储器做为一部分存储在主存中的数据和指令的缓冲区域。
访问周期由小到大:CPU<高速缓存<主存<磁盘
存储技术
随机访问存储器(RAM)
其分为两类:
静态RAM(SRAM)
做为高速缓存存储器
可在CPU芯片上,也能够在芯片下
动态RAM(DRAM)
做为主存以及图形系统的帧缓冲区
SRAM比DRAM更快并且贵。
静态RAM
其将每一个位存储在一个双稳态的存储器单元里。每一个单元是用一个六晶体管电路来实现的。
六晶体管电路的属性:它能够无限期地保持在两个不一样的电压配置或状态之一。其余任何状态都不稳定的。可经过p383的倒转的钟摆进行理解。
原则上钟摆能够在垂直的为止无限期地保持平衡,但这种状态是
亚稳态
,最细微的扰动均可以破坏它的平衡,并且一旦破坏就没法恢复到垂直的位置。
动态RAM
DRAM将每一个位存储为对一个电容的充电。该电容大小很是小,一般大约为30x10-15法拉。
DRAM对干扰很是敏感。当电容的电压被扰乱后,它就永远不会恢复了。
暴露在光线下会致使电容电压改变。
数码相机的传感器本质就是DRAM单元的阵列。
二者的对比
供电状态下,SRAM保持
不变
,而DRAM须要
刷新
。
存取速度方面,SRAM
>
DRAM
干扰敏感度方面,SRAM对诸如光和电噪声灯干扰
不敏感
晶体管使用量方面,SRAM单元比DRAM单元使用
更多的晶体管
,从而
密集度低
,
贵
,
功耗大
。
传统的DRAM
DRAM芯片中的单元(位)被分红d个超单元,每一个超单元都由w个DRAM单元组成。一个dxw的DRAM总共存储dw位信息。
超单元被组织成一个r行c列的长方形阵列,rc=d。每一个超单元有形如(i,j)的抵制,这里i表示行,j表示列。
选择行(RAS请求) 选择列(CAS请求) 经过行列的选择读取一个超单元内容。
二维阵列组织的
缺点
是必须分两步发送地址,这增长了访问时间。
存储器模块
DRAM芯片包装在存储器模块中,它是插到主板的扩展槽上的。
168个引脚的双列直插存储器模块,它以64位为块传送数据到存储器控制器和从存储器控制器传出数据
72个引脚的单列直插存储器模块,它以32位为块传送数据。
加强的DRAM
快页模式DRAM(FPM DRAM):容许对同一行连续地访问能够直接从行缓冲区获得服务。例如读第i行四个超单元,只需发送第一个RAS/CAS请求,后面跟着三个CAS请求便可。
扩展数据输出DRAM(EDO DRAM):容许单独的CAS信号在时间上靠得更紧密一点。
同步DRAM(SD DRAM):用于驱动存储器控制器相同的外部时钟信号的上升沿来替代许多这样的控制信号。
常规的、FPM和EDO DRAM与存储控制器通讯使用一组异步的控制信号。
双倍数据速率同步DRAM(DDR SDRAM):对SDRAM的一种加强,经过使用两个时钟沿做为控制信号,从而时DRAM的速度翻倍。
按照预取缓冲区的大小来划分:DDR(2位),DDR2(4位),DDR3(8位)
Rambus DRAM(RDRAM):它的最大带宽比DDR SDRAM更高。
视频RAM(VRAM):用在图形系统的帧缓冲区中。
与FPM的区别:
VRAM的输出是经过依次对内部缓冲区的整个内容进行移位获得的。
VRAM容许对存储器并行地读和写。
非易失性存储器
易失:若是断点,DRAM和SRAM会丢失它们的信息。
非易失性存储器:即便在关电后,仍然保存着它们的信息。
ROM(只读存储器):Read-Only Memory,其中有些类型是既能够读也能够写的。
按照可以被重编程(写)的次数和对它们进行冲编辑所用的机制区分:
PROM:只能被编程一次。
可擦写可编程ROM(EPROM):容许光到达存储器,数量级能够达到1000次。
电子可擦除PROM(EEPROM):能够直接在印制电路卡上棉城,数量级能够达到10^5次。
闪存(flash memory):基于EEPROM重要的存储计数,例如数码相机、手机灯都运用到它。
固态硬盘(SSD):基于闪存的磁盘驱动器,可以提供相对于传统旋转磁盘更快速、更强健和更低能耗的选择。
存储在ROM设备中的程序成为
固件
访问主存
数据经过成为
总线(bus)
的共享电子电路在处理器和DRAM主存之间来来回回。
总线是一组并行地导线,可以携带地址、数据和控制信号。
每次CPU和主存之间的数据传送经过总线事务来完成的。
读事务:从主存传送数据到CPU
写事务:从CPU传送数据到主存
磁盘存储
磁盘构造
磁盘驱动器(磁盘)是由一个或多个叠放在一块儿的盘片组成,被封装在一个密封的包装里。
每一个盘片都有两面或者成为
表面
,表面覆盖着磁性记录材料
每一个表面都由一组磁道的同心圆组成。
每一个磁道被划分为一组扇区,扇区之间用一些间隙分隔开。(间隙不存储数据位,而用来表示扇区的格式化位)
盘片中央由一个能够旋转的
主轴
,使得盘片以固定的旋转速率旋转。
磁盘制造商用柱面来描述多个盘片驱动器的构造。
旋转磁盘与固态磁盘是两种不一样的工做方式
磁盘容量
一个磁盘上能够记录的最大位数成为它的最大容量,简称容量。
由一下技术因素决定
记录密度
磁道密度
面密度
计算公式: 磁盘容量=(字节数/扇区)
(平均盘区数/磁道)
(磁道数/表面)
(表面数/盘片)
(盘片数/磁盘)
对于与DRAM和SRAM容量相关的计量单位:K=2^10 M=2^20 G=2^30 T=2^40
对于磁盘和I/O设备容量相关的伎俩单位:k=10^3 M=10^6 G=10^9 T=10^12(字节)
磁盘操做
磁盘用
读/写头
来读写存储在磁性表面的位
读写头链接到一个
传动臂
的一端来
寻道
对扇区的访问时间由三个主要部分:p392
寻道时间
旋转时间
传送时间
逻辑磁盘块
磁盘控制器:维护着逻辑块号和实际磁盘扇区之间的映射关系
当操做系统想要执行一个I/O操做时,操做系统会发送一个命令到磁盘控制器,让它读某个逻辑块号。控制器上的固件执行一个快速表查找,将一个逻辑块号翻译成一个(盘面,磁道,扇区)的三元组,该三元组
惟一
地表示了对应的物理扇区。
格式化容量比最大容量要小
链接到I/O设备
三个不一样类型的设备链接到总线
通用串行总线(USB)
图形卡或适配器
主机总线适配器
插入主板上空的扩展槽进行使用,例如网络适配器
访问磁盘
CPU使用存储器映射I/O技术来向I/O设备发出命令。
I/O端口:地址空间中有一块地址是为了与I/O设备通讯保留的。
读取一个磁盘扇区的步骤
CPU同故宫将命令、逻辑块号和目的存储器地址写到与磁盘相关联的存储器映射地址,发起一个磁盘读
磁盘控制器读扇区,并执行到主存的DMA传送
当DMA传送完成时,磁盘控制器用中断的方式通知CPU
固态硬盘
一个SSD包由一个或多个
闪存芯片
和
闪存翻译层
组成。
闪存芯片
对应传统旋转磁盘中的
机械驱动器
闪存翻译器
对应传统旋转磁盘中的
磁盘控制器
一个闪存由B个块的序列组成
一个块由P页组成
页的大小是512~4KB
块由32~128页组成,大小为16~512KB
数据是以页为单位读写的。
SSD的优势:
由半导体存储器构成,没有移动的部件
随机访问时间比旋转磁盘快,能耗更低,同时结实
SSD的缺点:
反复写以后,闪存块会磨损。
SSD每字节比旋转磁盘贵大约100倍,所以经常使用的存储容量是旋转磁盘的1%
局部性
计算机程序倾向于引用邻近于其余最近引用过的数据项的数据项,或者最近引用过的数据项自己。
该倾向成为局部性原理。
局部性的两种不一样形式:
时间局部性
空间局部性
步长为k的引用模式:每隔k个元素进行访问
步长为1的引用模式是程序中空间局部性常见和重要的来源。随着步长的增长,空间局部性降低。
重复引用同一个变量的程序有良好的时间局部性。
对于取指令来讲,循环有号的时间和空间局部性。循环体越小,循环迭代次数越多,局部性越好。
存储器层次结构p405
存储技术:不一样的存储技术的访问时间差别很大
计算机软件:一个编写良好的程序倾向于展现处良好的局部性
存储器层次结构:硬件和软件的基础属性互相补充的完美,令人想到一种组织存储器系统的方法。
存储器层次结构中的缓存
高速缓存(cash)是一个小而快速的存储设备,使用高速缓存的过程成为缓存
最小的缓存——CPU寄存器集合
数据老是以块大小为传送单元在第k层和第k+1层之间来回拷贝。
缓存命中:当程序须要第k+1层的某个数据对象d时,它首先在当前存储在第k层的一个块中查找d,若是d恰好缓存在第k层中的状况。
缓存不命中:第k层中没有缓存数据对象d的状况
强制性不命中或冷不命中:k层的缓存是空的——冷缓存
冲突不命中:限制性的放置策略引发的不命中
容量不命中:工做集的大小超过缓存的大小时。
替换或驱逐:替换一个现存的块的过程。
牺牲快:被驱逐的这块。
替换策略:控制决定该替换哪一个块的策略
利用时间的局部性:因为时间局部性,同一数据对象可能会被屡次使用。
利用空间的局部性:块一般包含有多个数据的对象。
高速缓存存储器
CPU寄存器文件和主存之间插入一个小的SRAM高速缓存存储器——L1高速缓存(一级缓存)
在L1高速缓存和主存之间插入一个更大的高速缓存——L2高速缓存
比L2更大的高速缓存——L3高速缓存
通用的高速缓存存储器结构
每一个寄存器地址有m位,造成M=2^m个不一样的抵制
高速缓存被组织成一个有S=2^s个高速缓存组的数组
每一个组包含E个高速缓存行
每一个行由一个B=2^b字节的数据块组成的
一个有效位指明这个行是否包含有意义的信息
t=m-(b+s)个标记位是当前块的存储器地址的位的子集
高速缓存的大小C:指的是全部块的大小的和,标记位和有效位不包含在内,C=S×E×B
直接映射高速缓存
E=1的高速缓存称为直接映射高速缓存。
高速缓存肯定一个请求是否命中,而后抽取出被请求的字的过程:
组选择
行匹配
字抽取
若是缓存不命中,须要从存储器层次结构中的下一层取出被请求的块。而后将新的块存储在组索引位指示的组中的一个高速缓存行中。
组相联高速缓存
每一个组都保存有多于一个的高速缓存行。
一个1<E<C/B的高速缓存一般称为E路组相联高速缓存。
它的组选择与直接映射高速缓存的组选择同样,组索引位标志组。
最不常使用(LFU)策略会替换在过去某个时间窗口内引用次数最少的那一行。
最近最少使用(LRU)策略会替换最后依次访问时间最久远那一行。
全相联高速缓存
由一个包含全部高速缓存行的组(E=C/B)组成的。
它只有一个组,地址中没有组索引位,地址只被划分红了一个标志和一个块偏移。
关于写的问题
如何更新w在层次结构中紧接着低一层中的拷贝:
直写:当即将w的高速缓存块写回到紧接着的低一层中。
写回:尽量地推迟存储器更新,只有当替换算法要驱逐更新过的块时,才把它写到紧接着的低一层中。
如何处理写不命中:
写分配:加载相应的低一层的块到高速缓存中,而后更新这个高速缓存块。写回高速缓存为写分配。
非写分配:避开高速缓存,直接把这个字写到低一层中。直写高速缓存为非写分配。
i-cache:只保存指令的高速缓存
d-cache:只保存程序数据的高速缓存
统一的高速缓存:保存指令和程序数据的高速缓存。
高速缓存参数的性能影响:
不命中率:不命中数量/引用数量
命中率:1-不命中率
命中时间:从高速缓存传送一个字到CPU所需的时间
不命中处罚:因为不命中所须要的额外的时间
较大的高速缓存可能会提升命中率,但使大存储器运行得更快老是要难一些。
较大的的块能利用程序中可能存在的空间局部性,帮助提升命中率。但会损害时间的局部性比空间局部性更好的程序中的命中率,而且传送时间会变长。
较高的相联度(E的值越大)可以下降高速缓存因为冲突不命中出现抖动的可能性。但也会产生形成较高的成本。
高速缓存越往下层,越可能使用写回而不是直写。
高速缓存行、组和块的区别p423
编写高速缓存友好的代码
让最多见的状况运行得快。
在每一个循环内部缓存不命中数量最小。
高速缓存对程序性能的影响
存储器山
读吞吐量(读带宽):一个程序从存储系统中读数据的速率
读带宽的时间和空间局部性的二维函数,称为存储器山
程序中利用局部性
将注意力集中在内循环上,大部分计算和存储器访问都发生在这里。
经过按照数据对象存储在存储器中的顺序、以步长为1的来读数据。从而使得程序中的空间局部性最大
一旦从存储器中读入一个数据对象,尽量地使用它,从而使得程序中的时间局部性最大。
遇到的问题
对于存储器山的概念不是很明白,各条山脊线所表示的内容,步长的变化引发读吞吐量的变化也并未搞清楚。
html
但愿经过再阅读相关内容来进行理解。
算法
参考文献
《Computer.Systems.A.Programmer's.Perspective.2nd.CN》教材
《内存山介绍和图解析》
http://www.2cto.com/os/201501/366825.html
相关文章
1.
Linux学习笔记第六周第三次课(3月14日)
2.
Linux学习笔记第六周第二次课(3月13日)
3.
Linux学习笔记第六周第一次课(3月12日)
4.
Linux学习笔记第六周第四次课(3月15日)
5.
Linux 学习笔记(六):Linux
6.
Linux学习 第六天笔记
7.
Linux学习笔记(第六章)
8.
Linux学习笔记第八周六次课(4月2日)
9.
Linux 第一次学习笔记
10.
第六周学习笔记
更多相关文章...
•
您已经学习了 XML Schema,下一步学习什么呢?
-
XML Schema 教程
•
我们已经学习了 SQL,下一步学习什么呢?
-
SQL 教程
•
Tomcat学习笔记(史上最全tomcat学习笔记)
•
适用于PHP初学者的学习线路和建议
相关标签/搜索
学习笔记——Linux
Linux学习笔记
学习笔记
Java学习笔记之六
Spring学习笔记六
学渣Linux笔记
Linux学习笔记10
第七周学习笔记
六次
Qt学习笔记
Linux
PHP教程
Thymeleaf 教程
MyBatis教程
学习路线
初学者
0
分享到微博
分享到微信
分享到QQ
每日一句
每一个你不满意的现在,都有一个你没有努力的曾经。
最新文章
1.
springboot在一个项目中启动多个核心启动类
2.
Spring Boot日志-3 ------>SLF4J与别的框架整合
3.
SpringMVC-Maven(一)
4.
idea全局设置
5.
将word选择题转换成Excel
6.
myeclipse工程中library 和 web-inf下lib的区别
7.
Java入门——第一个Hello Word
8.
在chrome安装vue devtools(以及安装过程中出现的错误)
9.
Jacob线上部署及多项目部署问题处理
10.
1.初识nginx
本站公众号
欢迎关注本站公众号,获取更多信息
相关文章
1.
Linux学习笔记第六周第三次课(3月14日)
2.
Linux学习笔记第六周第二次课(3月13日)
3.
Linux学习笔记第六周第一次课(3月12日)
4.
Linux学习笔记第六周第四次课(3月15日)
5.
Linux 学习笔记(六):Linux
6.
Linux学习 第六天笔记
7.
Linux学习笔记(第六章)
8.
Linux学习笔记第八周六次课(4月2日)
9.
Linux 第一次学习笔记
10.
第六周学习笔记
>>更多相关文章<<