15. 访问文件 2010-02-28 22:55 129人阅读 评论(0) 收藏
2010-02-28 22:55
162 查看
访问文件较复杂,涉及VFS、块设备处理、磁盘高速缓存。有规范模式、同步模式、内存映射、直接I/O、异步。Read、write系统调用会最终调用相应的服务例程,在其中调用文件对象的read、write方法,确定数据的物理位置,激活驱动程序传输数据。普通文件以相邻扇区成组存放在磁盘上,因此很少移动磁头即可快速检索文件。预读技术会在实际请求前读普通文件几个相邻数据页。预读对随机访问的文件无用,它浪费了页高速缓存空间。如果请求的第一页紧随上次访问请求的末页,内核则将此次访问视作顺序访问。预读算法使用两个页面集,叫“当前窗”与“预读窗”。前者包含请求及预读到的页,后者包含正在预读的页。进程第一次访问一文件时,且第一次请求页偏移为0时,则假定要顺序访问,从第一页创建一个新的当前窗并初始化,顺序读则创建预读窗,随机则删掉预读窗。
写文件是把数据从用户态地址空间移到内核数据结构,再移至磁盘。
内存映射技术是将一个线性区与磁盘文件系统的普通文件关联。共享型指在线性区上写会改变磁盘上的文件;私有型是进程创建的映射只为读文件,试用写时会使内核停止映射。Mmap系统调用完成内存映射。内存映射的数据结构由inode对象其中的address_space对象、文件对象、页框的页描述符及address_space中的PST表示。PST用于从address_space回找文件对象。内存映射创建后,并未直接分页框,而是推迟到缺页异常,也可非线性地映射内存。
非常复杂的程序如高性能数据库服务器它更偏向于直接控制I/O传送机制,此时,内核提供的页高速缓存毫无意义,甚至有害。Linux提供了绕过页高速缓存的方法,直接I/O,在应用程序中按需要实现缓存。
版权声明:本文为博主原创文章,未经博主允许不得转载。
写文件是把数据从用户态地址空间移到内核数据结构,再移至磁盘。
内存映射技术是将一个线性区与磁盘文件系统的普通文件关联。共享型指在线性区上写会改变磁盘上的文件;私有型是进程创建的映射只为读文件,试用写时会使内核停止映射。Mmap系统调用完成内存映射。内存映射的数据结构由inode对象其中的address_space对象、文件对象、页框的页描述符及address_space中的PST表示。PST用于从address_space回找文件对象。内存映射创建后,并未直接分页框,而是推迟到缺页异常,也可非线性地映射内存。
非常复杂的程序如高性能数据库服务器它更偏向于直接控制I/O传送机制,此时,内核提供的页高速缓存毫无意义,甚至有害。Linux提供了绕过页高速缓存的方法,直接I/O,在应用程序中按需要实现缓存。
版权声明:本文为博主原创文章,未经博主允许不得转载。
相关文章推荐
- r cannot be resolved to a variable 问题解决 / r.java文件没有自动生成 分类: Android安装及配置 2014-06-22 18:03 141人阅读 评论(0) 收藏
- vxWorks下dosFs文件系统的创建 分类: vxWorks 2014-08-05 15:59 706人阅读 评论(1) 收藏
- 网络工作室暑假后第二次培训资料(SQLServer存储过程和ADO.NET访问存储过程)整理(一) 分类: ASP.NET MSSQLServer 2012-10-07 16:29 622人阅读 评论(0) 收藏
- #小练习 从多个文件中提取电话号码 分类: python 小练习 正则表达式 2013-05-28 15:40 442人阅读 评论(0) 收藏
- 制作jffs2文件系统 分类: 终端移植_文件系统 2013-07-10 14:36 261人阅读 评论(0) 收藏
- Android 代码混淆exception解决办法 分类: Android安装及配置 2014-12-18 21:38 129人阅读 评论(0) 收藏
- mpeg文件格式分析 分类: 生活百科 2014-06-19 14:25 426人阅读 评论(0) 收藏
- Android使用蓝牙与PC端进行通信 分类: Android 2015-07-30 09:45 15人阅读 评论(0) 收藏
- Hi3531用SPI FLASH启动 使用Nand做文件系统 分类: HI3531 2013-08-28 10:26 884人阅读 评论(0) 收藏
- #遍历E盘下的mp3文件 分类: python 小练习 python 2013-05-14 18:27 303人阅读 评论(0) 收藏
- windows下bat批处理文件语法 2015-07-27 11:25 8人阅读 评论(0) 收藏
- 详解python linecache模块读取文件的方法 分类: python Module 2014-07-21 18:32 1057人阅读 评论(0) 收藏
- 实战DeviceIoControl 之六:访问物理端口 分类: windows驱动程序WDM 2013-09-25 14:49 332人阅读 评论(0) 收藏
- debugfs恢复Ext3的文件系统中被rm、rm -f 掉的文件 分类: ubuntu 测试 2013-08-09 13:14 2514人阅读 评论(0) 收藏
- Linux的proc文件系统 分类: linux 2014-06-02 10:21 623人阅读 评论(0) 收藏
- 手工编译、运行JavaSE项目,且此项目需要第三方jar包支持,且文件中有打包。 分类: java 2010-03-27 10:37 1057人阅读 评论(0) 收藏
- file()拷贝文件 分类: python 2012-12-24 16:44 138人阅读 评论(0) 收藏
- makefile 文件 详解 (经典) 2011-05-09 21:38 582人阅读 评论(0) 收藏
- c# 将日志文件显示在WebBrowser控件中 分类: .NET 2012-12-18 16:03 781人阅读 评论(0) 收藏
- 使用C语言读取properties文件V1.0 分类: H_HISTORY 2013-02-26 12:37 946人阅读 评论(0) 收藏