初读这本书,是2020年3,4月吧,以前学的大多数处理器,balabala的,虽然也有介绍储存器的,但总是不是很详细,主要还是关注cpu等计算部件或者总线等事物,就如同这本书中所写,人们往往可以很清楚的描述Intel处理器与AMD处理器的区别,但是对各种存储器却总是不甚熟悉。

寄存器是以与CPU相同的方法制备的,与CPU的时钟频率相同,且与CPU其他部分之间的数据通路都较短,此外,片上寄存器可以直接被CPU访问,而访问其他外部存储器都需要通过一个过程,包括存储器管理,地址翻译以及复杂的数据缓冲和控制机制。

Cache相当于位于内存和寄存器之间的缓冲区,这是实际存在的,硬件,计算机管理;而虚拟存储相当于内存和硬件之间的缓存机制,这并不实际存在,由操作系统管理。

Cache大家都比较熟悉,主要利用了访问的局部性原理(时间局部性与空间局部性)。

几种降低Cache失效率的方法

1.代码层面,编写具有良好局部性的代码

2.取指策略:如按需获取,预取,选择性获取。

按需获取在失效后调入所需块,这是一种最简单的选择。

预取策略预测未来的Cache需求(例如,如果没有缓冲块i+1,但访问块i时也调入第i+1块)。实现预取算法有许多可能的方法,如选择性获取策略在主存储器的部分内容不能被缓存的情况下使用。例如,在多处理器系统之中,由多个处理器共享的部分不应该被缓存,如果这些数据被缓存而处理器修改了存储器中的拷贝,Cache和存储器中的数据将不再保持一致。

3.多级Cache

虚拟存储器和存储器管理

这些概念在《深入理解计算机系统》和《操作系统》之中已有较为完备的介绍,在此只列下大概。

存储器管理是操作系统和硬件的切合点,它关注的是管理主存储器和磁盘,可以认为它是一种拓展的Cache技术。

虚拟存储空间是逻辑地址空间的同义词,编写程序中,我们不用考虑实际的物理地址,而是认为地址都是从0开始的即可,且可以编写超过主存的软件,给用户一个无穷大空间的错觉,这些是由操作系统帮助完成的。

处理器逻辑地址空间的大小与指定操作数的寻址方式无关。他也与程序是使用高级语言,汇编语言还是机器代码无关。在32位系统中,处理器不能指定4GB以外的逻辑地址。操作系统32位主要是指其寄存器的位数。

物理地址空间由处理器使用存储器系统中所有的实际地址位置构成。该存储器不是抽象的,是真正实现的。换句话说,系统的主存储器构成的物理地址空间。计算机逻辑地址空间的大小由指定地址所需得到位数决定,而物理地址空间的大小通常只受其成本限制。

存储器管理系统的基本目的如下:

虚拟存储器主要满足(1)(2)需求

其主要有4个作用:支持比物理空间更大的逻辑存储空间,实现逻辑地址到物理地址的映射,为逻辑地址空间中运行的任务分配物理存储器,更加方便的建立多任务的系统。

1.存储器管理与多任务

存储器管理单元将程序员选择的逻辑地址映射到物理存储空间,而操作系统负责建立逻辑空间到物理地址的映射表。存储器映射的一个强大功能是,每个逻辑存储快可被赋予各种权限。例如,存储器可以是只读、只写、只能通过操作系统或给定的任务访问或在一组任务之间共享。通过确保物理存储器只能被预先定义的任务访问,可以确保一个任务的执行不会导致另一个任务崩溃。有两种实现存储器管理的基本方式。使用固定大小的存储块,称为页,另一种使用可变大小的存储快,称为段

2.地址翻译

存储器管理提供了两种不同的服务。第一种是将逻辑地址映射到可用的物理存储器之中,第二种功能发生在物理地址耗尽之时,由于数据不在内存之中,逻辑地址到物理地址的映射不能完成。

3.二级表

由于现在的内存很大,如果只使用1级页表,将会导致巨大的页表,所以引入了2级页表,使用多级页表实现地址转换可以避免使用大容量的页表。

下面是一个二级页表示意图

最新文章

  1. JavaScript单元测试框架JsUnit基本介绍和使用
  2. 机器学习笔记--KNN算法2-实战部分
  3. biztalk重新发布
  4. JavaScript的语法要点 3 - Calling Context
  5. I.MX6 Linux kernel LVDS backlight enable
  6. [codevs2170]悠闲的漫步
  7. 50中制作图表的JS库
  8. windows下apache+wsgi+web.py环境搭建
  9. vim 打开乱码
  10. 洛谷 P2073 送花【Treap】题解+AC代码
  11. python自学日志--基础篇(1)
  12. 通用类 对象Excel互转
  13. 查询sql数据库中表占用的空间大小
  14. T-SQL:基础练习(杂)
  15. linux安装目录
  16. 使用VS2013自带的PreEmptive Dotfuscator and Analytis来混淆C#代码
  17. json解析为泛型对象
  18. 我的Java学习笔记 -开发环境搭建
  19. conductor Kitchensink示例
  20. [Assembly]汇编编写简易键盘记录器

热门文章

  1. Windows Socket编程精华《TCP通信服务器》
  2. java的自定义配置文件统一读取配置类示例
  3. Hadoop进阶命令使用介绍
  4. onehot编码检测
  5. UVa 548 Tree(中序遍历+后序遍历)
  6. Pytorch实现基于卷积神经网络的面部表情识别(详细步骤)
  7. 题解 CF51F 【Caterpillar】
  8. MVC + EFCore 项目实战 - 数仓管理系统7 - 数据源管理中--新增数据源
  9. react native redux
  10. 【新生学习】第一周:深度学习及pytorch基础