免费注册 查看新帖 |

Chinaunix

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

[内存管理] 问一个很弱智的问题,线程如何跟TLB对应的 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-08-22 11:46 |只看该作者 |倒序浏览
最近在看虚拟地址映射,说每个用户线程都对应一个tlb表,每次线程切换都会刷对应的tlb表,

我的问题是,系统如何知道哪个线程和哪个tlb表是对应的,

查了很多资料没有找到,都是讲tlb如何转换的.

各位大侠给个资料看看也行,谢谢了.

论坛徽章:
0
2 [报告]
发表于 2014-08-22 14:02 |只看该作者
个人理解:
线程的内存肯定都是内核分配的吧,PA和VA都是由内核决定的,自然VA-》PA的映射关系 内核是知道的吧;
这个映射关系也就是页表都会保存每个任务自己的task struck中吧,每次切换的时候只需要加载这个页表就ok了

论坛徽章:
0
3 [报告]
发表于 2014-08-22 14:14 |只看该作者
本帖最后由 lamp_lighter 于 2014-08-22 14:16 编辑

TLB应该是一种硬件设备吧?它与Cache没有本质的区别,只是用法不一样。一个是用于地址转换,另一个用于缓存物理空间。
之所以每一次线程切换要刷新TLB(意思是除了保留部分,其他的页表项全部标为失效),是为了防止新的线程由于使用旧的页表而出现访存错误。

每个线程都对应一个TLB的意思也就相当于每个线程都有自己的页表项,自己的线性空间。TLB只是一种缓存机制

论坛徽章:
2
射手座
日期:2014-09-03 00:18:022015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2014-08-22 14:39 |只看该作者
TLB是一种硬件,类似于cache,页表这个东西每个任务有一个,是存放在内存上面的;
而TLB就是缓存页表的一种硬件cache,如果在TLB里面能找到的话,就不用去访问内存上的页表了;速度能快很多

当任务发生切换时,VA->PA的映射关系发生了改变,所以需要更换页表,那么就需要让TLB上缓冲页表失效,否则
比如Task A的页表转换关系:0xF0000000-》0x30000000的;
task b的页表转换关系式 0xF0000000 -》 0x40000000;
由task a切到task b后,task b要访问0xF0000000这个虚拟地址,如果不让TLB失效的话,那么会访问到0x30000000这个物理地址,其实真正需要访问的是0x40000000这个物理地址;

论坛徽章:
7
丑牛
日期:2013-10-18 14:43:21技术图书徽章
日期:2013-11-03 09:58:03辰龙
日期:2014-01-15 22:57:50午马
日期:2014-09-15 07:04:39丑牛
日期:2014-10-16 14:25:222015年亚洲杯之伊朗
日期:2015-03-16 10:24:352015亚冠之城南
日期:2015-05-31 09:52:32
5 [报告]
发表于 2014-08-22 14:41 |只看该作者
页目录表作为tlb内容载入.

论坛徽章:
0
6 [报告]
发表于 2014-08-22 14:50 |只看该作者
不知道你说的tlb表是啥,页表还是硬件tlb条目。如果是前者,楼上已经回答了;如果是后者,有些cpu体系,tlb条目里有个asid字段,由内核在进程切换时更新(加载),以区分tlb是属于哪个进程(组)空间。

论坛徽章:
0
7 [报告]
发表于 2014-08-22 15:39 |只看该作者
不好意思,我说的不准确,其实我说的是页表,不是tlb.回复 4# wLiu2007


   

论坛徽章:
0
8 [报告]
发表于 2014-08-22 15:51 |只看该作者
页表是放在内存里的,那么多页表怎么查找到正确的那一个,我的疑惑在这里..回复 6# chenyu105


   

论坛徽章:
0
9 [报告]
发表于 2014-08-22 16:04 |只看该作者
回复 8# hwa_super
也许可以这样理解:
每个进程对应了一份页表,页表的基地址保存在进程的task struct中,进程切换时,每次都会把下一个进程task struct的页表基地址加载进来,作为“当前”进程页表。 寻址时,只会参考“当前”页表。

   

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
10 [报告]
发表于 2014-08-22 16:10 |只看该作者
mm_struct里的pgd指向的地址就是进程页表首地址(虚拟地址),然后把这个虚拟地址对应的物理地址告诉MMU,然后MMU就会从这个新的地址中去查找VA PA的转换关系,就实现了页表切换

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP