学习笔记:计算机组成原理Ch7.内存和缓存
现在开始讲解存储的单元,在讲解之前先要声明:
并不是所有的memory都是一样的,去不同价格的memory拿数据的时间也是不一样的!
我们先不管由于硬件不同造成的影响,实际上同一个memory,拿取数据的时间也是不一样的
可以把memory想象成中药房抓药的抽屉,分行和列
那么如果你发现两个药都在同一行的连续两列上,抓取这两个药的速度就要比两个不同位置的药容易的多
memory也是如此!
因此,连续地址的数据拿取速度就是快!
在IT network里有提到,运营商会把数据保存在服务器中,因为在memory中抓取数据时间会比较长,所以就需要在cpu和memory中加cache,也就是缓存。
下面看一下存储的层级:

那么如何在cache里实现读写操作呢?
读:通常read操作开始时,我们把最旧的page存起来
写:此时,cache和memory写一个数据就要做到同步性,那么通常cache里是只读文件,执行了写的操作,原来cache里的就会被删除。
如何在cache里快速查找到一个数据呢?
通常设置快速查找set number,cache里数据是分页的,只要找到相应页码,就可以快速找到一个元素。
但是通常有些情况,两个元素在同一页中出现。
于是cache里会把set number分配几个不同的页面,每次查找时做两次比较,就不容易出现上面的问题。
现在来看内存:
可以把内存切开分段:segmentation
这样每一段就有自己的logic address,如何把他们和physical address关联呢?
可以采用segment table如下图所示:

现在出现了一个新问题:如果我瞎分段,就像切蛋糕一样,你切一下,我切一下,中间空余的小段大家都不要,就造成了浪费,这该怎么办呢?
我可以规定,大家切蛋糕必须切一样的尺寸,这样每个人的都一样,就会少机会出现浪费。
这就是pagination,分页。
这时segment table就变成了page table,此时的page table就不必出现length了

memory里还有一个漏洞,就是每个physical page的位数不必和logical page 的位数相等,这样就可以拓展memory:

同样的道理,可以把拓展的memory定义为外部设备,USB呀。
这样就出现了Virtual memory

值得注意的是,如果在传输内存数据发生中断了,会怎么样?
因为在上一章我们知道,中断发生后,CU会继续执行完这个指令,然后再执行相应的中断程序,但是如果数据都不到位,这个指定都没办法执行,此时的中断就宛如时间倒流,重新执行这个指令:

当然,毋庸置疑,segmentation 和 piganation能一起存在。
另外,通常来说,运行一段程序,一段数据经常存在于自身附近,每次都要从物理地址翻译成逻辑地址实在是对于时间的一种糟蹋。
所以,Translate Look Aside Buffer(TLB),出来了,他会保存最近几十条翻译,cpu调用的时候,先看看这个Cache里面有没有,cache里有的话,就直接传过来,如果没有的话,cache发一个中断信号,然后接着从memory里面查翻译。