Chinaunix

标题: Kernel是如何开辟文件缓存,以至于不需时时存数据到存储介质呢 [打印本页]

作者: maybe524    时间: 2015-07-30 11:57
标题: Kernel是如何开辟文件缓存,以至于不需时时存数据到存储介质呢
小弟最近在Ble芯片上面,想模拟kernel的文件缓存机制。因为频繁操作Flash,会使其寿命剪短。如果能在RAM里边缓存数据,到某个时机(什么时机?)刷进Flash,那么就可以不用刷太频繁。

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

现在的问题是,怎么在这些文件系统基础上面,合入缓存的机制呢?
作者: maybe524    时间: 2015-07-30 12:03
有哪位大虾在看《深入Linux内核架构》的吗?一个人看觉得好孤独无助呀。。。
作者: maybe524    时间: 2015-07-30 21:24
还是IBM提供的资料比较清晰。3w.ibm.com/developerworks/cn/linux/l-cn-read/

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

1、了解有直接I/O方式读取数据和通过cache两种方式
作者: 夕阳下的孤影    时间: 2015-07-30 22:58
文件缓存是借助基数数实现的,进行读写操作之前,先要搜索树,检查读写的位置是否已经被缓存到内存中。如果没有则要申请内存page,并插入到树中。

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

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




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2