Kaz*_*ark 8 filesystems memory files
在操作系统控制表的上下文中,术语“文件表”是指作为文件系统一部分的数据结构,还是在主内存中的数据结构(在这种情况下,我假设它只会引用打开的文件) ? 我的教科书1说,
这些表提供有关文件的存在、它们在辅助存储器中的位置、它们的当前状态和其他属性的信息。文件管理系统可以维护和使用这些信息中的大部分(如果不是全部),在这种情况下,操作系统对文件知之甚少或一无所知。
另外,什么是文件管理系统?这是否意味着文件系统?
1 Stallings,操作系统,第7版,p。127
Arc*_*ege 26
如果没有进一步的上下文,就不清楚 Stalling 是在谈论内存中的 inode 表还是文件系统中的表。我把一本更早版本的书借给了某人,但再也没有归还;所以我无法自己查找上下文。
共有三种“文件表”,但这里讨论的一种通常称为“内存中 inode 表”;第二个通常称为“打开文件表”,每个进程都存在。这两个表都在内核内存中,程序无法访问。第三个“表”实际上是文件系统(磁盘上)内的两组表,第一组是磁盘上的 inode 表,第二组是数据块本身(注意:这个讨论涉及传统的 UNIX 文件系统管理,较新的系统可以有不同的组织)。inode 表中的条目具有对包含间接引用块或实际数据的数据块的引用序列。文件的钥匙文件系统上的是 inode,而不是数据块本身。当 Stalling 谈论磁盘上的“文件表”时,它通常是磁盘上表示文件的“较小”表,例如 FAT 系统中的 inode 表或块定义表。
就内存中的inode 表而言,inode 从文件系统加载,其st_nlink 值递增,然后系统的其余部分可以访问,当inode 数据写入磁盘时,st_ctime 更新。如果内存中不再需要该 inode,则 st_nlink 值将递减,并将表中的条目标记为空闲。每个进程都会从对内存中 inode 表中大约三五个条目的引用开始:stdin, stdout,的 inode stderr- 这些通常是设备文件 (tty) - 然后引用当前目录和根目录。一个 inode 只会在表中驻留一次,因此可能有多个对表中单个 inode 的引用。
每个进程都保留打开文件表,并包含对内存中 inode 表的引用以及指向缓冲区的指针和状态信息(如fseek(2)来自 的值和标志open(2)。文件描述符实际上是打开文件表的索引;但大多数人们在谈论“文件描述符”时指的是打开文件表中的条目。
当使用open(2)打开文件时,在打开的文件表中找到一个可用的条目,通过路径名确定文件引用的inode,将该inode加载到内存中的inode表中,如果尚未加载,则st_nlink计数增加并在文件描述符中引用 inode 条目,设置标志并分配缓冲区。关闭时,情况正好相反。
内核中的例程称为“文件管理系统”,“文件系统”是磁盘上的组织。如今,有许多“可插入”模块可以加载 ( modprobe(8)) 到磁盘上不同组织的文件管理系统中。例如,有ext2/ext3/ext4文件系统类型,每一种在内核的文件管理系统中都有不同的模块;ntfs、sbfs、nfs、vfat、jfs 等也是如此。
这比我最初打算的要冗长一些,所以我就到此为止。
| 归档时间: |
|
| 查看次数: |
14191 次 |
| 最近记录: |