免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 枫露清愁
打印 上一主题 下一主题

[内核模块] 内存映射内核和用户读写数据不同步 [复制链接]

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
31 [报告]
发表于 2014-09-15 19:49 |只看该作者
本帖最后由 arm-linux-gcc 于 2014-09-15 19:57 编辑

回复 26# wLiu2007


    vipt的tag是从物理地址中取出来的,[31:x]
x = way_size > page_size ? log2(page_size) : log2(way_size)

vipt的tag需要扩展,在http://en.wikipedia.org/wiki/CPU_cache有原话:
Virtually indexed, physically tagged (VIPT) caches use the virtual address for the index and the physical address in the tag. The advantage over PIPT is lower latency, as the cache line can be looked up in parallel with the TLB translation, however the tag cannot be compared until the physical address is available. The advantage over VIVT is that since the tag has the physical address, the cache can detect homonyms. VIPT requires more tag bits, as the index bits no longer represent the same address.
这个是由硬件做的,不需要os的支持

扩展tag是为了解决“不同va映射到不同pa,并且va的index都相同,并且两个pa间隔不超过way_size”的问题




page color则是为了解决“不同va映射到同一个pa的”












论坛徽章:
0
32 [报告]
发表于 2014-09-17 09:37 |只看该作者
回复 20# Tinnal
可不可以在用户态刷新缓存,我在内核里写了之后刷新,在用户态读到的是对的,但如果不在内核态刷新,而是在用户态需要读之前再刷新,可不可以做到?我试了一下msync函数,没得用啊

   

论坛徽章:
0
33 [报告]
发表于 2014-09-17 09:38 |只看该作者
回复 31# arm-linux-gcc
可不可以在用户态刷新缓存,我在内核里写了之后刷新,在用户态读到的是对的,但如果不在内核态刷新,而是在用户态需要读之前再刷新,可不可以做到?我试了一下msync函数,没得用啊

   

论坛徽章:
0
34 [报告]
发表于 2014-09-17 09:38 |只看该作者
不好意思,我不知道这里面的@怎么用啊

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
35 [报告]
发表于 2014-09-17 09:54 |只看该作者
回复 32# 枫露清愁

用户态直接不能刷,权限不够。
ARM这边有一个__ARM_NR_cacheflush系统调用。x86没有对应的。这不是一个标准系统调用。
   

论坛徽章:
0
36 [报告]
发表于 2014-09-17 10:47 |只看该作者
回复 35# Tinnal
这个系统调用可以直接在用户态调用吗?我包含了unistd.h(定义在这个头文件里),但调用还是会出错。我猜想会有一个系统调用,实现了flash_cache的内核调用,munmap就是的,但我不能调用munmap,以为是msync,但不行

   

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
37 [报告]
发表于 2014-09-17 15:48 |只看该作者
回复 36# 枫露清愁


1. 都说系统调用了,那肯定能调用呀。你是以是否有直接调用过系统调用?
2. 如果是正确使用了,还出错,请查看错误的返回值。
3. 这个系统调用不是标准系统调用,有可能有一平台确实不支持。

这种问题,最好的方法是在内核去做。

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
38 [报告]
发表于 2014-09-17 19:59 |只看该作者
回复 33# 枫露清愁


    最好是在内核driver里去做

论坛徽章:
0
39 [报告]
发表于 2014-09-18 10:01 |只看该作者
回复 37# Tinnal
谢谢,我再看看,提示没定义,但我在unistd.h头文件里找到了

   

论坛徽章:
0
40 [报告]
发表于 2014-09-23 09:41 |只看该作者
回复 10# 枫露清愁
刷新cache的话建议看下 Linux/Documentation/cachetlb.txt  ,可能有你需要的函数。

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP