Chinaunix首页 | 论坛 | 博客
  • 博客访问: 40998
  • 博文数量: 31
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 330
  • 用 户 组: 普通用户
  • 注册时间: 2015-07-28 17:39
文章分类
文章存档

2015年(31)

我的朋友

分类: 嵌入式

2015-10-29 23:56:38

1.原因:存储器件多样。
cache 和write buffer缩小处理器和存储系统的差别,提高性能
mmu内存映射技术实现虚拟到物理空间映射
存储保护机制
引入一些机制保证将io映射为内存的操作正确

2.存储系统通过协处理器cp15完成,会用到其他的机制,比如mmu会用到tlb。

3.cp15的访问:
mcr   p15, 0, , ,  ,  
mrc   p15, 0, , ,  ,  

4.cp15的寄存器在mmu中的作用
C0:ID编码和cache类型
C1:控制
C2:地址转换的基地址
C3:域访问控制位
C4:
C5:内存失效状态
C6:内存失效地址
C7:高速缓存和写缓存控制
C8:TLB控制
C9:高速缓存锁定
C10:tlb锁定
C13:进程标志符

5.协处理器寄存器的访问:
MRC   P15, 0, R0, C0, C0, 0 //cpu标识

MRC   P15, 0, R0, C0, C0, 1 //cache类型标识

cache标志意义:
[28:25]:写通写回类型,清除、锁定方法
[24]:数据和指令cache是分开还是统一的
[23:12]:数据cache的容量,块大小,相邻特性
[11:0]:指令cache的容量,块大小,相邻特性

11~9 8~6 5~3 2 1~0
0 cache容量S cache相连特性L M 块大小N

容量大小/KB:0.25*(2 + M)*2^S 
块大小/字:2*N  
相连特性:(2+M)*2^(L-1);其中L=0且M=1时表示没有cache

直接映射:
组相连:
全相连:
6.mmu:
6.1功能:
虚拟到物理地址的转换,
存储器权限控制,
设置存储空间的缓冲特性

6.2访问过程:
6.2.1找地址变换条目:先在TLB找,没有时再从页表中查询并添加到TLB
6.2.2虚拟地址到物理地址转换
6.2.3根据条目中的CB位决定是否缓存内存访问的结果
6.2.4按存取权限和域访问控制确定内存访问是否被允许,如不允许则向处理器报告存储访问中止
6.2.5对不允许缓存的存储,直接用物理地址访问;允许缓存的,先在cache中找,没有找到再用物理地址访问内存并加到cache中。

6.3地址变换过程:
6.3.1地址变换条目的地址:页表基地址(16k对齐)存放在C2中,虚拟地址的高12位(表示4k个地址变换条目中的一个)指明在页表内的序号,
6.3.2地址条目的内容:最后两位的值判断地址类型:00-->无效,01-->粗粒度二级页表,10-->段,01-->细粒度

以段为例:
地址变换条目后两位为10,则地址变换条目的高12为为段基址,虚拟地址的低20为为段内偏移,这就是物理地址。
地址变换条目的其他位:根据域,C ,B ,AP做相应的判断(会用到C1和C3寄存器),确定是否可访问,缓存,缓冲等,对于二级页表,指明这1Mb的空间是按4kb(粗粒度)还是1kb映射(细粒度)。

7.TLB快表
7.1使无效操作
MCR  P15, 0, Rd, C8, Cn, 0/1

命令中的Cn为:
C7:表示清除指令和数据cache
C6:表示清除数据cache
C5:表示清除指令cache

如果第二个操作码为0,则无效的是整个cache(Cn限定的范围内),=1是无效Rd指定的地址变换条目。

8.cache
实现:cache和主存划分成相同大小的块,主存地址由块号B和块内地址W组成,cache地址由块号b和块内地址w组成。
过程:由WB变换成wb,成功就去访问cache,如果不成功则产生失效信息,从主存中读字到cpu,同时将主存整块装入cache;如果cache满则按替换。

映像和变换方法:
主存和cache划分为相同的组,主存组号G和cache组号g:
直接映射:组内只有一个块,此时主存块号B=cache块号b, 块内地址W=块内地址w组相连:主存块号G映射cache块号g,主存组号G=cache组号g, 块内地址W=块内地址w
全相连:所有的cache作为一个组

写通:写操作时将数据同时写入cache和主存
写回:被写的数据只写入cache,需要替换时才将修改过的在写入主存。

进行数据写操作时,cache未命中,cache的操作有两种:
读操作分配:只是将数据写入主存,在数据读取时才进行cache预取
写操作分配:cache预取,把数据写入到cache中。如果是写通类型时同时写入主存。

替换算法:
随机:
轮转:

io口不要使用cache;

9.数据一致性:
9.1地址变换关系变化--->清空cache,数据cache块无效,指令cache块无效,写缓冲区的延迟写操作执行
9.2指令cache:执行时影响同一块中的其他单元---->在被影响指令执行前清空数据cache,无效指令cache
9.3dma:dma直接访问主存,不更新cache和写缓冲区相应内容,读出未更新的数据--->dma访问区域设置成非缓冲,清空数据cache,清空写缓冲区,dma操作期间现在处理器访问dma访问区域

10.cache锁定:cache中的块不被替换,cache分为Nsets个组,每个组有A个块,锁定0个块表示将每个组中的第0个块都锁定

11.快速上下文切换
fast context switch extension是指修改不同进程的虚拟地址,避免进程间切换时造成的虚拟地址到物理地址的重映射。这样避免重建页表,无效tlb、cache

4GB空间分为128个进程块,大小为32MB,即进程用这32MB的虚拟空间。其中每个进程都可以访问0~0x01FFFFFF这32MB空间,
进程访问本进程的空间时,高7为为0,如果高7位不为0,则表示访问别的进程的虚拟空间。

上下文切换机构结合虚拟地址va和进程的pid,转换为实际的虚拟地址mva。
if (va[31:25] == 0)
then 
mva = va | (pid << 25)
else
mva = va

寄存器C13的高7位为pid,如果这7位为0,表示禁用上下文切换,反之,则表示使能。
阅读(630) | 评论(0) | 转发(0) |
0

上一篇:指针

下一篇:中断

给主人留下些什么吧!~~