操作系统ch6.4文件系统其他功能解析

上传人:我** 文档编号:116970934 上传时间:2019-11-17 格式:PPT 页数:71 大小:402.50KB
返回 下载 相关 举报
操作系统ch6.4文件系统其他功能解析_第1页
第1页 / 共71页
操作系统ch6.4文件系统其他功能解析_第2页
第2页 / 共71页
操作系统ch6.4文件系统其他功能解析_第3页
第3页 / 共71页
操作系统ch6.4文件系统其他功能解析_第4页
第4页 / 共71页
操作系统ch6.4文件系统其他功能解析_第5页
第5页 / 共71页
点击查看更多>>
资源描述

《操作系统ch6.4文件系统其他功能解析》由会员分享,可在线阅读,更多相关《操作系统ch6.4文件系统其他功能解析(71页珍藏版)》请在金锄头文库上搜索。

1、6.4文件系统其他功能的实现 6.4.1 文件系统调用的实现 6.4.2 UNIX文件系统调用 6.4.3 文件卷的安装和使用 6.4.4 文件共享 6.4.5 层次式文件系统模型 6.4.6 辅存空间管理 6.4.7 内存映射文件 6.4.8 虚拟文件系统 6.4.1 文件操作的实现 文件系统提供给用户程序的一 组系统调用,包括:建立、打 开、关闭、撤销、读、写和控 制,通过这些系统调用用户能 获得文件系统的各种服务。 建立文件(1) 用户把信息作为一个文件存放到 存储设备上时,使用建立操作向 系统提出建立一个文件的要求。 用户使用建立系统调用时, 通常应提供以下参数: 建立文件(2) 建立

2、系统调用的主要工作 根据设备类(号)在相应设备上建立一 个文件目录,返回用户文件标识; 将文件名及属性等数据填入文件目录; 调用辅存空间管理程序,为文件分配第 一个物理块; 需要时发出装卷信息(如磁带); 在活动文件表中登记该文件有关信息, 文件定位,卷标处理; 打开文件(1) 使用已建立的文件前,通过打开 文件操作建立文件和用户间的联 系 打开文件可使用显式、可使用隐式 用户打开文件时需要给出文件名和 设备类(号) 打开文件(2) 打开系统调用的主要工作 在活动文件表中申请空项,存放该文件 的文件目录信息; 根据文件名查找目录文件,找到的文件 目录信息复制到活动文件表占用栏; 若打开的是共享

3、文件,应有相应处理, 共享文件用户数加; 文件定位,卷标处理; 读写文件(1) 文件打开后,可用读写系统 调用访问文件,应给出参数: 文件名、主存缓冲地址、读写 的字节个数等。 读写文件(2) 读写系统调用的主要工作 按文件名从活动文件表中找到该文件 的目录: 按存取控制说明检查访问合法性; 根据文件目录指出的该文件的逻辑和 物理组织方式将逻辑记录号或字符个 数转换成物理块号; 向设备管理发I/O请求,完成数据传 输操作。 关闭文件 文件使用完毕应关闭,以便让别的使用者 用此文件。此操作的主要工作: 将活动文件表中该文件的当前使用用户 减;若此值为,则撤销此表目; 若活动文件表目内容已被改过,

4、应先将表 目内容写回文件存储器上相应表目中,以 使文件目录保持最新状态; 卷定位工作。 撤销文件 一个文件不再需要时,可向系统提 出撤销文件,系统的主要工作是: 若文件没有关闭,先做关闭工作; 若为共享文件,应进行联访处理; 在目录文件中删去相应目录项; 释放文件占用的文件存储空间。 6.4.2UNIX文件系统调用 UNIX文件系统调用主要包括 :打开和关闭,文件创建和删 除,文件连接和解除连接,文 件读和写,以及文件随机访问 。 UNIX文件系统数据结构及 存储器上的组织安排(1) UNIX文件系统数据结构及 存储器上的组织安排(2) 专用块 包括:i节点表所占盘块数、文件 卷盘块数、内存中

