文件和设备管理示例(PPT 64张)

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

9.1.2 UNBiblioteka X文件的分类按照文件的内容,UNIX把文件分成3类:


普通文件:这是通常意义下的磁盘文件,即存放用户和系 统的有关数据和程序的那些文件。它们都被视为无结构、 无记录概念的字符流,文件的长度可以动态增减。 目录文件:由文件的目录项组成的文件称为目录文件。这 种文件在形式上与普通文件相同,只是系统将其解释成目 录。一般地,一个文件的目录项应该包含文件名称、文件 长度、文件类型、文件在辅存的位置以及存取权限等信息。 在UNIX中,为了加快对文件目录的搜索速度,便于文件共 享,把这些内容划分成两个部分:一个称为该文件的索引 节点(即文件控制块),简称为i节点,它的里面存放着这 个文件的长度、文件类型、文件在辅存的位置、存取权限 以及共享信息等内容;另一个仍称为文件目录项,但它的 里面只包含文件名和这个文件的索引节点编号。
12
9.3 资源管理和地址映射

资源管理的任务:

空闲磁盘块的分配 i节点的分配 系统打开文件表的分配 空闲磁盘块的回收 i节点的回收 系统打开文件表的回收
13
空闲磁盘块的管理

UNIX 对文件存储空间的管理在磁盘上, UNIX 总是把 文件安排在一般数据存储区。因此,UNIX对文件存储 空间的管理,即是对磁盘上一般数据存储区的管理。 前面第7章介绍使用“空闲块链”管理磁盘上的空闲块 时,曾提及“成组链接”法,并说UNIX操作系统就是 采用这种方法来管理磁盘上的空闲块的。这种方法是 将若干个(如 100) 空闲盘块划归为一个组,将每组在 中的所有盘块号存放在其前一组的第一个空闲盘块中, 而仅把第一组中的所有空闲块号放入超级块( filsys结 构)中。 下面简单介绍它的实现过程。
4
下图给出了 UNIX 文件目录项的格式,即用 14 个字 节存放文件名,2个字节存放该文件的i节点号 ( id )。不难看出,在 UNIX 中,是由文件名查文 件目录,由文件目录得到该文件的 i 节点编号,由 这个编号得到文件的 i 节点,从而得到该文件的有 关信息。 文件名 i 节点编号id
5
15
16


UNIX 把磁盘上一般数据存储区中的所有空闲块依 次分组。为了下面讲述方便,对每一组的块都进行 分别编号。具体的办法是:第 1 组为 99 块,编号为 1~99 (为什么第 1 组只有 99 块,后面会给出解释)。 从第2组起,每组都是100块,剩下的块归并成为最 后一组。它们都按0~99的顺序进行编号。在图中, 从右至左反映了这种分组的结构。在图中,假定最 后一组中只有52个空闲块,各块的编号为0~51。 分好组以后,总是在后一组的第0块中开辟101个位 置,依次存放前一组的总块数以及前一组中每一块 的地址。也就是说,相当于总是在后一组中,开辟 s_nfree 和 s_free[100] 所需要的位置,用于存放前一 组的分组信息。
17

在此,有两组的情况要做特殊处理。一 个是第 1 组。在第 1 组中,实际只有 99 个 空闲块。为了管理的需要,把它的总块 数 仍 记 为 100 , 见 图 中 第 2 组 里 的 s_nfree=100 。另外,第一组磁盘块编号 是从 1 开始的,因此在相当于第 0 号磁盘 块的位置存放一个0,而不是某一个磁盘 块的地址,见图中第 2 组中的 s_free[0]=0 。
文件和设备管理示例
1
9.1 UNIX文件系统的特点 与文件类别
9.1.1 UNIX操作系统的特点
P227
UNIX采用树型目录结构。UNIX中一个文
件的绝对路径名由斜杠“/”开头,随后是路径 中所经过的所有目录名,中间用斜杠分隔而 成,比如:/usr/bin/spell。由于UNIX允许用户 设置“当前目录”,因此,从当前目录开始 的文件路径名,是它的相对路径名。 2
9.2.1 UNIX文件系统的存储结构

