计算机操作系统教程_第三版_(张尧学_张高_史美林_著)_清华大学出版社_第9章

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

struct dinode { 文件模式; 与该 i节点联接的文件数; 用户标识; 文件大小; 存取权限; 同组用户标识; 该文件所用物理块的块号; 文件存取时间、修改时间和建立时间; }
其中,文件模式表示文件类型,而用户标识符以及 同组用户标识定义对该文件具有存取权的用户集合, 与该 i节点联接的文件数表示有多少个不同的文件 名指向该文件。另外,该文件所用的物理块号是一 个由 40 个字节组成的字符数组 di_addr[40],它 指明文件数据安放在逻辑盘上的位置。
在 UNIX System Ⅴ中磁盘 i节点的项占用64个字节。 因此,一个长 512个字节的块可存放 8 个 i节点项。 系统在对文件进行各种操作时,为了减少设备的启 动次数以及提高操作速度,总是把相应的磁盘 i节 点复制到内存的特定区域——内存 i节点表中。 内存 i节点结构 inode除了包含磁盘 i节点结构的各项 之外,还包含了当前打开文件的状态信息。例如, 内存 i节点的状态:包括该节点是否已被锁住,是 否有进程等待访问该 i节点等。 总之,与 filsys 用于空闲区的分配与回收不一样, i 节点主要用来存放文件的说明信息,以便进程利用 i节点中的逻辑结构和物理结构信息搜索查找文件 信息以及完成对文件信息的保护和共享。
struct filsys { 文件卷总块数; i 节点表块数; 空闲块栈区(小于或等于50); 空闲块栈指针; 空闲块栈互斥标志; 空闲块总数; 空闲 i节点数组指针; 空闲磁盘 i节点指针; 空闲 i节点数组互斥标志; 空闲 i节点总数; filsys 的修改标志,等; }
filsys 结构被用来进行文件空闲块和 i节点项的分配 与回收。
算法 ialloc 首先检查是否有其他进程在对磁盘i节点 数组进行操作。如果有其他进程正在对磁盘i节点 数组进行操作,则当前进程等待直到其他进程操作 结束。在没有其他进程对磁盘i节点数组进行操作 且磁盘i节点数组非空时,系统从i节点数组中分 配一个i节点给新创建的文件,然后,修改i节点 数组指针。紧接着,ialloc调用内存i节点分配算 法为新建立的文件分配内存i节点后将内存i节点 初始化。在对内存i节点进行了初始化之后,再将 内存i节点的内容写回到磁盘i节点中并修改磁盘 空闲i节点的计数。 有关 ialloc 算法,还有几个问题需要说明,首先是i 节点数组中的i节点号排列方法。系统从磁盘把i 节点按从小到大的顺序读进i节点数组,如图9.4:
图9.3 文件系统中主要数据结构之间的关系
在图9.3中,用户进程通过用户打开文件表中的文件 描述符fd,找到系统打开文件表的入口地址fp,再 由系统打开文件表中对应项找到相关 i节点的入口 指针,从而得到操作该文件所需的控制信息。有了 i节点中的控制信息,文件系统就可对磁盘数据区 中的文件进行所必需要的操作。另外,在图9.3中, 给出了两个不同用户进程共享同一文件的例子。这 两个进程通过各自不同的文件描述符fdA和fdB,找 到系统打开文件表中不同的对应项,并通过系统打 开文件表中的 i节点指针而找到同一个内存i节点, 从而完成文件共享。
文件系统由每块 512字节或 512字节的任意倍数所构 成的逻辑块序列组成。在同一个文件系统中,这些 逻辑块的大小完全相同。块长的选取将直接影响设 备与主存之间的数据传输速率和内存的存储能力。 大的块长将使得内存和设备之间的数据传输更加容 易,但反过来又使得内存页面长度增加,从而影响 内存的有效存储能力。在 UNIX 的许多版本中,大 都采用每块 512字节。 文件卷的结构如图9.2所示。其中第 0# 块是引导块 (boot block)。 引导块中装有引导或初启操作系统 的引导代码。
9.2.2 几种常用的数据结构 1.资源管理结构 filsys 超级块中存放的最重要的数据结构是资源管理结构 filsys。该结构中含有文件系统空闲块分配用堆栈 及 i节点分配用数据结构。在块设备作为文件卷安 装时,结构filsys 的内容被复制到内存专用区中, 以使得对空闲块和 i节点的分配与回收能在内存进 行。当文件卷被卸下或需要重新读入或写出有关堆 栈的内容时,则将内存中的 filsys 结构复制回超级 块中。 UNIX System Ⅴ 中的 filsys 结构如下:
9.2 文件系统的数据结构及其关系
9.2.1 文件系统的存储结构 UNIX系统把文件信息存储在磁盘或磁带上,不过, UNIX系统的磁盘文件组织也可以当作一个连续的 物理块构成的磁带——文件卷看待。在 UNIX 系统 中,一个物理存储器可包含一个或多个文件系统。 这些文件系统可以被动态装卸。为了简单起见,假 定在一个计算机系统中只存在一个文件系统。
9.1.2 文件的分类 UNIX文件可分为普通文件、目录文件和设备文件。 普通文件即存储用户和系统的有关数据和程序的文 件。它是无结构、无记录概念的字符流式文件。 目录文件则是由文件系统中的各个目录所形成的文 件。这种文件在形式上同普通文件一样,由系统将 其解释成目录。在UNIX系统中,一个目录文件由 多个目录项组成,而每个目录项则由文件名及指示 相应的文件说明信息表(i节点) 的标识符id组成。
第9章 文件和设备管理示例
9.1 文件系统的特点与文件类别 9.2 文件系统的数据结构及其关系 9.3 资源管理和地址映射 9.4 目录与搜索方法 9.5 文件系统的系统调用 9.6 UNIX System Ⅴ的中断和陷阱总控程序 9.7 缓冲区管理 9.8 块设备驱动 9.9 字符设备驱动 本章小结 习题
普通文件和目录文件都是无结构、无记录概念的字 符流式文件。文件系统以512 字节为一块,文件在 块内连续存放。对于普通文件和目录文件来说,文 件的存放方式既可以是顺序存取的,也可以是直接 存取的。UNIX文件在文件系统中的存放采用的是 索引结构方法,从而,对文件存储块的分配可以是 非连续的,且文件长度可以动态变化。 设备文件与普通文件和目录文件不同,它除了在目 录文件和文件说明信息表,也就是 i结点中占据相 应的位置之外,并不占有实际的物理存储块。因此, 对设备文件的读、写操作将实际上变为对设备的操 作,而对设备文件的保护也将变成对设备的保护。 例如: >cp /dev/tty terminalread 把在终端上敲进的字符(设备文件/dev/tty是用户终端) 读入,并把它们复制到文件 terminalread上。
3.目录项 UNIX系统的目录项由文件名和磁盘 i节点标识符id组 成。其中文件名长度占14个字节,标识符id占 2个 字节。从而,在一个 512字节的磁盘块中可以存放 32个目录项。
4.系统打开文件表和用户打开文件表 在UNIX系统中,文件系统主要描述程序和数据的静 的概念,而进程则反应这些程序和数据的动的特性。 进程怎样才能对文件发生作用呢?从用户的角度来 看,用户程序可使用对文件系统进行操作的系统调 用来完成。但是,从系统内部的角度来说,则需要 有相应的数据结构来记录和控制打开文件的用户进 程以及记录和控制那些共享同一文件的用户进程。 为此 UNIX系统设置了用户打开文件表和系统打开 文件表。 用户打开文件表一般放在 user 数据结构中。使用用 户打开文件表,一个进程可同时打开 20 个左右的 文件。可打开的文件表项 u_ofile中含有打开文件的 描述符fd,以及系统打开文件表的入口指针fp等。
· 文件数据可由文件拥有者设置相应的访问权限而受 到保护。 · 外部设备,例如终端用磁带、磁盘设备、键盘等都 被看作文件。从而,设备可通过文件系统隐蔽掉设 备特性。在文件系统中,设备文件占据着文件系统 目录结构中相应的位置,用户程序按与存取其他文 件时所使用的系统调用和语法来读、写设备文件。 因此,用户程序既没有必要知道设备的内部特性, 也不必在更换或增加设备之后修改自己。
9.1 文件系统的特点与文件类别
9.1.1 特点 本章通过 UNIX 的文件系统来进一步深入了解文件 系统与操作系统其他部分的关系以及文件系统的设 计方法。从用户的角度看,UNIX文件系统具有如 图9.1所示的树形层次结构: 在图9.1中,根目录root之下有dev设备子目录,bin实 用程序子目录,lib库文件子目录,etc 基本数据和 维护实用程序子目录,tmp临时文件子目录,usr通 用子目录和include 基本数据子目录等。而 UNIX 子目录则存放UNIX操作系统核心程序自身。这些 子目录又由各自的子目录构成。
系统打开文件表主要用来指明打开同一文件的不同 进程和不同进程所使用的不同打开路径,以及这些 不同进程和不同打开路径所对应的读写指针。因此 可以认为系统打开文件表是 i节点表的补充。系统 打开文件表的每一项包括文件标识、文件访问计数、 文件读写指针和文件内存 i节点入口指针和访问标 志等。其中文件标识与用户打开文件中fp相连;文 件访问计数指示共享该文件的进程数,当文件访问 计数为 0时,则表明已没有用户进程在使用该文件, 从而可以释放有关资源。文件读写指针则分别指出 各进程在同一文件中的读写位置。 资源管理结构、i节点以及用户打开文件表和系统打 开文件表的关系如图9.3所示:
从2#块开始到 K+1# 块为止的区域被用来存放文件说 明信息,也就是 BFD表。UNIX系统把一个文件的 说明信息称为 i节点或索引节点(inode list)。索引节 点表的大小由系统管理人员在进行系统配置时指定。 K+2# 以后的块称为数据块,其中存放文件数据,包 括目录文件数据。UNIX系统中文件系统的任一数 据块只能属于文件系统中某一个文件或空闲。
图9.2 文件系统存储结构 显然,在有多个文件系统的计算机系统中,只有一 个文件系统的引导块中装有引导代码,而其他的引 导块则是空的。 1#块是超级块(superblock)。超级块用来描述文件 系统的状态,例如文件系统的大小、有关空闲区分 配和回收用的堆栈等。有关超级块的结构将在后面 部分进一步介绍。
9.3 资源管理和地址映射
UNIX文件系统的资源管理包括空闲磁盘块的分配与 回收、 i节点和系统打开文件表的分配与回收等。 关于空闲磁盘块的分配与回收,UNIX系统采用成 组链法来管理空闲区。本节主要介绍磁盘i节点和 内存i节点以及系统打开文件表的分配和释放方法。
9.3.1 磁盘i节点的分配与释放 当一个新文件被建立时,在给该文件分配磁盘存储 区之前,应为该文件分配存放该文件说明信息的磁 盘i节点。反之,当从文件系统中删除某个文件时, 则要首先删除它的磁盘i节点项。UNIX System Ⅴ 中的算法 ialloc 被用来为新建立的文件分配磁盘i 节点项。文件系统包含一个i节点线性表,且每个 磁盘i节点被顺序编号。i节点线性表中存放这些 被编号的i节点的类型字段。如果一个i节点的类 型字段为0,则说明这个节点是空闲的。显然,当 一个进程需要一个新的i节点时,它可以通过搜索 i节点线性表得到它所要得到的i节点项。为改善 系统性能,UNIX System Ⅴ 在资源管理结构 filsys 中设置了一个磁盘i节点数组。该数组在系统初启 时随 filsys 结构一起被复制到内存的特定区中。
பைடு நூலகம்
图9.1 UNIX文件系统的层次结构例
文件系统被组织成树形结构之后,文件名由路径名 给出。路径名确定一个文件在文件系统中的位置。 一个完整的路径名由代表根目录的斜杠开始,到所 指定的文件为止。例如在图9.1中, “/usr/users/shi/b.exe”确定了文件 b.exe在文件系统 中的位置。另外,路径名也可从正在执行进程的当 前目录开始指定,例如,若在图9.1中的当前目录 是zhang 的话,路径名 a.exe与 /usr/users/zhang/a.exe具有相同的效果。 一般来说,UNIX文件系统还具有如下特点: · UNIX的文件是无结构的字符流式文件。 · 文件可以动态地增长或减少。
2. i节点 UNIX文件系统采用 SFD和 BFD方式管理文件。其中 SFD称为符号文件目录,存放文件名以及指示该文 件的文件说明信息表标识符id。由文件名和指示文 件说明信息表的标识符id称为目录,把存放文件说 明信息和相应标识符的 BFD称为 i节点。 i节点又 分为磁盘 i节点和内存活动 i节点。其中磁盘 i节点 以静态形式存放文件说明信息。磁盘 i节点 dinode 结构包括:
相关文档
最新文档