5、登记的空闲盘块 数(最多100)、内存中登记的空闲 块的物理块号、内存中登记的空闲 i节点数(最多100)、内存中登记的 空闲i节点编号,及其他管理信息 。 UNIX文件系统数据结构及 存储器上的组织安排(3) 专用块 既有盘位示图的功能,又记录了整 个文件卷的控制数据。每当一个块 设备作为文件卷被安装时,该设备 的专用块就要复制到内存专用块中 备用,而拆卸文件卷时,修改过的 专用块需复制回设备的专用块中。 UNIX文件系统数据结构及 存储器上的组织安排(4) i节点表 存放UNIX文件控制块信息, 又分外存文件i节点表和内存 活动i节点表,后者解决了频 繁访问i节点表的效率问题。 UNIX文

6、件系统数据结构及 存储器上的组织安排(5) 用户打开文件表 进程user结构中数组u-ofile15为 用户打开文件表。登记序号为文 件描述符fd,每项登记了系统打 开文件表的入口指针fp。通过此 系统打开文件表项连接到打开文 件的活动i节点。 UNIX文件系统数据结构及 存储器上的组织安排(6) 系统打开文件表 为解决多用户共享文件、父 子进程共享文件而设置的数 据结构,内存开辟了最多可 登记100项的系统打开文件表 区域。 UNIX文件系统数据结构及 存储器上的组织安排(7) 文件卷安装表 反映文件卷动态地在根文 件设备上装卸情况的数据 结构。 UNIX文件系统调用 (1) (1)文件的创

7、建 系统调用C语言格式为: int fd, mode; char *filenamep; fd = creat (filenamep, mode); UNIX文件系统调用 (2) 文件创建执行过程(1) 为新文件分配索引节点和活动索引 节点,并把索引节点编号与文件分 量名组成新目录项,记到目录中。 在新文件所对应的活动索引节点中 置初值,包括置存取权限i_mode, 连接计数i_nlink等。 UNIX文件系统调用 (3) 文件创建执行过程(2) 分配用户打开文件表项和系统打 开文件表项,置表项初值。包括在 f_flag中置“写”标志,读写位移 f_offset清“0”。把各表项及文件 对应的

8、活动索引节点用指针连接起 来,把文件描述字返回给调用者。 UNIX文件系统调用 (4) (2) 文件的删除 删除把指定文件从所在的目录文 件中除去。如果没有连接用户 (i_link 为“1”),还要把文件占 用的存储空间释放。删除系统调 用形式为:unlink (filenamep)。在 执行删除时,必须要求用户对该 文件具有“写”操作权。 UNIX文件系统调用 (5) (3)文件的打开(1) 调用方式为: int fd, mode; char * filenamep; fd = open (filenamep, mode); UNIX文件系统调用 (6) 文件打开执行过程(2) 检索目录,把

9、它的外存索引节点 复制到活动索引节点表。 根据参数mode核对权限,如果 非法,则这次打开失败。 UNIX文件系统调用 (7) 文件打开执行过程(3) 当“打开”合法时,为文件分配 用户打开文件表项和系统打开文 件表项,并为表项设置初值。通 过指针建立这些表项与活动索引 节点间的联系。把文件描述字, 即用户打开文件表中相应文件表 项的序号返回给调用者。 UNIX文件系统调用 (8) (4)文件的关闭(1) 调用方式为: int fd; close (fd); UNIX文件系统调用 (10) 文件的关闭(2) 根据fd找到用户打开文件表项,继而 找到系统打开文件表项。释放用户打 开文件表项。 把

