出于效率的原因,JBD 层对日志的处理采用分组的方法,即把属于几个原子操作处理的日志记录分组放在一个单独的事务中 。此外,与一个处理相关的所有日志记录都必须包含在同一个事务中 。一个事务的所有日志记录都存放在日志的连续块中 。JBD层把每个事务作为整体来处理 。例如,只有当包含在一个事务的日志记录中的所有数据提交给文件系统时才回收该事务所使用的块 。
ReiserFSReiserFS是一个非常优秀的文件系统,其开发者非常有魄力,整个文件系统完全是从头设计的 。目前,ReiserFS可轻松管理上百G的文件系统,这在企业级应用中非常重要 。ReiserFS 是根据面向对象的思想设计的,由语义层(semantic layer)和存储层(storage layer)组成 。语义层主要是对对象命名空间的管理及对象接口的定义,以确定对象的功能 。存储层主要是对磁盘空间的管理 。语义层与存储层是通过键(key)联系的 。语义层通过对对象名进行解析生成键,存储层通过键找到对象在磁盘上存储空间,键值是全局唯一的 。
3.1 语义层主要接口
1)文件接口 每个文件拥有一个接口ID,此ID标识一个方法集,此方法集包含访问ReiserFS 文件的所有接口 。
2)属性接口 ReiserFS实现了一种新接口,把文件的每一种属性当做一个文件,属性的值就是此文件的内容,以实现对文件属性的目录式访问 。
3)hash接口 目录是文件名到文件的映射表,ReiserFS是通过B+树来实现这张映射表 。由于文件名是变长的,而且有时文件名会很长,所以文件名不适合作为键值,故引入了Hash函数来产生键值 。
4)安全接口 安全接口处理所有的安全性检查,通常是由文件接口触发的 。下面以读文件为例:文件接口的read 方法在读入文件数据之前会调用安全接口的read chech 方法来来进行安全性检查,而后者又会调用属性文件的read方法把文件属性读入以便检查 。
5)项(Item)接口 项接口主要是一些对项进行平衡处理的方法,包括:项的拆分,项的评估,项的覆写,项的追加,项的删除,插入及查找 。
6)键分配(key Assignment)接口 当把一个键分配给一个项时,键分配接口就会被触发 。每一种项都有一个与其对应的键分配方法 。
3.2 存储层
ReiserFS是以B+树来存储数据的,其结构如图:

图1:ReiserFS B+ 树
在B+树中的各个结点中有一个称为项(Item)的数据结构 。项是一个数据容器,一个项只属于一个结点,是结点管理空间的基本单位 。如图所示,一个项包括以下内容:
1)Item_body:项的数据域
2)Item_key: 项的键值
3)Item_offset:数据域的起点在结点中的偏移量
4)Item_length: 数据域的长度
5)Item_Plugin_id:项接口ID 。

图2: ReiserFS 项结构
ReiserFS设计了多种不同的项以存储不同的数据,主要有以下几种:
1)static_stat_data: 静态统计数据,包括文件的所有者,访问权限,创建时间,最近修改时间,链接数等
2)cmpnd_dir_item: 包含各个目录项
3)extend_pointers: 指向一个盘区(extend)
4)node_pointers: 指向一个结点
5)bodies: 包含的是文件的小部分数据
3.3 ReiserFS日志
与ext3一样,ReiserFS也有三种日志模式,即journal,ordered,writeback 。同时,ReiserFS引入了两种日志优化方法:copy-on-capture和steal-on-capture 。copy-on-capture:当一个事务要修改的块在另一个未提交的事务中时,就把这个块复制一份,这样这两个事务就可以并发进行了 。steal-on-capture:当一个块被多个事务修改时,只有最晚提交的那个事务才把这个块实际写入文件系统,其他事务都不写这个块 。
推荐阅读
- 健康管理师考试科目有哪些 健康管理师考试科目
- 济南市找工作招聘单位 济南人才市场在哪里
- 国家基本公共卫生服务项目管理系统平台入口地址
- 招商银行账户管理费10元怎么取消,看完便知晓
- 律师如何开拓案源 律所案源拓展专员工作内容
- 三苦瓜的种植及管理方法
- 年房地产销售工作计划精选 房地产销售年终工作计划
- 微博如何删除分组 微信好友如何设置分组管理
- 什么样的外卖具备减肥条件呢
- 熬夜能补回来吗
