免费注册 查看新帖 |

Chinaunix

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

[文件系统] 如何将 普通文件映射到 kernel 地址空间 上 ? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2013-12-30 17:48 |只看该作者
回复 10# humjb_1983


  我确实需要在 内核态直接访问(虽然听起来挺诡异的), 因为我在内核实现了一个简单的存储服务, 是基于文件的。  所以不能依赖用户态进程的地址空间
   

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:17
12 [报告]
发表于 2013-12-30 22:22 |只看该作者
第一印象是, 会很麻烦

所谓普通文件, 假定是存在于一个已经在upstream的fs,,例如ext3.  这时它的mmap方法已经有了,就是ext3实现的那个。  没有很直接的方式,可以去改变ext3 的mmap方法的语义。

有人可能说自己实现mmap方法, 可是, 常见的那种做法, 是自己提供了 特殊文件(char、block等), 这些文件你当然容易往上挂。 regular file就很难了

所以我觉得你的思路可能换一下会更好,  例如,调用read/write而不是mmap, 例如, 引入userspace utils

论坛徽章:
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
13 [报告]
发表于 2013-12-31 00:52 |只看该作者
内核态段错误是不允许的,当然你可以修改缺页异常流程。
另一个条件是必须有段错误发生启动map机制。
找个进程mmap一下,然后找一块空白内核空间,copy vma结构

论坛徽章:
1
天蝎座
日期:2013-10-23 21:11:03
14 [报告]
发表于 2013-12-31 08:33 |只看该作者
需要在自己的模块中启动内核线程,然后看看 mmap 内核态的实现需要什么样的参数,在模块的内核线程里面构造这些参数

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
15 [报告]
发表于 2013-12-31 09:44 |只看该作者
回复 5# smartegg

page fault的限制在那里,你绕不过去。。。

我觉得直接在page cache这一层做可行性大些!

把需要的内容自己取到page cache。可以参考下内核的文件读取流程!

最后做下映射,做文件操作。估计也够麻烦的就是了。。。

论坛徽章:
0
16 [报告]
发表于 2014-01-05 11:23 |只看该作者
直接调用file_mmap不行? 就是个建vma页表的事,那段地址对应对了就行了


回复 1# smartegg


   

论坛徽章:
1
白羊座
日期:2014-01-05 12:42:56
17 [报告]
发表于 2014-01-05 12:44 |只看该作者
以上机制只在提升缓冲内存的读写效率(命中率)

论坛徽章:
0
18 [报告]
发表于 2014-01-06 14:17 |只看该作者
回复 16# unbutun


    不行的。 vma 本身只管理用户态的   线性空间。

论坛徽章:
0
19 [报告]
发表于 2014-01-07 22:59 |只看该作者
晕,那vmalloc怎么实现的

回复 18# smartegg


   

论坛徽章:
0
20 [报告]
发表于 2014-01-08 11:22 |只看该作者
回复 19# unbutun


    使用 vm_struct 结构  来管理 VMALLOC_START 到 VMALLOC_END 之间的线性空间呗~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP