清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 在图93中,用户进程通过用户打开文件表中的文件 描述符fd,找到系统打开文件表的入口地址印p,再 由系统打开文件表中对应项找到相关点的入口 指针,从而得到操作该文件所需的控制信息。有了 i节点中的控制信息,文件系统就可对磁盘数据区 中的文件进行所必需要的操作。另外,在图9.3中, 给出了两个不同用户进程共享同一文件的例子。这 两个进程通过各自不同的文件描述符f和fdB,找 到系统打开文件表中不同的对应项,并通过系统打 开文件表中的节点指针而找到同一个内存点, 从而完成文件共享
在图9.3中,用户进程通过用户打开文件表中的文件 描述符fd,找到系统打开文件表的入口地址fp,再 由系统打开文件表中对应项找到相关 i节点的入口 指针,从而得到操作该文件所需的控制信息。有了 i节点中的控制信息,文件系统就可对磁盘数据区 中的文件进行所必需要的操作。另外,在图9.3中, 给出了两个不同用户进程共享同一文件的例子。这 两个进程通过各自不同的文件描述符fdA和fdB,找 到系统打开文件表中不同的对应项,并通过系统打 开文件表中的 i节点指针而找到同一个内存i节点, 从而完成文件共享
清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 93资源管理和地址映射 UNIX文件系统的资源管理包括空闲磁盘块的分配与 回收、i点和系统打开文件表的分配与回收等。 关于空闲磁盘块的分配与回收,UNIX系统采用成 组链法来管理空闲区。本节主要介绍磁盘i节点和 内存i节点以及系统打开文件表的分配和释放方法
9.3 资源管理和地址映射 UNIX文件系统的资源管理包括空闲磁盘块的分配与 回收、 i节点和系统打开文件表的分配与回收等。 关于空闲磁盘块的分配与回收,UNIX系统采用成 组链法来管理空闲区。本节主要介绍磁盘i节点和 内存i节点以及系统打开文件表的分配和释放方法
931磁益1节点的分配与释放"E 000000 当一个新文件被建立时,在给该文件分配磁盘存储 区之前,应为该文件分配存放该文件说明信息的磁 盘i节点。反之,当从文件系统中删除某个文件时 则要首先删除它的磁盘i节点项。 UNIX System V 中的算法 ialloc被用来为新建立的文件分配磁盘i 节点项。文件系统包含一个i节点线性表,且每个 磁盘i节点被顺序编号。i节点线性表中存放这些 被编号的i节点的类型字段。如果一个i节点的类 型字段为0,则说明这个节点是空闲的。显然,当 个进程需要一个新的i节点时,它可以通过搜索 i节点线性表得到它所要得到的i节点项。为改善 系统性能,UNⅨ K System V在资源管理结构 filsys 中设置了一个磁盘i节点数组。该数组在系统初启 时随 filsys结构一起被复制到内存的特定区中
9.3.1 磁盘i节点的分配与释放 当一个新文件被建立时,在给该文件分配磁盘存储 区之前,应为该文件分配存放该文件说明信息的磁 盘i节点。反之,当从文件系统中删除某个文件时, 则要首先删除它的磁盘i节点项。UNIX System Ⅴ 中的算法 ialloc 被用来为新建立的文件分配磁盘i 节点项。文件系统包含一个i节点线性表,且每个 磁盘i节点被顺序编号。i节点线性表中存放这些 被编号的i节点的类型字段。如果一个i节点的类 型字段为0,则说明这个节点是空闲的。显然,当 一个进程需要一个新的i节点时,它可以通过搜索 i节点线性表得到它所要得到的i节点项。为改善 系统性能,UNIX System Ⅴ 在资源管理结构filsys 中设置了一个磁盘i节点数组。该数组在系统初启 时随 filsys 结构一起被复制到内存的特定区中
清华大学出版社 000000 TSINGHUA UNIVERSITY PRES. 算法 ialloc首先检查是否有其他进程在对磁盘i节点 数组进行操作。如果有其他进程正在对磁盘i节点 数组进行操作,则当前进程等待直到其他进程操作 结束。在没有其他进程对磁盘i节点数组进行操作 且磁盘i节点数组非空时,系统从i节点数组中分 配一个i节点给新创建的文件,然后,修改i节点 数组指针。紧接着, ialloc调用内存i节点分配算 法为新建立的文件分配内存i节点后将内存i节点 初始化。在对内存i节点进行了初始化之后,再将 内存i节点的内容写回到磁盘i节点中并修改磁盘 空闲i节点的计数。 有关 ialloc算法,还有几个问题需要说明,首先是i 节点数组中的i节点号排列方法。系统从磁盘把i 节点按从小到大的顺序读进点数组,如图94
算法 ialloc 首先检查是否有其他进程在对磁盘i节点 数组进行操作。如果有其他进程正在对磁盘i节点 数组进行操作,则当前进程等待直到其他进程操作 结束。在没有其他进程对磁盘i节点数组进行操作 且磁盘i节点数组非空时,系统从i节点数组中分 配一个i节点给新创建的文件,然后,修改i节点 数组指针。紧接着,ialloc调用内存i节点分配算 法为新建立的文件分配内存i节点后将内存i节点 初始化。在对内存i节点进行了初始化之后,再将 内存i节点的内容写回到磁盘i节点中并修改磁盘 空闲i节点的计数。 有关 ialloc 算法,还有几个问题需要说明,首先是i 节点数组中的i节点号排列方法。系统从磁盘把i 节点按从小到大的顺序读进i节点数组,如图9.4:
清华大学出版社 TSINGHUA UNIVERSITY PRESS 空间i节点 空 564137 20212223 数组下标 图94空闲节点数组
图9.4 空闲节点数组