免费注册 查看新帖 |

Chinaunix

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

[内核同步] Kernel是如何开辟文件缓存,以至于不需时时存数据到存储介质呢 [复制链接]

论坛徽章:
1
2015亚冠之卡尔希纳萨夫
日期:2015-07-27 18:11:47
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-07-30 11:57 |只看该作者 |倒序浏览
小弟最近在Ble芯片上面,想模拟kernel的文件缓存机制。因为频繁操作Flash,会使其寿命剪短。如果能在RAM里边缓存数据,到某个时机(什么时机?)刷进Flash,那么就可以不用刷太频繁。

这个Ble系统以后可通过串口输入命令来控制。现已经移植简单的文件系统,可支持ls、mkdir等简单的功能;另外,自己创建一个新的文件系统来管理fFlash里边文件的。

现在的问题是,怎么在这些文件系统基础上面,合入缓存的机制呢?

论坛徽章:
1
2015亚冠之卡尔希纳萨夫
日期:2015-07-27 18:11:47
2 [报告]
发表于 2015-07-30 12:03 |只看该作者
有哪位大虾在看《深入Linux内核架构》的吗?一个人看觉得好孤独无助呀。。。

论坛徽章:
1
2015亚冠之卡尔希纳萨夫
日期:2015-07-27 18:11:47
3 [报告]
发表于 2015-07-30 21:24 |只看该作者
还是IBM提供的资料比较清晰。3w.ibm.com/developerworks/cn/linux/l-cn-read/

看了一些,感觉有些激动,比看书本上好多了,明天继续。今天的收获:

1、了解有直接I/O方式读取数据和通过cache两种方式

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-08-19 06:20:002015亚冠之本尤德科
日期:2015-08-31 23:24:47
4 [报告]
发表于 2015-07-30 22:58 |只看该作者
文件缓存是借助基数数实现的,进行读写操作之前,先要搜索树,检查读写的位置是否已经被缓存到内存中。如果没有则要申请内存page,并插入到树中。

两种操作方式:buffer IO和direct IO
direct IO:没有缓存,没有用户层到内核层的数据拷贝,在某些场合下效率很高。但是有个限制,使用该模式,用户层的buffer至少是512对齐的,最好是4K对齐,因为涉及到page的重映射。这就是说,采用该方式后,不能操作随机读写任意大小、任意位置的数据。

buffer IO:因为会对数据进行缓存,因此可以读写任意位置、任意大小的数据,但是会多一次数据拷贝(数据只有拷贝到内核层,才能缓存),而且该模式会消耗很多内存。buffer io对一些底层慢速的设备会有一定的帮助,如机械硬盘
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP