UNIX系统文件基础

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

文件类型

在UNIX系统中, 文件分为三类: 即普通文件、目录文件和特殊文件.

1. 普通文件

也称正文文件,可以用来保存程序、数据等任何信息. 这是一种无结构的, 以512个字节为一块, 顺

序存取的流式文件.

2. 目录文件

用于检索文件的文件. 目录文件可能是系统文件, 也可能是用户文件.

3. 特殊文件

即设备. 在UNIX系统中将设备也作为文件来处理, 对于设备的所有操作都需要经过文件系统,

这有如下两个优点:

(1) 设备与文件界面统一:使用设备与使用文件没有差别. 具体地说, 打开一个设备文件相当于申请该

设备, 关闭一个设备文件相当于释放该设备, 读写设备文件相当于对设备进行I/O操作.

(2) 设备可采用与文件相同的保护机制:文件可以访问权限等手段加以保护, 设备作为文件处理也可如同文件一样得到保护. 如对于打印机设备可规定为只“写”型设备, 对其实行“读”操作将被视为非法而加以

拒绝.

将设备作为特殊文件管理是UNIX系统的成功特点之一,并被后来其它一些操作系统所借鉴.

12.5.2 文件体系

UNIX文件系统呈树形结构, 树的根结点为根目录root, 树的叶结点可以为普通文件、特殊文件、或者目录文件. 其它既非根结点也非叶结点的结点为目录文件. 如图12-8 所示.

图中虚线代表链接(link),通过链接可以给一个文件赋予多个符号名(路径名),这是共享文件的一种方

法.

12.5.3 文件结构

1. 文件的逻辑结构

UNIX普通文件的逻辑结构为流式的. 在用户看来, 一个文件是一个字节序列. 文件的读写操作命令包含传输字节的个数.这种结构实现简单, 系统开销小.当然, 如果需要, 用户可以利用流式文件来构造记录

式文件, 因为对于文件内容的解释权完全留给了用户.

2. 文件的物理结构

UNIX文件的物理结构为链接结构与索引结构的结合, 也可看成是多级索引结构.

其实现如图12-9所示.

12.5.4 文件目录与连接

1. 目录项

相当于FCB次部,包括两个内容: 即文件名和inode编号, 不同的文件名可能对应同一个inode编号, 这样便对应同一个FCB主部, 即一个文件可以有多个名字.

2. inode

相当于FCB主部, 包括文件主、共享说明、地址信息等, 称为inode, inode与文件具有一对一的关系. 在UNIX文件系统中, 有一个固定的区域, 用于保存所有文件的inode. 如图12-10 所示. 每个inode有一个

唯一的编号,称为i_number.

将FCB分为两部分的目的之一是实现文件的连接,所谓连接实际是使多个目录项与同一个inode建立联系,从而可以通过不同的路径名查找到同一个文件,即使一个文件有多个符号名称. 例如对于图12-11(a)所示的目录树,经过连接后文件f增加了路径名/usr/Xu/d2/g,如图12-11(b)所示.二者具有相同的

i_number(15),因而对应同一个inode.

12.5.5 文件系统映射

文件打开时,控制信息被移入内存相关表目中,并通过文件描述符建立与文件内容之间的联系.

图12-12给出了进程空间与u_ofile表、file表、inode表之间的连接关系,其中文件描述符4,6对应两个不同的文件,描述符10,2对应同一文件但不共享读写指针,描述符8,9对应同一文件且共享读写指针.

完整的file结构定义如下:

5507 struct file

5508 {

5509 char f_flag; /* FREAD=01, FWRITE=02, FPIPE=04 */ 5510 char f_count; /* reference count */ 5511 int f_inode; /* pointer to inode structure */

5512 char *f_offset; /* read/write character pointer */

5513 }

12.5.6 文件卷的安装

用一个文件卷的根目录取代文件的一个普通文件. 这样一个文件卷可以动态地联结到文件系统中, 也可以动态地由文件系统中卸下. 文件卷的组织形式如图12-13 所示. 其中块#0为引导块, 负责操作系统的装入; 块#1为特殊块, 记载磁盘块的分配状况; 由块#2到块#k+1为inode区域, 保存文件FCB主部, 其k 值在文件卷初始化时确定; 由块#k+2到块#n-1为一般块, 保存普通文件及目录文件的内容.

其中引导块只对系统根文件卷才是有意义的,它负责在系统启动时在磁盘上找到UNIX系统并将其装入内存. 超级块(super block)是一个文件卷中最重要的数据结构,它记录本卷上inode块和一般块的分配状

况,以及锁等标志信息

文件的变化(建立、撤销、写入等)一般都需要访问超级块以实现对inode块和一般块的管理. 文件卷卸下(unmount)时,若超级块在内存期间被修改,则需要写回外存. 实际上,这种回写每隔一段时间都需要执行一次,以防止意外,保证缓冲区内容与文件卷内容的一致性.

12.5.7 磁盘空间管理

UNIX空闲磁盘空间的管理采用了成组连接方式,它可看成是空闲块链与空闲块表的结合,涉及超级块(块号#1)中s_nfree,s_free[100]和s_flock三个数据结构. s_free可记录多达100个空闲块号以及一个由连接块构成的成组连接链之链头, 而每个连接块中登记有多达100个空闲块号以及一个指向下一个连接块的指针;s_nfree是当前超级块中所记录的空闲块的个数;s_flock是互斥操作空闲块数据结构的锁标志. 如图12

-14 所示.

相关文档
最新文档