UNIX中,无论是普通文件还是目录文件,都存储在磁盘上。 另外,每个文件的i节点也存储在磁盘上。下面讲述这些信息 在磁盘上如何分布,UINX怎样来对它们实行管理。 为了使整个文件系统易于扩充和更改,UNIX把文件系统分成 基本文件系统和可装卸的子文件系统 ( 文件卷 ) 两个部分。基 本文件系统和子文件系统都有自己独立的目录结构,但是基 本文件系统是整个 UNIX 文件系统的基础,是文件系统的 “根”,它总是被固定在作为根存储设备的磁盘上。子文件 系统是指存储在可装卸存储介质(如软盘)上的文件系统, 因此,子文件系统具有可装卸的特性。当把它安装到基本文 件系统上时,自身的独立性消失,与基本文件系统融为一体。 比如,用户可以把自己的文件系统组织在软盘上成为子文件 系统。 7
18


另一个要特殊处理的是最后一组。因为在最后 一组的后面已经没有下一组了,所以 UNIX 就 把它的所有信息存放在管理块的filsys中,即存 放在 filsys 的 s_nfree 和 s_free[100] 中。由于现在 最后一组只有 52 个空闲块,因此在 filsys 中的 s_nfree 取值为 52 ,并且只用到数组 s_free[100] 的前 52 个元素,即用 s_free[0] 到 s_free[51] 存放 最后一组的52个空闲块的地址。 至此,成组链接的格局已经完成:在 filsys 的 s_free[ ]中,记录了当前直接可以分配的52个空 闲块。在这 52 个空闲块的第 0 块中,记录了下 一组100个空闲的磁盘块地址,下一组100个空 闲的第0块中,记录了再下一组100个空闲的磁 盘块地址,如此等等。
14


在磁盘管理区filsys结构中,有两个内容涉及到磁盘 空闲块的管理,一个是由数组 s_free[100] 构成的一 个空闲磁盘块索引表。当一个文件要申请磁盘块时, 就到这个索引表中去获得需要的空闲块;当一个磁 盘块被释放时,就把它还回到这个索引表中。所以, 这个索引表中记录的是当前系统可以直接分配的空 闲磁盘块。另一个是s_nfree,它记录了s_free[ ]中现 有的可分配的空闲磁盘块数。 从形式上看,利用数组s_free[100]直接管理100个空 闲的磁盘块,与利用数组 s_inode[100] 直接管理 100 个空闲的i节点相类似,但实际上相差很远。因为除 这 100个直接管理的空闲块外, UNIX对其余的空闲 块并没有放置不管,而是将它们分组进行链接。具 体做法如下图所示。
10
9.2.2 几种常用的数据结构


资源管理结构 filsys: 用来进行文件空闲块和i节点项 的分配与回收 , 包含文件系统空闲块分配用堆栈及 i 节点分配用数据结构。原理见P229 i 节点(索引节点) : 存放文件说明信息和相应标识 符的BFD.包括:磁盘 i节点(dinode, 以静态形式存 放文件说明信息)、内存活动 i节点(inode, 为减少 设备启动次数、提高文件的操作速度而把磁盘i节复 制到内存的特定区域)。每个文件都应有一个唯一 的磁盘索引节点,文件被打开后,还应有内存索引 节点。
9

块0用来存放引导程序,它与文件管理关系不大。 文件存储器全部资源的管理信息(即 filsys 表)存 放在块1,它是磁盘的管理区。从第2块—K+1块, 存放磁盘上文件的i节点内容,这个区域称为索引 节点表(区)。索引节点表的后面是一般数据存 储区,在那里存放普通文件和目录文件的信息。 显然,在磁盘上,一般数据存储区所占用的磁盘 空间为最大。下面对管理区中的资源管理信息表 filsys、索引节点区中的i节点以及文件的目录分别 加以介绍。
11
文件名
i 节点编号id


目录项: 由文件名和磁盘i节点标识符id组成。 系统打开文件表、用户打开文件表: 记录和控制打 开文件的用户进程以及记录和控制那些共享同一 文件的用户进程。其中:

用户打开文件表:存放打开文件的描述符fd; 系统打开文件表:记录打开同一文件的不同进 程和不 同进程所使用的不同打开路径,及其对应的读写指针。
19


在采用“成组链接”法后,如何分配空闲块, 如何回收空闲块?下面来讨论这两个问题。无 论是磁盘空闲块的分配还是回收,都是在filsys 中的空闲磁盘块索引表s_free[ ]中进行,并把它 视为一个栈。分配时,做出栈操作;回收时, 做进栈操作。 s_nfree中记录的值,是s_free[ ]中当前实际有的 空闲块数,正好也是空闲磁盘块索引表s_free[ ] 中下一个可以使用的索引表目的下标。
8

UNIX把文件的存储空间——磁盘想象成是一个由连续物理块 构成的文件卷(把每个磁盘或磁带看作是一个文件卷),每 个物理块含512个字节。在一个磁盘上,存放着普通文件的信 息,存放着目录文件的信息,存放着文件的i节点,还要存放 对磁盘存储区的管理信息(比如哪些块是空闲的,哪些块是 已分配的等等)。整个磁盘存储区的组织结构如下图示。

设备文件:在 UNIX 中,把块存储设备(如 磁盘)和字符设备(如键盘、打印机)都视 为文件。不过它们只有文件目录和索引节点, 并不占用实际的物理存储块,因此,有时也 称它们为特殊文件。为了检查和处理方便, UNIX总是把所有的特殊文件放在名为“dev” 的目录文件中。
6
9.2 文件系统的数据结构及其关系
20

因此,总是先在 s_nfree 上做减 1 操作,然后把 s_free[s_nfree]中记录的磁盘块分配出去。这里 要注意的是,如果在 s_nfree 上做减 1 操作后, 其值等于0了,那么就是要把s_free[0]所指向的 那一个磁盘空闲块分配出去。由于它是这一组 的第 0 个磁盘块(按照分配顺序,它总是在一 组中最后被分配出去),里面包含有它前一组 空闲块的信息在内。因此在把这一块分配出去 之 前 , 应 该 先 把 它 记 录 的 101 个 信 息 拷 贝 到 filsys 结构的 s_nfree 和 s_free[ ] 里面去,然后才 能将它分配出去。 21
22

进行空闲块的回收时,就是将该块的地址登记在空 闲 磁 盘 块 索 引 表 的 s_free[s_nfree] 表 目 中 , 然 后 让 s_nfree加1。不过要注意,在把释放块的地址存入索 引表s_free[ ]的表之前,必须检查s_nfree的取值。如 果发现s_nfree等于100,那么表明这时空闲磁盘块索 引表在此之前已经收集满了100个空闲的磁盘块,它 们应该形成一个新的链组。现在要释放的一块,是 下 一 组 空 闲 块 的 第 0 块 。 于 是 , 就 把 filsys 中 的 s_nfree 和 s_free[0]~s_free[99] 共 101 个值存入新释放 块 中 , 然 后 将 此 块 的 地 址 填 入 s_free[0] 中 , 将 23 s_nfree置为1。

分配时还要注意的一个问题是如果分配一直进行, 现在要把第2组的第0块分配出去。根据前面所说, 先把这块中记录的101个信息拷贝到filsys结构的 s_nfree和 s_free[ ]里面去,然后才将它分配出去。 这意味着系统现在只有最后99块能够分配了。如 果分配仍然继续,直到把这99块全部分配出去。 此时,filsys中的s_nfree=1,s_free[0]=0。若再申 请空闲块, s_nfree减 1后成为 0 ,即要把 s_free[0] 所指的块分配出去。此时发现s_free[0]=0,而不 是一个磁盘块的地址,表明所有的磁盘空闲块都 分配出去了,提出请求的进程只能阻塞等待。所 以,这就是前面分组时把第1组只分99个空闲块, 但仍然算这组有100个块,并将第0块指针处安放 一个0的原因。
图9.1是它的一个典型示例,其中,根目录下有8个 子目录: /dev— 此目录下都是设备文件,比如键盘终端 (con)、打印机(lp)等; /bin— 此目录下是 UNIX 外壳( shell )中主要 程序的二进制代码文件; /usr— 此目录下通常为已安装的各个子文件系 统,如bin、tmp、lib、local、include以及用户 的各种文件; /lib— 此目录下存放的是一些库文件,比如 C 、 PASCAL的函数库; /include— 此目录下存放的是一些头文件; /etc— 此目录下存放各种管理文件; /tmp—此目录下存放临时性文件; /UNIX—存放UNIX的核心程序。 3
相关文档
最新文档