免费注册 查看新帖 |

Chinaunix

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

缺页中断完成时谁负责更新各CPU上的tlb [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-22 16:49 |只看该作者 |倒序浏览
应该是Linux更新吧,但是没看到相应的代码

论坛徽章:
4
戌狗
日期:2013-08-15 18:22:43技术图书徽章
日期:2013-08-21 13:48:45巨蟹座
日期:2013-09-26 17:06:39处女座
日期:2013-12-25 11:26:10
2 [报告]
发表于 2012-03-22 16:59 |只看该作者
缺页时不用刷新TLB

更改页映射及取消映射时时,需要刷新TLB。 而且还需要刷新load store unit及指令预约站里的东西,即某些存取数的指令还未真正发生存取,但是目的地址和目的数据都已就绪,而这时我们改了页表,致使存取的目的地址和目的数据都是错的;或者取指已经完成,但是这是更新了页表,致使应该取新的指令。

但是某些architecture上仅仅需要刷TLB,不需刷load store unit及预约站,诸如ARMv7,手册中说异常发生及返回时,硬件自动更新load store unit。

某些architecture上什么都不需要刷,比如x86;某些architecture上都需要刷。

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
3 [报告]
发表于 2012-03-23 08:34 |只看该作者
回复 1# littlenewer
在x86平台下,当cr3发生改变的时候,硬件会自动的是本地TLB失效。
而发生缺页异常的情况下,cr3寄存器并不会改变,所以不会刷新TLB。

   

论坛徽章:
0
4 [报告]
发表于 2012-03-23 09:23 |只看该作者
两位的意思都是在缺页中断时不需要刷新tlb。那如果缺页中断完成时,系统还是从tlb去找地址映射,由于tlb没有刷新,里面存的还是旧的信息,又会导致再一次缺页中断,那不是没完没了了。

论坛徽章:
2
CU十二周年纪念徽章
日期:2013-10-24 15:41:34处女座
日期:2013-12-27 22:22:41
5 [报告]
发表于 2012-03-23 10:02 |只看该作者
X86在硬件上支持内存页表,缺页异常是由内存页表里的NULL项引起的。x86上的TLB miss硬件处理掉了,你看不到。

mips上的TLB miss是由操作系统处理的,但它不支持硬件内存页表。

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
6 [报告]
发表于 2012-03-23 10:40 |只看该作者
回复 4# littlenewer
那如果缺页中断完成时,系统还是从tlb去找地址映射,由于tlb没有刷新,里面存的还是旧的信息,又会导致再一次缺页中断,那不是没完没了了。

你需要明白TLB中存放的什么? TLB中存放的是线性地址到物理地址的映射,而缺页异常的时候,可能会删除其中的某一项(flush_tlb_page),但不会刷新整个TLB。

   

论坛徽章:
0
7 [报告]
发表于 2012-03-23 11:28 |只看该作者
我就是不明白是谁来刷新tlb中这一项的内容

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
8 [报告]
发表于 2012-03-23 12:22 |只看该作者
回复 7# littlenewer
我就是不明白是谁来刷新tlb中这一项的内容

这个是linux的事情。但是只需要更新当前CPU的就可以了,不需要去更新别的CPU。因为别的CPU不会有当前这个进程的页表,也就不需要刷新。
   

论坛徽章:
0
9 [报告]
发表于 2012-03-23 13:43 |只看该作者
回复 8# 瀚海书香

如果这是linux的事,请版主指点一下flush的代码在哪里,我一直没找到。

“但是只需要更新当前CPU的就可以了,不需要去更新别的CPU。因为别的CPU不会有当前这个进程的页表,也就不需要刷新”

这句话我觉得有问题。如果这个进程之前在另外一个CPU上执行,但在导致执行缺页指令前面的那条指令时来了一个时钟中断使该进程睡眠,这时tlb中可能已经预读缺页指令的地址映射。然后这个进程被搬到当前CPU上继续执行,此时当前CPU上也会读入该地址映射,接着进入缺页中断处理,所以要更新tlb的话应该两边同时更新


   

论坛徽章:
4
戌狗
日期:2013-08-15 18:22:43技术图书徽章
日期:2013-08-21 13:48:45巨蟹座
日期:2013-09-26 17:06:39处女座
日期:2013-12-25 11:26:10
10 [报告]
发表于 2012-03-23 14:09 |只看该作者
littlenewer 发表于 2012-03-23 13:43
回复 8# 瀚海书香

如果这是linux的事,请版主指点一下flush的代码在哪里,我一直没找到。


这个反而是X86比较复杂,需要发个IPI,通知其它CPU刷TLB。
ARMv7反而简单,因为操作cache及tlb的指令,都是广播的,天生的所有CPU都能收到。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP