朝花夕拾-3-TLB & cache

引言 
对于computer architecture,除了流水线(pipelining)之外,存储器层次组织(memory hierarchy)是另外一个重要的部分。
软件方面,对linux kernel的研究中,MMU是篇幅最多,也是最复杂的一部分。
硬件方面,TLB和cache这两个词就比较常见了。
这一小节就回忆一下这两个概念吧。

 

3.1 为什么要有memery hierarchy
1》填补core和main memory之间的速度鸿沟。
2》填补SDRAM和main memory之间的cost鸿沟。
3》为了实现Virtual Memory

 

3.2 为什么实现Virtual Memory
历史上,有两个原因:
1》to allow efficient and safe sharing of memory among multiple programs,
2》and to remove the programming burdens of a small, limited amount of main memory.
现在主要是第一个原因。

 

3.3 memory hierarchy内在原理
局部性原理(principle of locality)
1》时间局部性(Temporal locality (locality in time)):
If an item is referenced, it will tend to be referenced again soon.
2》空间局部性(Spatial locality (locality in space))
If an item is referenced, items whose addresses are close by will tend to be referenced soon.

 

3.4 TLB 和 cache
首先要明确几点:
1》汇编完的程序里用到的内存地址是虚拟地址。也就是说core执行的load/stor指令中的内存地址是虚拟地址。
2》对于多进程(线程)代码,编译时,操作系统会给每个进程分配不同的虚拟地址空间。对于单核CPU来说,是没有多进程(线程)的概念的。
3》内存是按页(page)来管理和使用的,典型值是4K bytes。

ok,继续,根据冯诺依曼体系结构,一切东东都来自内存。所以就需要访存(memory access)。访问内存需要几步?大体上需要两步:
1》将虚拟地址转换成物理地址。
2》读/写这个物理地址的内容。

继续,
1》将虚拟地址转换成物理地址,就需要虚拟地址到物理地址的一个映射表(具体映射方法有直接映射,组相联,全相联)。
这个表,就是页表(page table),页表由很多项组成,每一项叫一个页表项,由操作系统维护。
创建进程的时候生成这个进程执行过程中用到的所有的页表项,其中一部分加载到内存中,另外一部分放在硬盘上,即,交换区(swap space)。
由于访存动作很多,所以虚拟地址到物理地址的转换动作就很多,也就是访问页表的次数很多,所以根据局部性原理,就把一部分页表项放到一个地方,这个地方就是TLB(translation-lookaside buffer)。

2》现在,物理地址知道了,那就可以读/写内存对应的这个地址了。
由于访存操作很多,所以根据局部性原理,就把经常访问的地址的数据放到一个地方,这样就不用每次都访问内存了,可以直接访问这个地方。这个地方,就是cache。

 

继续,
1》由于TLB里面只有一部分页表项,所以有的就虚拟地址就在TLB里找不到对应的物理地址,
这时,对于MIPS来说,会产生一个TLB miss的异常,然后由操作系统从内存中找到对应的页表项,然后将这个页表项放到TLB里面(注意,更新算法),然后让产生TLB miss异常的那条指令重新执行一遍,这时TLB里已经有那一项了,也就能完成虚拟地址到物理地址的转换了。
如果,操作系统点儿背,内存里也没有对应的页表项,那就只能从硬盘上的swap space里找了(交换区里肯定有),然后把它放到TLB里,然后让产生TLB miss异常的那条指令重新执行一遍,这时TLB里已经有那一项了,也就能完成虚拟地址到物理地址的转换了。

2》对于cache,有读,写之分。
先说读,如果cache里面有,直接把cache里面的数据返回,即,读操作完成了。
由于cache里面只有内存数据的一部分,所以有的数据cache里面没有,这时就只能产生读内存的地址信号,然后从数据线上取数据。然后更新cache(注意,更新算法)。
再说写,如果cache里面有,有两种方式:通写(write-through),写返回(write-back)。
由于cache里面只有内存数据的一部分,所以有的数据cache里面没有,这时就只能产生写内存的地址信号,然后把数据放到数据线上。然后更新cache。

 

继续,
数据,可分为指令和普通数据。
如果取指令和取普通数据各自使用一套memory hierarchy,就有了ITLB,DTLB,icache,dcache。这就有点哈佛体系结构的意思了。 即core内部采用哈佛体系结构,core外部采用冯。诺依曼体系结构。

 

3.5 整体流程

 

 

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值