操作系统角度分析文件的操作

文件系统基础

文件目录: 统一管理每个文件的元数据,以支持文件名到文件物理地址的转换 ;将所有文件的管理信息组织在一起,即构成文件目录。文件目录通常以文件的形式存放在磁盘上,当文件很多时,文件目录可能要占用大量的盘块,在查找的过程中,先将存放目录文件的第一个盘块中的目录调入内存,然后把用户所给定的文件名和目录项中的文件名逐一对比。若未找到指定文件,则再将下一个盘块中的目录项调入内存。在检索目录文件时,只用到了文件名,仅当找到一个目录项(即其中的文件名与指定要查找的文件名相匹配)时,才需要从该目录项中读出该文件的物理地址,而其他一些对该文件进行描述的信息,在检索目录时一概不用,显然,这些信息在检索目录时不需要调入内存。为此,在有的系统中,如UNIX系统,便采用了把文件名和文件描述信息分开的方法,亦即,使文件描述信息单独形成一个称为索引结点的数据结构,简称为i结点,在文件目录中的每个目录项由文件名和指向该文件所对应的i结点的指针所构成。

目录项: 构成文件目录的基本单元;目录项可以是FCB,目录是文件控制块的有序集合。

FCB: 为了便于对文件进行控制和管理,在文件系统内部,给每个文件惟一地设置一个文件控制块。FCB包含了索引表的位置信息。其中一个文件的信息存放在若干不连续物理块中;系统为每个文件建立一个专用数据结构—索引表,并将这些物理块的块号存放在该索引表中;索引表就是磁盘块地址数组,其中第i个条目指向文件的第i块。unix文件系统中FCB 由 目录项 和i节点组成。其中目录项包括文件名 和 i节点号。目录文件由目录项构成 ;i节点描述文件的相关信息 。每个文件由一个目录项、一个i节点和若干磁盘块构成 。

在这里插入图片描述

系统打开文件表和用户打开文件表:
在这里插入图片描述

文件目录检索:用户给出文件名,按文件名查找到目录项/FCB。根据路径名检索:全路径名或相对路径名。**文件寻址:**根据目录项/FCB中文件物理地址等信息,计算出文件中任意记录或字符在存储介质上的地址。寻址过程:首先,系统应先读入第一个文件分量名usr,用它与根目录文件(或当前目录文件)中各目录项中的文件名顺序地进行比较,从中找到匹配者,并得到匹配项的索引结点号是6,再从6号索引结点中得到usr目录文件放在132号盘块中,将该盘块内容读入内存。接着,系统再将路径名中的第二个分量名ast读入,用它与放在132号盘块中的第二级目录文件中各目录项的文件名顺序进行比较,又找到匹配项,从中得到ast的目录文件放在26号索引结点中,再从26号索引结点中得知/usr/ast是存放在496号盘块中,再读入496号盘块。然后,将文件的第三个分量名mbox读入,用它与第三季目录文件/usr/ast中各目录项的文件名进行比较,最后得到/usr/ast/mbox的索引结点号为60,即在60号索引结点中存放了指定文件的物理地址,目录查询操作到此结束,如果在顺序查找过程中发现有一个文件分量名没有找到,则停止查找,并返回文件未找到信息。
在这里插入图片描述

磁盘数据传输:

寻道(时间):磁头移动定位到指定磁道
旋转延迟(时间):等待指定扇区从磁头下旋转经过
数据传输(时间):数据在磁盘与内存之间的实际传输 。

块高速缓存: 又称为文件缓存、磁盘高速缓存、缓冲区高速缓存 是指:在内存中为磁盘块设置的一个缓冲区,保存了磁盘中某些块的副本 。检查所有的读请求,看所需块是否在块高速缓存中。如果在,则可直接进行读操作;否则,先将数据块读入块高速缓存,再拷贝到所需的地方。由于访问的局部性原理,当一数据块被读入块高速缓存以满足一个I/O请求时,很可能将来还会再次访问到这一数据块。

文件操作的实现;

一、创建文件:

建立系统与文件的联系,实质是建立文件的FCB 。在目录中为新文件建立一个目录项,根据提供的参数及需要填写相关内容。分配必要的存储空间。

二、打开文件:

当用户要访问一个已存在的文件时,系统首先利用用户提供的文件名对目录进行查询,找出该文件的文件控制块或对应索引结点,然后,根据FCB或索引结点中所记录的文件物理地址(盘块号),换算出文件在磁盘上的物理位置,最后,再通过磁盘驱动程序,将所需文件读入内存。根据文件名在文件目录中检索,并将该文件的目录项读入内存,建立相应的数据结构,为后续的文件操作做好准备 。

① 根据文件路径名查目录,找到目录项 (或I节点号) ;
② 根据文件号查系统打开文件表,看文件是否已被打开;是 → 共享计数加1。否则 → 将目录项 (或I节点)等信息填入系统打开文件表空表项,共享计数置为1;
③ 根据打开方式、共享说明和用户身份检查访问合法性;
④ 在用户打开文件表中获取一空表项,填写打开方式等,并指向系统打开文件表对应表项
返回信息:fd:文件描述符,是一个非负整数,用于以后读写文件

三、读文件

① 根据打开文件时得到的文件描述符,找到相应的文件控制块(目录项),确定读操作的合法性。读操作合法→②,否则→出错处理。
② 将文件的逻辑块号转换为物理块号
根据参数中的读指针、长度与文件控制块中的信息,确定块号、块数、块内位移
③ 申请缓冲区
④ 启动磁盘I/O操作,把磁盘块中的信息读入缓冲区,再传送到指定的内存区(多次读盘)
⑤ 反复执行③、④直至读出所需数量的数据或读至文件尾

四、文件的写入策略

1、通写(write-through):内存中的修改立即写到磁盘 ,缺点:速度性能差 。例: FAT文件系统
2、延迟写(lazy-write) :利用回写(write back)缓存的方法得到高速 ,可恢复性差 。
3、可恢复写(transaction log) :采用事务日志来实现文件系统的写入 。既考虑安全性,又考虑速度性能 。例:NTFS

猜你喜欢

转载自blog.csdn.net/u014618114/article/details/107533508