如何实现一个文件系统(六)

来源:互联网 发布:centos php5.6 lamp 编辑:程序博客网 时间:2024/05/01 00:57

[1][1] 请参见  OPERATION SYSTEMS INTERNALS AND DESIGN PRINCIPLES 一书第12章

[2][2] 扇区是磁盘的最小寻址单元,而文件块是内核操作文件的最小单位,一个块可以包含一个或数个扇区。这些磁盘块被读入内存后即刻被存入缓冲中,同样,文件块被写出也要通过缓冲。

[3][3] 如果文件按记录形式组织,那么数据在成为文件块前,还要经过记录形式的阶段。

[4][4] 摘自 Linux 内核开发 中第 11 章中文件系统抽象层一节

[5][5] 请看Linux 内核开发 一书第11章

[6][6] 在2.6内核以后,缓冲头的作用并不象以前那么重要了。因为2.6中缓冲头仅仅作为内核中的I/O操作单元,而在2.6以前缓冲头不但是磁盘块到物理内存的映射,而且还是所有块I/O操作的容器。

[7][7] 这里安装的文件系统属于非根文件系统的安装方法。根文件系统安装方法有所区别,请查看相关资料。

[8][8] 无论读文件或写文件,文件中的数据都是必须经过内存中的页高速缓存做中间存储才能够被使用。高速缓存由一个叫做address_space的特殊数据结构表示,其中含有对页高速缓存宿主(address_space->host)的操作表。

[9][9] 这期间要要处理一些预读,以此提高未来访问的速度。

[10][10]  缓冲与相应的块一一对应,它的作用相当于磁盘块在内存中的表示。

[11][11] tq_disk是专门负责磁盘请求的任务队列,任务队列是用来推后异步执行的一种机制。2.6内核中已经用工作队列代替了任务队列。

[12][12]  块设备驱动程序可以划分为两部分:低级驱动程序(blk_dev_struct)和高级设备驱动(block_device)。低级设备驱动程序作用是记录每个高级驱动程序送来的请求组成的队列。

[13][13]文件读取操作必须同步进行,在读取的数据返回前,工作无法继续进行。而且如果结果在30秒内回不来,则用户必将无法忍受,所以读操作执行紧迫。而对于写操作,则可以异步执行,因为写入操作一般不会影响下一步的执行,所以紧迫性也低。

[14][14]bdflush和kupdate 分别是当空闲内存过低时释放脏页和当脏缓冲区在内存中存在时间过长时刷新磁盘的。而在2.6内核中,这两个函数的功能已经被pdflush统一完成。
原创粉丝点击