⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ext3日志系统.txt

📁 这是一个牛人的linux学习内核时分析内核的笔记
💻 TXT
字号:
any problems, send mails to sindybear@163.com


相关文件
	/fs/jbd/*.c


日志系统较为复杂。


ext3文件系统中,又一个全局的journal,这个日志结构代表了ext3文件系统中所有的状态。例如当前的
事务(transaction)状况,磁盘上的日志区当前的状况等。

在ext3文件系统中,只有一个运行状态的transaction,这个事务连接到journal->j_running_transaction域中
在这个事务的存在时间段内,所有的进程对这个文件系统的更改的信息都要加入到这个事务中去,由这个事务
统一写到磁盘上去。

ext3文件系统中,每一个进程的进程结构current中都有一个域journal_info,存储的就是这个进程对文件系统
的更改。这种更改都使用一个handle_t结构进行表示。


这些结构的关系如下

task1
  jorunal_info--->handle-----------------|
					 |	
					 |
task2					 |
  journal_info--->hanlde-----------------|
					 |
……					 |
					 |
taskN					\|/
  journal_info--->handle----------------------->transaction------>journal




*****************************日志的磁盘结构**********************************
jbd的日志组织结构如下。

|<----superblock----->|<---------------------数据区-------------------------->|
|<--(1)-->|<---(2)--->|<---(1)--->|<--(4)-->|<--若干4-->|<--(5)-->|<--若干5-->|
|<-------(3)--------->|<------------descriptor--------->|

(1)journal_header_t
(2)super block中的一些数据,包括s_first,s_maxlen,s_start
(3)journal_superblock_s
(4)journal_block_tag_t
(5)meta data数据,也就是实际的数据。


其实ext3论文里的将日志区的数据分为三种,一个是header,一个是descriptor,一个是meta-data,
在实际的操作中,实际上前两个是不分的。他们和起来通常叫做descriptor。
如图所示,一个header后面跟随着若干的tag,这个tag其实就是论文中所指的的descriptor。
也就是保存源数据在原始磁盘的位置。这些tag和这个header就放在一个设备块中。这个设备块
后面跟随着若干的meta-data数据块,他们就是被更改过的元数据。具体的个数是由descriptor
块中的tag数目来决定的,最大不可能超过一个设备块所能包含的tag数目。一个tag对应一个meta-data
如果一个transaction包含的meta-data太多,不能用一个descriptor包含,那么系统就会生成一个
新的header + tag组成descriptor来进行映射。

每一个header的最前端都有一个magic数,这个数字就是用来描述一个descriptor的开始,但是如果有
数据块的最前面的数字恰好和这个magic相同怎么办。当检测到这个情况的时候,就要把这个数据块
最前面的一个work设置为0。并且在descriptor中进行标记。这样就解决了冲突问题。
*************************************************************************





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -