Answers:
目前尚不清楚,没有其他上下文可以确定Stalling是在谈论内存inode表还是文件系统中的表。我把一本书的较早版本借给了某人,但从未收回。所以我自己不能查找上下文。
这里有三个“文件表”,但是这里讨论的一个表通常被称为“ 内存中的inode表 ”。第二个通常称为“ 打开文件表 ”,每个进程都存在。这两个表都在内核内存中,程序无法访问。第三个“表”实际上是文件系统(在磁盘上)内的两组表,第一组是磁盘上的inode表,第二组是数据块本身(注意:此讨论涉及传统的UNIX文件系统管理,较新的系统可以有不同的组织)。inode表中的条目具有对数据块的引用序列,这些数据块包含间接引用块或实际数据。文件密钥文件系统上的文件是索引节点,而不是数据块本身。当Stalling谈论磁盘上的“文件表”时,通常是磁盘上的“较小”表,它表示文件,例如FAT系统中的inode表或块定义表。
根据内存中的inode表,inode是从文件系统中加载的,其st_nlink值会增加,然后可供系统的其余部分访问,当将inode数据写入磁盘时,st_ctime会更新。如果内存中不再需要该索引节点,则将减少st_nlink值,并将表中的条目标记为空闲。每一个进程将进入内存中的inode表约三个或五个条目的引用开始:的索引节点stdin
,stdout
,stderr
-这些往往是一个设备文件(TTY) -然后到当前目录和根目录引用。一个索引节点仅在表中驻留一次,因此表中可能有多个引用到单个索引节点。
打开文件表按进程保留,并包含对内存inode表的引用以及指向缓冲区的指针和状态信息(如fseek(2)
来自的值和标志)open(2)
。文件描述符实际上是打开文件表的索引;但是大多数人们在谈论“文件描述符”时会参考打开的文件表中的条目。
当使用open(2)
打开文件时,在打开的文件表中找到一个可用的条目,通过路径名确定文件引用的索引节点,索引节点已加载到内存索引节点表中,如果尚未加载,则st_nlink计数增加,并在文件描述符中引用inode条目,设置标志并分配缓冲区。当关闭时,发生相反的情况。
内核中的例程称为“ 文件管理系统 ”,“ 文件系统 ”是磁盘上的组织。如今,有许多“可插入”模块可以modprobe(8)
针对磁盘上的不同组织加载()到文件管理系统中。例如,存在ext2 / ext3 / ext4文件系统类型,并且每个文件系统在内核的文件管理系统中都有一个不同的模块。与ntfs,sbfs,nfs,vfat,jfs等相同。
这比我原本打算的要冗长一些,所以我在这里停止。