read()/write()的生命旅程之三——第三章:write()
本章将介绍write()系统调用的过程。和第二章read()一样我们将从file_operations.write()开始。
1. write():从file operation到page cache
file_operations.write()的核心函数是generic_perform_write()。
大部分文件系统的file_operations.write()最后都会调用generic_perform-write()这个通用的函数。generic_perform-write()的实现方法体现了Linux文件系统write()的典型流程。
这个函数的流程如下图:
从上图可以看到以下几个要点:
- Write是一个一个Page Write的
- 大部分实质性的工作都是在aops.write_begin()和aops.write_end()里做的。
struct address_space_operations ext2_aops = {
........
.write_begin = ext2_write_begin,
.write_end = ext2_write_end,
}
- write_begin()之后page就ready了,用户的数据就可以copy到page中了。
write_begin()的作用主要是:找到(创建)page->找到(创建)bh->map buffer。流程如下图所示:
2. write():从page cache到writeback queue
用户的数据已经写到page cache中去了, 将page cache真正写到block device的过程比read()复杂,因为当中有writeback的机制。整个writeback机制将在下一章做详细介绍。这里只介绍page cache是怎样交给writeback queue的,这个过程就是在aops.write_end()里完成的。要写的page加到了writeback queue后将有writeback thread将其真正写到block device上。
下图是大部分aops.write_end()使用的典型函数generic_write_end()的流程,这个流程的调用层次比较深,大致可分为三个层次:generic_write_end() -> __block_commit_write() ->__mark_inode_dirty()。下面也是分三张图来说明他们的流程和作用。
2.1 顶层write_end的典型函数:generic_write_end()
2.2 generic_write_end()主要调用了__block_commit_write()
2.3 将dirty inode放到writeback queue的关键动作在__mark_inode_diry()里
read()/write()的生命旅程之三——第三章:write()相关推荐
- 生命旅程中何生命个体
佛家云:"苦海无边,回头是岸."放弃对功名利禄的追逐,你随遇而安得到的将会是宁静与淡泊:放弃对金钱无止的掠夺,你安常处顺得到的将会是安心与快乐:放弃掌声鲜花的陶醉幸福,你激流勇退得 ...
- Kaldi单步完美运行AIShell v1 S5之三:三音tri1,tri2,tri3,tri4,tri5
Kaldi单步完美运行AIShell v1 S5之三:三音tri1 2 3 4 5 致谢 机器配置 Kaldi下AIShell v1详细输出之三:三音triphone 第五部分:三音结果更新 第六部分 ...
- 基于全生命周期的主数据管理:MDM详解与实战学习03 第三章 主数据管理的关键技术
第三章 主数据管理的关键技术 3.1 数据标准 3.1.1 数据标准的分类 3.1.2 物资类数据标准 1.国际标准 2.国内标准 3.1.3 产品数据标准 3.1.4 财务数据标准 3.2 信息分类 ...
- 从“二分之一加二分之三等于三”说起………
从1/2+3/2=3说起---- 老师在课堂上无情的嘲弄了一个二分之一加二分之三等于三的同学,差把他说成民族败类了-- 对此,我感到不解,难道算错一道题就这么不可原谅吗? 还有,二分之一加二分之三等于 ...
- 高红梅:第三章 海明威社会身份的定位 第一节 文学梦与作家身份的认同
第三章 海明威社会身份的定位 海明威一生都在世界各地旅行,其足迹遍及欧洲.非洲.美洲和亚洲,有世界公民的美誉.正如学者卡洛斯·贝克(Baker ,Carlos)所言,"早在他五十五岁荣获诺 ...
- 试读angular源码第三章:初始化zone
直接看人话总结 前言 承接上一章 项目地址 文章地址 angular 版本:8.0.0-rc.4 欢迎看看我的类angular框架 文章列表 试读angular源码第一章:开场与platformBro ...
- “JavaScript patterns”中译本 - 《JavaScript 模式》第三章
第三章 直接量和构造函数 JavaScript中的直接量模式更加简洁.富有表现力,且在定义对象时不容易出错.本章将对直接量展开讨论,包括对象.数组和正则表达式直接量,以及为什么要使用等价的内置构造器函 ...
- ASP.NET自定义控件组件开发 第三章 为控件添加事件 后篇
第三章 为控件添加事件 后篇 前一篇文章只是简单的说了下事件,但是大家应该方法,在ASP.NET自定义控件中只是简单那么定义事件是行不 通.如果大家开发的是WinForm中的事件,之前的定义可能没有什 ...
- 第二、三章:信息系统项目管理基础与立项管理-章节真题
一.单选题 1.( )不是项目目标特性. A.多目标性 B.优先性 C.独特性 D.层次性 2.某公司的组织结构如下图所示,( )不属于该组织结构类型的缺点 A.部门之间横向联系较少,不利于沟通.技术 ...
- mysql 导入百万级数据 几种 java_Java 修行第034天--执行计划及其使用--Oracle数据导入导出--第三章MySQL使用...
执行计划中牢记几句话: -- 尽量避免是*代替所有列,编写查询语句时使用具体列名代替*,可以防止全表扫描 -- 尽可能少的使用like关键字进行模糊查询 -- 建立适当的索引可以提高查询效率 十三. ...
最新文章
- Redis设计与实现
- Swift - 访问通讯录联系人(使用系统提供的通讯录交互界面)
- vb6实现union数据结构_数据结构与算法——并查集(不相交集合)
- 引用变量和指针变量初探
- windows 下终止指定端口的进程
- oracle光标位置无效,解决在Form表单中光标移动不了问题
- 信号的采样与恢复matlab实验报告,实验七 连续信号的采样与恢复
- ios学习笔记——RunTime
- postgresql查看死锁及解决方法
- windows下解决弹窗广告
- 从财报看纳德拉上任两年:云服务是最大的突破
- uniapp开发FFmpeg安卓原生短视频插件支持裁剪、添加背景音乐、压缩视频、视频播放器、拍照、录屏
- 微麦投影仪android遥控器,投影仪遥控器如何使用 投影仪遥控器使用方法【详解】...
- ubuntu系统 有线网络无法通过网页认证上网
- HRBUST 1849 商品中心
- 异常检测---离群点
- iOS 使用HMAC
- Mac系统如何查看更新R版本
- 国内电子商务从业人员需要具备哪些知识?
- AudioPlayer-简易音频播放器