qqwx

导航

15. 访问文件 2010-02-28 22:55 129人阅读 评论(0) 收藏

        访问文件较复杂,涉及VFS、块设备处理、磁盘高速缓存。有规范模式、同步模式、内存映射、直接I/O、异步。Readwrite系统调用会最终调用相应的服务例程,在其中调用文件对象的readwrite方法,确定数据的物理位置,激活驱动程序传输数据。普通文件以相邻扇区成组存放在磁盘上,因此很少移动磁头即可快速检索文件。预读技术会在实际请求前读普通文件几个相邻数据页。预读对随机访问的文件无用,它浪费了页高速缓存空间。如果请求的第一页紧随上次访问请求的末页,内核则将此次访问视作顺序访问。预读算法使用两个页面集,叫“当前窗”与“预读窗”。前者包含请求及预读到的页,后者包含正在预读的页。进程第一次访问一文件时,且第一次请求页偏移为0时,则假定要顺序访问,从第一页创建一个新的当前窗并初始化,顺序读则创建预读窗,随机则删掉预读窗。

       写文件是把数据从用户态地址空间移到内核数据结构,再移至磁盘。

       内存映射技术是将一个线性区与磁盘文件系统的普通文件关联。共享型指在线性区上写会改变磁盘上的文件;私有型是进程创建的映射只为读文件,试用写时会使内核停止映射。Mmap系统调用完成内存映射。内存映射的数据结构由inode对象其中的address_space对象、文件对象、页框的页描述符及address_space中的PST表示。PST用于从address_space回找文件对象。内存映射创建后,并未直接分页框,而是推迟到缺页异常,也可非线性地映射内存。

       非常复杂的程序如高性能数据库服务器它更偏向于直接控制I/O传送机制,此时,内核提供的页高速缓存毫无意义,甚至有害。Linux提供了绕过页高速缓存的方法,直接I/O,在应用程序中按需要实现缓存。

版权声明:本文为博主原创文章,未经博主允许不得转载。

posted on 2010-02-28 22:55  qqwx  阅读(158)  评论(0编辑  收藏  举报