文件系统目录

1.Linux 0.11 内核的文件系统采用了 1.0 版的 MINIX 文件系统,这是由于 Linux 是在 MINIX 系统上开发的,采用 MINIX 文件系统便于进行交叉编译,并且可以从 MINIX 中加载 Linux 分区
2.虽然使用的是MINIX 文件系统,但 Linux 对其处理方式与 MINIX 系统不同。主要的区别在于 MINIX 对文件系统采用单线程处理方式,而 Linux 则采用了多线程方式。由于采用了多线程处理方式, Linux 程序就必须处理多线程带来的竞争条件、死锁等问题,因此 Linux 文件系统代码要比 MINIX 系统的复杂得多。
3.为了避免竞争条件的发生, Linux 系统对资源分配进行了严格地检查,并且在内核模式下运行时,如果任务没有主动睡眠(调用 sleep() ),就不让内核切换任务。
4.包含 17 个 C 语言程序。这些程序之间的主要引用关系见图2-16 所示图中每个方框代表一个文件,从上到下按基本按引用关系放置。其中各文件名均略去了后缀 .c ,虚框中是的程序文件不属于文件系统,带箭头的线条表示引用关系,粗线条表示有相互引用关系。


5.四个部分:高速缓冲区管理、低层文件操作、文件数据访问和文件高层函数,对于文件系统,我们可以将它看成是内存高速缓冲区的扩展部分
6.所有对文件系统中数据的访问,都需要首先读取到高速缓冲区中
7.本目录中的程序主要用来管理高速缓冲区中缓冲块的使用分配和块设备上的文件系统。
8.管理高速缓冲区的程序是 buffer.c,其它程序则主要都是用于文件系统管理。
9.在 file_table.c 文件中,目前仅定义了一个文件句柄(描述符)结构数组
10.ioctl.c 文件将引用kernel/chr_drv/tty.c 中的函数,实现字符设备的 io 控制功能。
11.exec.c 程序主要包含一个执行程序函数do_execve() ,它是所有 exec() 函数簇中的主要函数。
12.fcntl.c 程序用于实现文件 i/o 控制的系统调用函数。
13.read_write.c 程序用于实现文件读 / 写和定位三个系统调用函数。
14.stat.c 程序中实现了两个获取文件状态的系统调用函数
15.open.c 程序主要包含实现修改文件属性和创建与关闭文件的系统调用函数。
16.char_dev.c 主要包含字符设备读写函数 rw_char() 。
17.pipe.c 程序中包含管道读写函数和创建管道的系统调用
18.file_dev.c 程序中包含基于 i 节点和描述符结构的文件读写函数
19.namei.c 程序主要包括文件系统中目录名和文件名的操作函数和系统调用函数。
20.block_dev.c 程序包含块数据读和写函数
21.inode.c 程序中包含针对文件系统 i 节点操作的函数。
22.truncate.c 程序用于在删除文件时释放文件所占用的设备数据空间。
23.bitmap.c 程序用于处理文件系统中 i 节点和逻辑数据块的位图。
24.super.c 程序中包含对文件系统超级块的处理函数。
25.buffer.c 程序主要用于对内存高速缓冲区进行处理。
26.虚框中的 ll_rw_block 是块设备的底层读函数,它并不在 fs 目录中,而是 kernel/blk_drv/ll_rw_block.c 中的块设备读写驱动函数。
27.放在这里只是让我们清楚的看到,文件系统对于块设备中数据的读写,都需要通过高速缓冲区与块设备的驱动程序( ll_rw_block() )来操作来进行,文件系统程序集本身并不直接与块设备的驱动程序打交道。