正在加载图片...
空闲盘块号放入超级块的空闲盘块号表中。 (3)空闲盘块的分配与回收 ①空闲盘块的分配:当核心要从文件系统中分配一个盘块时,首先检查超级块空闲盘块表 是否已上锁,若已上锁则进程睡眠等待:否则将超级块的空闲盘块表中下一个可用盘块分配出 去。如果所分配的盘块号是超级块中的最后一个可用盘块号,由于在该盘块中存放了下一组的 所有盘块号,于是核心在给超级块中的空闲盘块号表上锁后,先将该盘块中的内容读入超级块 空闲盘块号表中;然后才将该盘块分配出去:最后将空闲盘块号表解锁,并唤醒所有等待其解 锁的进程 ②空闲盘块的回收 在回收空闲盘块时,如果超级块中的空闲盘块号表未满,可直接将回收盘块的编号放入空 闲盘块号表中。若空闲盘块号表己满,须先将空闲盘块号表中的所有盘块号复制到新回收的盘 块中,再将新回收盘块的编号放到超级块空闲盘块号表中,此块号就成了表中惟一的盘块号 2.文件的物理结构 在UNIX系统中,文件的数据存储在离散的磁盘块中,这些文件的盘块号直接或间接便可以 用直接或间接的寻址方式获得指定文件的盘块号 (1)寻址方式 ①直接寻址方式:UNIX系统中的作业以中小型为主,为了提高对文件的检索速度,宜采 用直接寻址方式。为此,在索引节点中建立了10个地址项,每个地址项中直接存放了该文件所 在的盘块号,如图8.21所示。假定一个盘块的大小为1KB,当文件长度不大于10KB时,可直接 从索引节点中得到该文件所在的全部盘块号 ②一次间接寻址方式:在UNIX系统中,可能有少数文件的长度达到了几万字节、几兆字 节、甚至更长。这时,如果采用直接寻址方式,则要在索引节点中设置几百个或更多的地址项, 这显然是不现实的。因此,UNIX系统中又提供了一次间接寻址方式。即在一次间接地址项中 存放的不再是文件的一个物理盘块号,而是先将1256个盘块号存放在一个磁盘块中,再将该 磁盘块的块号存放在这一地址项中。这里,一个盘块为1KB,一个盘块号占32位,用一次间接 地址项便可将寻址范围由10KB扩大到266KB ③多次间接寻址方式:为了进一步扩大寻址范围,又引入了二次间接和三次间接寻址方 式。二次间接寻址可将寻址范围扩大到64MB。三次间接寻址可将寻址范围扩大到16GB (2)地址转换 UNIX系统利用地址转换过程bmap将文件的字节偏移量换为文件的物理块号。这一转换 过程分两步实现∷:第一步,将字节偏移量转换为文件逻辑块号及块内偏移量;第二步,把逻辑块 号转换为文件的物理块号 3.用户文件描述符表和文件表 (1)用户文件描述符表 为了方便用户和简化系统的处理过程,在 UNIX System V中,每个进程的U区中设置了一张 用户文件描述符表。仅在用户第一次打开指定文件时,才须给出其路径名。核心先对打开请求 做仔细的检查后,便在该进程的用户文件描述符表中分配一空表工页,取该表项在用户文件描 述符表中的位移量作为文件描述符返回给用户。以后,当用户再访问该文件时,只需提供该文 件的描述符,系统根据描述符便可找到相应文件的内存索引节点。 (2)文件表 系统为了对文件进行读/写,设置了一个确定读/写位置偏移量的读/写指针。该读/写指针 应放在何处呢?是否可放在用户文件描述符表中呢?我们对此做个简单的分析。用户在读/写文 件时,可采用三种方式:多个用户读/写各自的文件:多个用户共享一个文件,但彼此独立地对 文件进行读/写:多个用户共享一个文件,且共享一个读/写指针。这样,若将读/写指针设置在空闲盘块号放入超级块的空闲盘块号表中。 (3)空闲盘块的分配与回收 ①空闲盘块的分配:当核心要从文件系统中分配一个盘块时,首先检查超级块空闲盘块表 是否已上锁,若已上锁则进程睡眠等待:否则将超级块的空闲盘块表中下一个可用盘块分配出 去。如果所分配的盘块号是超级块中的最后一个可用盘块号,由于在该盘块中存放了下一组的 所有盘块号,于是核心在给超级块中的空闲盘块号表上锁后,先将该盘块中的内容读入超级块 空闲盘块号表中;然后才将该盘块分配出去:最后将空闲盘块号表解锁,并唤醒所有等待其解 锁的进程。 ②空闲盘块的回收 在回收空闲盘块时,如果超级块中的空闲盘块号表未满,可直接将回收盘块的编号放入空 闲盘块号表中。若空闲盘块号表己满,须先将空闲盘块号表中的所有盘块号复制到新回收的盘 块中,再将新回收盘块的编号放到超级块空闲盘块号表中,此块号就成了表中惟一的盘块号。 2.文件的物理结构 在 UNIX 系统中,文件的数据存储在离散的磁盘块中,这些文件的盘块号直接或间接便可以 用直接或间接的寻址方式获得指定文件的盘块号。 (1)寻址方式 ①直接寻址方式:UNIX 系统中的作业以中小型为主,为了提高对文件的检索速度,宜采 用直接寻址方式。为此,在索引节点中建立了 10 个地址项,每个地址项中直接存放了该文件所 在的盘块号,如图 8.21 所示。假定一个盘块的大小为 1KB,当文件长度不大于 10KB 时,可直接 从索引节点中得到该文件所在的全部盘块号。 ②一次间接寻址方式:在 UNIX 系统中,可能有少数文件的长度达到了几万字节、几兆字 节、甚至更长。这时,如果采用直接寻址方式,则要在索引节点中设置几百个或更多的地址项, 这显然是不现实的。因此,UNIX 系统中又提供了一次间接寻址方式。即在一次间接地址项中 存放的不再是文件的一个物理盘块号,而是先将 1~256 个盘块号存放在一个磁盘块中,再将该 磁盘块的块号存放在这一地址项中。这里,一个盘块为 1KB,一个盘块号占 32 位,用一次间接 地址项便可将寻址范围由 lOKB 扩大到 266KB。 ③多次间接寻址方式:为了进一步扩大寻址范围,又引入了二次间接和三次间接寻址方 式。二次间接寻址可将寻址范围扩大到 64MB。三次间接寻址可将寻址范围扩大到 16GB。 (2)地址转换 UNIX 系统利用地址转换过程 bmap 将文件的字节偏移量换为文件的物理块号。这一转换 过程分两步实现:第一步,将字节偏移量转换为文件逻辑块号及块内偏移量;第二步,把逻辑块 号转换为文件的物理块号。 3.用户文件描述符表和文件表 (1)用户文件描述符表 为了方便用户和简化系统的处理过程,在 UNIX System V 中,每个进程的 U 区中设置了一张 用户文件描述符表。仅在用户第一次打开指定文件时,才须给出其路径名。核心先对打开请求 做仔细的检查后,便在该进程的用户文件描述符表中分配一空表工页,取该表项在用户文件描 述符表中的位移量作为文件描述符返回给用户。以后,当用户再访问该文件时,只需提供该文 件的描述符,系统根据描述符便可找到相应文件的内存索引节点。 (2)文件表 系统为了对文件进行读/写,设置了一个确定读/写位置偏移量的读/写指针。该读/写指针 应放在何处呢?是否可放在用户文件描述符表中呢?我们对此做个简单的分析。用户在读/写文 件时,可采用三种方式:多个用户读/写各自的文件;多个用户共享一个文件,但彼此独立地对 文件进行读/写:多个用户共享一个文件,且共享一个读/写指针。这样,若将读/写指针设置在
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有