Linux之文件读写过程
来源:互联网 发布:mac 搜不到wifi 编辑:程序博客网 时间:2024/06/10 17:41
转载:http://www.cnblogs.com/huxiao-tee/p/4657851.html
读文件流程
- 进程调用库函数向内核发起读文件请求;
- 内核通过检查进程的文件描述符定位到虚拟文件系统的已打开文件列表表项;
- 调用该文件可用的系统调用函数read();
- read()函数通过文件表项链接到目录项模块,根据传入的文件路径,在目录项模块中检索,找到该文件的inode;
- 在inode中,通过文件内容偏移量计算出要读取的页;
- 通过inode找到文件对应的address_space;
- 在address_space中访问该文件的页缓存树,查找对应的页缓存结点:
(1)如果页缓存命中,那么直接返回文件内容;
(2)如果页缓存缺失,那么产生一个页缺失异常,创建一个页缓存页,同时通过inode找到文件该页的磁盘地址,读取相应的页填充该缓存页;重新进行第6步查找页缓存;
写文件流程
前5步和读文件一致,在address_space中查询对应页的页缓存是否存在:
- 如果页缓存命中,直接把文件内容修改更新在页缓存的页中。写文件就结束了。这时候文件修改位于页缓存,并没有写回到磁盘文件中去;
- 如果页缓存缺失,那么产生一个页缺失异常,创建一个页缓存页,同时通过inode找到文件该页的磁盘地址,读取相应的页填充该缓存页。此时缓存页命中,进行第6步。
- 一个页缓存中的页如果被修改,那么会被标记成脏页。脏页需要写回到磁盘中的文件块。有两种方式可以把脏页写回磁盘:
(1)手动调用sync()或者fsync()系统调用把脏页写回
(2)pdflush进程会定时把脏页写回到磁盘
同时注意,脏页不能被置换出内存,如果脏页正在被写回,那么会被设置写回标记,这时候该页就被上锁,其他写请求被阻塞直到锁释放。
阅读全文
0 0
- Linux之文件读写过程
- linux学习之读写文件
- Hadoop之HDFS文件读写过程
- Linux文件系统之文件的读写
- Linux文件系统之文件的读写
- Linux文件系统之文件的读写
- Linux文件系统之文件的读写
- Linux文件系统之文件的读写
- Linux文件系统之文件的读写
- Linux基础之文件读写流程
- HDFS文件读写过程
- hadoop文件读写过程
- HDFS读写文件的过程
- linux 文件读写
- linux文件读写浅析
- linux文件读写浅析
- Linux内核读写文件
- Linux内核读写文件
- 学习微信小程序(二)
- web开发调试设置本地静态服务器
- JavaScript图片旋转缩放、像素矩阵获取
- MyBatis总结(1)
- 《一个小时,学会黑客技能》——以前BiliBili上面的那个视频中的那个网站,我终于又找到了
- Linux之文件读写过程
- python __setitem__()方法理解
- js 在字符串中引入变量
- 第四天(Mysql数据库)
- P1040 加分二叉树(区间DP)
- 51nod 1500 苹果曼和树【树形DP】
- 用Nodejs的赶快把命令式编程的思维过度到函数式,看过太多坑代码了。
- 中文编码
- How to install Mediatek MT7630E wireless LAN driver in Linux Mint/Ubuntu