问题 问答题

在UNIX操作系统中,试问:
(1)有哪几种类型的文件
(2)试描述“关闭文件close”系统调用的实现过程。
(3)若盘块为1KB,每块可放256个地址,如何将下列文件的字节偏移量转换为物理地址:9000;1 8000;420000

答案

参考答案:(1)在UNIX操作系统中,有下 * * 种类型的文件:
1)目录文件。目录文件是文件系统中树形结构的分支节点,它可以包含普通文件和次一级目录文件。目录文件也同普通文件一样存储在外存的文件系统存储区中。
2)普通文件。普通文件是指系统程序或用户程序以及可执行的目标程序等。在详细列出文件内容时,在行首用“~”符号表示是普通文件。普通文件按拥有的信息量大小,又可分为小型文件、中型文件、大型文件和巨型文件四种。
3)特别文件。特别文件是与硬件有关的文件。在UNIX中每个I/O设备都被看成是一个特别文件,为了检索和处理方便,系统把所有I/O设备都放在/dev/lp目录文件中,例如打印机是一个特别文件,可以写成/devtip。特别文件不包含信息,它们是操作系统标准I/O设备的通道,是用户与硬件设备连接的桥梁。当用户将数据写到文件“/dev/lp”中时,操作系统核心截取了这些数据,并把它们输出到打印机上打印出来。对用户来说,对特别文件的操作与对普通文件的操作是一样的,用户不需要启动设备驱动程序,有关硬件设备的操作均由操作系统完成。在目录表中,特别文件在行首用字母“b”表示。
(2)当用户不再使用一个已打开的文件时,应调用close过程将该文件关闭,即断开用户程序与该文件之间已建立的通路。在UNIX系统中,由于允许一个文件被多个进程所共享,故只有在没有进程需要此文件时,即文件索引节点中的引用计数减1后为0时,才能真正关闭该文件。其语法格式如下:int close(fd); int fd;
其中,fd是文件打开操作返回的文件描述符。
在执行close过程时,核心首先根据用户文件描述符M从相应的用户文件描述符表中获得指向文件表项的指针,再对该文件表项的引用计数做减1操作。close的处理过程如下:
1)若其结果值不为0,表示仍有其他进程在使用该文件表项,不能回收该文件表项。此时,仅将所在的用户文件描述符表项置为空。
2)若其结果值为0,表示无用户使用该文件表项,核心便可将对应的文件表项置为空,并进一步对其内存索引节点的引用计数做减1操作。若结果不为0,表明仍有进程在访问该文件,故不能回收其内存索引节点。
3)仅当内存索引节点的引用计数为0时,才能回收该内存索引节点,即将指定文件关闭。
(3)UNIX系统的文件逻辑结构采用流式文件。根据逻辑文件的字节偏移量可计算出该字节所在的物理块号。计算过程分两步:第一步,将逻辑文件的字节偏移量转换为文件的逻辑块号和块内偏移量。其转换方法是:将逻辑文件的字节偏移量除盘块大小的字节数,所得的商即为文件的逻辑块号,余数就是块内偏移量。第二步,将文件的逻辑块号转换为物理块号。其转换方法是:使用多重索引结构,在索引节点中根据逻辑块号通过直接索引或间接索引找到相应的物理块号。因为
L1=INT(9000,1024)=8 B1=MOD(9000,1024)=808
L2=INT(1 8000,1024)=17 B1=MOD(18000,1024)=592
L3=INT(420000,1024)=410 B1=MOD(420000,1024)=160
所以,当文件的字节偏移量为9000时,其逻辑块号为8,只需在该文件的索引节点中直接索引(I-addr[7])即可找到相应的物理块号。当文件的字节偏移量为18000时,其逻辑块号为17,只需在该文件的索引节点中通过一次间接索引(I-addr[10])即可找到逻辑块号相应的物理块号。当文件的字节偏移量为420000时,其逻辑块号为410,需要在该文件的索引节点中通过(I-addr[11])二次间接索引找到逻辑块号对应的物理块号。

选择题
单项选择题