10、对应的系统打开文件表项中的 f_count减“1”,如果不为“0”,说 明还有进程共享这一表项,不用释放 表项直接返回;否则释放这个表项, 并找到与之连接的活动索引节点。 UNIX文件系统调用 (11) 文件的关闭(3) 把活动索引节点中的i_count减 “1”,若不为“0”,表明还有 用户进程正在使用该文件,不用 释放该而直接返回,否则在把该 活动索引节点中的内容复制回文 件卷上的相应索引节点中后,释 放该活动索引节点。 UNIX文件系统调用 (12) (5)读文件(1) 调用的形式为: int nr, fd, count; char buf nr = read (fd, buf, cou

11、nt); UNIX文件系统调用 (13) 读文件(2) 系统根据f_flag中的信息,检查读 操作合法性,再根据当前位移量 f_offset值,要求读出的字节数, 及活动索引节点中i_addr指出的文 件物理块存放地址,把相应的物 理块读到缓冲区中,然后再送到 bufp指向的用户内存区中。 UNIX文件系统调用 (14) 读文件(3) UNIX文件系统调用 (15) (6)写文件 调用的形式为: nw = write (fd, buf, count); buf是信息传送的源地址,即 把buf所指向的用户内存区中 的信息,写入到文件中。 UNIX文件系统调用 (16) (7)文件的随机存取(1)

12、 系统调用的形式为: long lseek; long offset; int whence, fd; lseek (fd, offset, whence); UNIX文件系统调用 (17) 文件的随机存取(2) 文件描述字fd必须指向一个用读 或写方式打开的文件,当whence 是“0”时,则f_offset被置为 offset,当whence是“1”时,则 f_offset被置为文件当前位置加 上offset。 6.4.3文件卷的安装和使用(1) 文件系统结构 基本 文件系统 子文件 系统1 子文件 系统2 子文件 系统n 文件卷的安装和使用(2) 文件卷的动态安装 文件卷的动态安装过程

13、文件卷的拆卸 6.4.4文件共享 1文件的静态共享 2文件的动态共享 3文件的符号链接共享 1文件的静态共享(1) 系统调用形式为: chat * oldnamep, * newnamep; link (oldnamep, newnamep); 文件的静态共享(2) 检索目录找到oldnamep所指向文件 的索引节点inode编号。 再次检索目录找到newnamep所指 文件的父目录文件,并把已存在文 件的索引节点inode编号与别名构成 一个目录项,记入到该目录中去。 把已存在文件索引节点inode的连接 计数i_nlink加“1”。 文件的静态共享(3) 链接实际上是共享已存在文件的索 引

14、节点inode,完成链接的系统调用 : link(“/usr/fei1/myfile.c”,”/usr/fei2/myfile.c”); link(“/usr/fei1/myfile.c”,”/usr/include/testfile.c”); 执行后,三个路径名指的是同一个 文件:/usr/fei1/myfile.c, /usr/fei2/myfile.c, /usr/include/testfile.c。 文件的静态共享(4) tty00 devbinlibetcusr tty01 shdate cc who passwd UNIX fei1 myfile.c gettyinclude f

15、ei2 testfile.c 文件的静态共享(5) 文件解除链接调用形式为: unlink (namep) 解除链接与文件删除执行的是同一 系统调用代码。删除文件是从文件 主角度讲的,解除文件连接是从共 享文件的其他用户角度讲的。都要 删去目录项,把i_nlink减“1”,不 过,只有当i_nlink减为“0”时,才 真正删除文件。 2文件的动态共享(1) 文件动态共享是系统中不同的用户 进程或同一用户的不同进程并发地 访问同一文件。 这种共享关系只有当用户进程存在 时才可能出现,一旦用户的进程消 亡,其共享关系也就自动消失。 文件的动态共享(2) UNIX文件的每次读写由一个读/ 写位移指针

16、指出要读写的位置。 现在的问题是:若文件可以为多 个进程所共享,那么,应让多个 进程共用同一个读/写位移,还是 各个进程具有各自的读写位移呢 ? 文件的动态共享(3) 同一用户父、子进程协同完成任务,使 用同一读/写位移,同步地对文件进行 操作。 该位移指针宜放在相应文件的活动索引 节点中。当用系统调用fork建立子进程 时,父进程的user结构被复制到子进程 的user结构中,使两个进程的打开文件 表指向同一活动的索引节点,达到共享 同一位移指针的目的。 文件的动态共享(4) 文件的动态共享(5) 两个以上用户共享文件,每个希望独立 地读、写文件,这时不能只设置一个读 写位移指针,须为每个用户进程分别设 置一个读、写位移指针。 位移指针应放在每个进程用户打开文件 表的表目中。这样,当一个进程读、写 文件

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号