清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 系统在为进程分配磁盘i节点时,按i节点序号从 小到大的原则分配。当空闲i节点数组为空时,系 统锁住i节点数组,并从低到高地一个一个将磁盘 上的索引节点号填入i节点数组中,直到i节点数 组满额或再也找不到空闲i节点。在i节点数组满 额的同时,系统记住它所找到的最高序号的i节点, 并称之为“铭记”i节点。铭记i节点是保存在i 节点数组中的最后一个i节点(最大),如果系统分 配到铭记i节点时,则启动ⅣO设备,从铭记i节 点开始,重新搜索磁盘上的空闲i节点,然后写进 i结点数组。这可以确保系统不浪费时间去读那些 已不含空闲i节点的磁盘块
系统在为进程分配磁盘i节点时,按i节点序号从 小到大的原则分配。当空闲i节点数组为空时,系 统锁住i节点数组,并从低到高地一个一个将磁盘 上的索引节点号填入i节点数组中,直到i节点数 组满额或再也找不到空闲i节点。在i节点数组满 额的同时,系统记住它所找到的最高序号的i节点, 并称之为“铭记”i节点。铭记i节点是保存在i 节点数组中的最后一个i节点(最大) ,如果系统分 配到铭记i节点时,则启动 I/O设备,从铭记i节 点开始,重新搜索磁盘上的空闲i节点,然后写进 i结点数组。这可以确保系统不浪费时间去读那些 已不含空闲i节点的磁盘块
清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 其次是在系统为新建立的文件分配磁盘i节点和内 存i节点之后,要检查所分配的i节点是否是真正 的空闲i节点。如果不是空闲i节点,则要放弃本 次分配。至于为什么会出现分配到已分配i节点的 情况,则主要是由于资源共享引起的。 综上所述,可将算法 ialloc描述如下:
其次是在系统为新建立的文件分配磁盘i节点和内 存i节点之后,要检查所分配的i节点是否是真正 的空闲i节点。如果不是空闲i节点,则要放弃本 次分配。至于为什么会出现分配到已分配i节点的 情况,则主要是由于资源共享引起的。 综上所述,可将算法 ialloc 描述如下:
清华大学出版 000000 ialloc:输入:文件系统设备号,文件属性,联接该文件的目录数 输出:上锁的磁盘i节点 begin if i结点数组上锁 then等待开锁 if i节点数组空 then锁住i结点数组 为搜索空闲i节点取铭记i节点 搜索磁盘;将空闲i节点置入i节点数组 为i结点数组解锁 从i节点数组中分配一i节点 调用iget分配内存i节点 ige返回的内存i节点为非空闲i节点 then把该i节点的内容写回磁盘;释放该i节点; 重新申请磁盘i节点 else将iget返回的内存i节点初始化 将内容写回磁盘i节点 空闲i节点数减1 f end
ialloc:输入:文件系统设备号,文件属性,联接该文件的目录数 输出:上锁的磁盘i节点 begin if i结点数组上锁 then等待开锁 fi if i节点数组空 then 锁住i结点数组 为搜索空闲i节点取铭记i节点 搜索磁盘;将空闲i节点置入i节点数组 为i结点数组解锁 fi 从i节点数组中分配一i节点 调用 iget 分配内存i节点 if iget返回的内存i节点为非空闲i节点 then 把该i节点的内容写回磁盘;释放该i节点; 重新申请磁盘i节点 else 将 iget 返回的内存i节点初始化 将内容写回磁盘i节点 空闲i节点数减1 fi end
清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 磁盘i节点的释放过程 ifree是 ialloc的反过程。但相 对来说,iree比较简单。iree首先把空闲i节点 数加1,如果超级块的i节点数组未被锁住且有空 表项,则iree把释放的i节点号放入i节点数组 后返回。如果i节点数组已处于满额状态,则 ifre将新释放的i节点与铭记i节点相比校。如果 新释放的i节点小于铭记i节点,则ifre将新释 放的i节点作为铭记i节点,并丢掉原来的铭记i 节点,否则丢掉新释放的i节点(为什么?)。如果 超级块i节点数组是被锁住的,则此时系统正在进 行磁盘i节点搜索工作。iree直接返回,以避免 竞争条件(有可能漏掉i节点)
磁盘i节点的释放过程 ifree是 ialloc 的反过程。但相 对来说,ifree 比较简单。ifree 首先把空闲i节点 数加1,如果超级块的i节点数组未被锁住且有空 表项,则 ifree把释放的i节点号放入i节点数组 后返回。如果i节点数组已处于满额状态,则 ifree将新释放的i节点与铭记i节点相比校。如果 新释放的i节点小于铭记i节点,则 ifree将新释 放的i节点作为铭记i节点,并丢掉原来的铭记i 节点,否则丢掉新释放的i节点(为什么?)。如果 超级块i节点数组是被锁住的,则此时系统正在进 行磁盘i节点搜索工作。ifree 直接返回,以避免 竞争条件(有可能漏掉i节点)
清华大学出版社 000000 TSINGHUA UNIVERSITY PRESS 932内存i节点的分配与释放 当系统打开文件并对其进行搜索、读写等操作时, 为相应的文件分配一个内存i节点,以便把对应磁 盘i节点信息复制到内存。一般来说,当系统创建 个文件之后,如果未关闭该文件的话,则该文件 已拥有了相应的内存i节点。此时,如果用户要对 该文件进行相应的操作的话,系统只需增加已有内 存i节点的访问计数和做互斥处理即可。 内存i节点的分配由过程iet完成,iget的输入是文 件系统所在的设备名和磁盘i节点号。输出是对应 的上了锁的内存i节点。 首先,iget根据给定的磁盘i节点号从内存i节点数 组中搜索相应的内存i节点
9.3.2 内存i节点的分配与释放 当系统打开文件并对其进行搜索、读写等操作时, 为相应的文件分配一个内存i节点,以便把对应磁 盘i节点信息复制到内存。一般来说,当系统创建 一个文件之后,如果未关闭该文件的话,则该文件 已拥有了相应的内存i节点。此时,如果用户要对 该文件进行相应的操作的话,系统只需增加已有内 存i节点的访问计数和做互斥处理即可。 内存i节点的分配由过程 iget 完成,iget的输入是文 件系统所在的设备名和磁盘i节点号。输出是对应 的上了锁的内存i节点。 首先,iget根据给定的磁盘i节点号从内存i节点数 组中搜索相应的内存i节点