免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7459 | 回复: 10
打印 上一主题 下一主题

MIPS32 TLB的实现 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-31 09:05 |只看该作者 |倒序浏览
关于MIPS32有个问题想请教各位大侠,我用的DDR是32M的,flash是16M的,CPU是BCM5354:
  1. TLB在代码中具体是怎么实现的?我看到有的帖子上说TLB是在CPU里的,有的说是存在memory中的,到底哪对啊?糊涂了。。。
  2.如果要实现TLB的话,代码中具体该怎么做呢?
  期盼各位大侠的回复!

论坛徽章:
0
2 [报告]
发表于 2009-12-31 10:51 |只看该作者
TLB是CPU内部的,属于MMU部分。
用于虚拟地址到物理地址的转换。
如果CPU的MMU功能使能。CPU指令中给出的地址和取指令的地址都要经过TLB转换到物理地址。
如果这些地址在TLB中找不到对应的物理地址映射,就会产生TLB异常。
操作系统的TLB异常处理程序负责把这些地址对应的物理地址映射加载到TLB中(所谓的缺页异常)
这些地址映射关系在操作系统初始化或进程加载时都会在物理内存中建立好。

CPU访问虚拟内存流程:
CPU访问虚拟内存地址-->查找TLB-->没有映射-->产生TLB异常-->TLB异常处理程序流程-->继续执行异常处指令或取下一条指令

是否继续执行异常处指令取决于TLB异常处理程序执行的结果

TLB异常处理程序流程:
1.得到异常的地址-->在内存映射表找映射项-->如果找到则加载到TLB-->异常返回
2.得到异常的地址-->在内存映射表找映射项-->如果没找到就报错(一般是Segment fault)-->异常返回.

[ 本帖最后由 readkernel 于 2009-12-31 10:56 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2009-12-31 11:19 |只看该作者

回复 #2 readkernel 的帖子

MIPS中CPU是否使能MMU是由状态寄存器SR里的TS位决定的吧?而该位是一个只读位,系统reset时初值是“0”,只有当多个TLB出现match时才会置“1”。这就有疑问了,出现多个TLBmatch,怎么就disable MMU了呢?

论坛徽章:
0
4 [报告]
发表于 2009-12-31 12:09 |只看该作者

回复 #2 readkernel 的帖子

现在我知道如何从一个虚地址VA到一个实地址,但是这还只是理论的东西,但毕竟这是我第一次写底层的代码,有些东西实现起来很是困难,迷雾重重。
具体的地址译码过程可以用下面一张图来说明:

           

“这些地址映射关系在操作系统初始化或进程加载时都会在物理内存中建立好”这个具体怎么实现呢?

[ 本帖最后由 jyhhappyjyh 于 2009-12-31 12:14 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2009-12-31 12:44 |只看该作者
mips的MMU是没有Disabled,上电就一直开着..

论坛徽章:
0
6 [报告]
发表于 2009-12-31 12:46 |只看该作者
虚拟地址到物理地址的映射不止有TLB。

MIPS有几段虚拟地址空间就没有用TLB映射
看看kseg1。

论坛徽章:
0
7 [报告]
发表于 2009-12-31 12:53 |只看该作者
原帖由 jyhhappyjyh 于 2009-12-31 11:19 发表
MIPS中CPU是否使能MMU是由状态寄存器SR里的TS位决定的吧?而该位是一个只读位,系统reset时初值是“0”,只有当多个TLB出现match时才会置“1”。这就有疑问了,出现多个TLBmatch,怎么就disable MMU了呢?


...
这个位是表示相同的虚拟地址映射到了TLB中多个Entry。

status register[TS] bit
Indicates that the TLB has detected a match on multiple
entries. When such a detection occurs, the processor
initiates a machine check exception and sets this bit. It is
implementation dependent whether this condition can be
corrected by software. If the condition can be corrected,
this bit should be cleared by software before resuming
normal operation.
If this bit is not implemented, it must be ignored on write
and read as zero.
Software should not write a 1 to this bit when its value is
a 0, thereby causing a 0-to-1 transition. If such a transition
is caused by software, it is UNPREDICTABLE whether
hardware ignores the write, accepts the write with no side
effects, or accepts the write and initiates a machine check
exception.

论坛徽章:
0
8 [报告]
发表于 2009-12-31 13:23 |只看该作者

回复 #6 readkernel 的帖子

对的,k0和k1段是不需要进行映射的,有点像是硬件来完成的,都是指向0x0000 0000 ~ 0x1FFF FFFF。

论坛徽章:
0
9 [报告]
发表于 2009-12-31 13:57 |只看该作者
原帖由 readkernel 于 2009-12-31 12:46 发表
虚拟地址到物理地址的映射不止有TLB。

MIPS有几段虚拟地址空间就没有用TLB映射
看看kseg1。

readkernel,看来你是这方面的专家,可否传上一小段这方面的代码?或者加我QQ:330479369(只做为自己学习提高!)不方便的话发我邮箱也可以:jyhhappyjyh@163.com
真心地感谢!现在被这个搞得快崩溃了~~:em12:

[ 本帖最后由 jyhhappyjyh 于 2009-12-31 14:02 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2009-12-31 14:16 |只看该作者
QQ.. 多年没用了。
linux源码arch\mips\mm\下所有的文件都是这方面的代码。
呵呵,很细节的东西我也没仔细研究过。
正是“知其所以然,不知其然”
真正要用到的时候才会潜心去研究细节。

有问题这里说吧,论坛上还是有那么几个比较牛的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP