原标题:Linux完整性保护机制模块实现分析(1)

2 详细分析2.1 模块功能描述

文件系统完整性模块包含四种机制:监控磁盘机制、同步机制、检查修复文件系统机制、监视文件系统机制。

1.监控磁盘机制主要由statfs_by_dentry()、vfs_statfs()、user_statfs()、fd_statfs()、do_statfs_nativ()函数来支撑他们之间的关系,如下图:

图2-1:监控磁盘机制函数间调用图

图中sys_statfs()、sys_fstatfs()、sys_ustat()分别为监控磁盘机制的系统调用,它们调用函数的功能如下:

statfs_by_dentry:目录项在磁盘上的相关信息。

vfs_statfs():在虚拟文件系统的磁盘相关信息。

user_statfs():用户使用磁盘的相关信息。

fd_statfs():文件在磁盘上的相关信息。

do_statfs_native():获取磁盘的相关信息,并拷贝到用户态。

copy_to_user():将信息拷贝到指定的用户路径。

user_path_at():获得指定的用户路径。

user_path_put():释放指定的用户路径。

2.同步机制的主要支撑函数有:__sync_filesystem()、do_sync_work()、sync_one_sb()、sync_inode_sb()、writeback_inodes_sb()等。

图2-2:同步机制函数之间调用图

从图2-2可以看出无论是数据完整性同步还是刷出同步最后都要调用函数wb_writeback()来建立一个回写的工作。主要调用的函数功能如下:

emergency_sync():紧急同步,调用该函数后内存会立刻分配空间进行同步操作。

do_sync_work():进行了两次同步,以减少可能跳过的一些数据,因为有些数据可能被暂时锁定在inode/page中。

sys_sync():系统调用函数,完全同步即同步所有的数据,该操作会比较费时。

sync_filesystems():同步所有的数据和文件系统。

sync_one_sb():同步一个超级块并调用__sync_filesystem实现。

sys_syncfs():同步一个超级块。

sync_filesystem():写出并等待所有脏数据和对应的超级块,文件系统数据以及底层块设备并获得超级块锁。

__sync_filesystem():完成文件系统的同步工作,使文件系统的数据元素与磁盘上的文件系统同步。

sync_inode_sb():该函数回写并且等待对应超级块的所有脏inode。

writeback_inodes_sb():立即回写给定超级块对应的的脏inode,不进行等待操作。

writeback_inodes_sb_nr():回写给定超级块对应的脏inode。

wb_writeback():建立回写工作。

__writeback_single_inode():回写单个的inode。

write_inode():根据指定的inode地址进行回写操作。

3.文件系统监视机制在内核中的实现有:dnotify、inotify、fsnotify,它们都为用户提供了接口,但是具体的实现是由fsnotify框架来实现的,如图2-3所示:

图2-3:fsnotify的框架调用图

fsnotify_event():文件系统发生的具体的变化,比如文件的打开事件、读写事件、删除事件等等,在具体事件发生时创建该结构的实例。

fsnotify_mark():用户创建的文件系统监视,该结构实例是对文件或目录打做的一个标记,该文件或目录的某些变化将受到fsnotify机制的监视。监视实例以目录为组织单位管理,一个目录下的所有的文件监视实例的链表被嵌入该目录对应的索引节点结构中。

fsnotify_group():处理事件的策略,用户每创建一个对文件或目录的监视mark实例,必须指定一个fsnotify_group类型的实例group,在该文件发生用户关心的某些变化(即发生了某些event)时,将会调用fsnotify_group指定的事件处理函数进行处理。

责任编辑:

Linux保护文件实现,Linux完整性保护机制模块实现分析(1)相关推荐

  1. 在linux c 以结构体形式写文件 结构体参数如何在函数中传递,Linux安全审计机制模块实现分析(16)-核心文件之三auditsc.c文件描述及具体变量、函数定义...

    原标题:Linux安全审计机制模块实现分析(16)-核心文件之三auditsc.c文件描述及具体变量.函数定义 2.4.3文件三auditsc.c2.4.3.1 文件描述 kernel/auditsc ...

  2. linux源码acl,Linux自主访问控制机制模块详细分析之posix_acl.c核心代码注释与acl.c文件介绍...

    原标题:Linux自主访问控制机制模块详细分析之posix_acl.c核心代码注释与acl.c文件介绍 2.4.4.6 核心代码注释 1 posix_acl_permission() int(stru ...

  3. linux注册函数机制,Linux可信计算机制模块详细分析之函数实现机制(1)字符设备驱动...

    原标题:Linux可信计算机制模块详细分析之函数实现机制(1)字符设备驱动 2.3 函数实现机制 2.3.1 Linux 字符设备驱动 在linux 3.5.4中,用结构体cdev描述字符设备,cde ...

  4. Linux内核文件vmlinux 和压缩后的bzImage文件格式分析

    Linux内核文件vmlinux 和压缩后的bzImage文件格式分析 ================= 1. 需要使用的命令 ================ readelf    -- 显示el ...

  5. linux日志文件优缺点,Linux日志文件总结

    Linux日志文件总结 近期做笔试题目,考察Linux日志配置文件相关内容,由于对此不了解,故看鸟哥的私房菜中的认识与分析日志文件一章,总结如下相关信息. 日志文件可以记录一个时间的何时.何地.何人. ...

  6. Linux找头文件规则,linux 头文件、库文件查找顺序

    linux 头文件.库文件查找顺序 默认分类 2009-11-14 01:24:28 阅读126 评论0 字号:大中小 linux 头文件.库文件查找顺序 2009-11-03 12:36 Inclu ...

  7. Linux 执行文件 path,linux可执行文件添加到PATH环境变量的方法

    linux命令行下面执行某个命令的时候,首先保证该命令是否存在,若存在,但输入命令的时候若仍提示:command not found 这个时候就的查看PATH环境变量的设置了,当前命令是否存在于PAT ...

  8. linux 音频文件长度,Linux下压缩音频文件

    安装工具 sudo apt-get install lame 具体用法可以查看帮助  lame --help 通过更改音频文件的帧数 可以让文件变小  但是音质也会随之下降 现在比较多的mp3文件是1 ...

  9. linux读文件整个过程,linux下文件资料传输实现全过程

    linux下文件资料传输实现全过程 (8页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 17.90 积分 实用标准文案/***************** ...

最新文章

  1. (Mybatis)日志工厂
  2. ef 排序string转int_Java排序算法——基数排序(Radix Sort)
  3. poj1673 EXOCENTER OF A TRIANGLE
  4. java清屏_【图片】请问java编写中如何做到清屏啊。。。_java吧_百度贴吧
  5. zabbix3监控ESXI主机
  6. 2020年,.NET Core起飞在即,最强日志分析ELK还不会?
  7. 【luogu 1024 一元三次方程求解】二分思想
  8. android 触摸屏(TP)问题现象分析和解决方法
  9. 【android开发】:android真机测试
  10. java生成json字符串,真香
  11. linux git 撤销删除文件,git 撤销回滚学习
  12. 数据元和元数据的区别
  13. 反激电源基本原理和简单的使用例程 学习笔记
  14. 三本计算机专业考研211,一个三本学渣逆袭211的考研心得
  15. 类对象初始化和Initializer_list的
  16. 虹科PCAN在工程机械中的应用
  17. 猜单词游戏更新啦 (0.88.2及1.88.3)
  18. ArcMap导入数据到ArcSDE报000597或者000224的错误
  19. 打破思维断层之KMP分析
  20. virtualbox虚拟机怎么识别U盘

热门文章

  1. 看故事学Redis:再不懂,我怀疑你是假个开发
  2. 一篇文章看清楚JDK13的特性!
  3. 【Python3网络爬虫开发实战】1.2.1-Requests的安装
  4. c语言方阵的转置程序,C程序查找矩阵的转置
  5. SpringBoot与Redis缓存
  6. HBase数据模型和读写原理
  7. 红橙Darren视频笔记 ViewGroup事件分发分析 基于API27
  8. LeetCode-654. 最大二叉树
  9. 手把手教你架构3d游戏引擎pdf_游戏开发中的算法
  10. 【算法导论33】跳跃表(Skip list)原理与java实现