正如前面所述,Coffee文件有可扩展的物理布局,可和微日志结合。每个普通文件由首部和数据域组成,每个微日志文件用日志索引表和日志项目表代替数据域,Coffee透明处理微日志,以便直接通过函数cfs_write()和cfs_read()呈现文件的逻辑内容。Coffee中所有类型的文件都有预设的最大大小值,该大小值在多个平台定义“页(page)”定义。
文件描述符包含仅与它们的拥有者相关的临时信息,文件描述符和文件结构是N:1关系,这个结构包含特定文件缓存的元数据。当系统启动之后第一次打开文件时,Coffee必须按顺序扫描存储设备,找到合适的扩展,这会导致Coffee使用中存在微小延迟,但按顺序打开文件将会使用很小的struct file类型对象的内部缓存,如图6-3 中右半部分所示,指向相同文件的文件描述符共享共同的struct file 类型对象,这样可确保当相同文件被多个程序打开时内容的一致性。
(www.xing528.com)
图6-3 文件描述符和文件结构关系
Coffee 的另一特点是当第一次打开文件时必须找到文件位置的末尾,Coffee在首部不存储该信息,因为文件位置的末尾通常是经常变化的,并且闪存不允许在相同的闪存地址上重复修改,Coffee使用强行从扩展的末尾向后扫描的方法去查找第一个非空字节,这对最后写入的字节为0 的文件生成了语义结果,即系统启动后重新打开的文件不会被考虑。Coffee将会在struct file类型对象中缓存文件末尾位置,这样能删除缓存的并且重新打开的文件中的问题,为了避免这种问题,建议确保程序最后写入的字节总是非空字节,或者如果能够判断没有非空字节,程序追加非空字节。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。