文件系统接口

  文件系统是接下来学习的文件的总纲,这个帖子有些有些概念只是轻轻点一下,后续的学习过程中会着重介绍:

  1、文件概念

  文件是记录在外存上得相关信息的具有名称的集合。其具有连续的逻辑地址空间

  通常,文件表示数据和程序。

  数据文件可以包括,数字、字符、字符串或二进制。文件可以是自由形式,如文本文件,也可以具有严格的格式。

  文件必须具有可以长期信息存储的性质、必须能够保存大容量数据、在进程终止后信息能够保留下来、能够多进程并发访问文件中的信息。

这里写图片描述

  其中a是执行文件,b是文档文件。

  2、文件属性

  名称、标识符(文件系统内文件的唯一标签)、类型、位置(指向设备和设备上文件位置的指针)、大小、保护、时间

  3、文件结构

  1)创建:有两个必要步骤:第一必须在文件系统中为文件找到空间,第二在文件夹中为新文件创建一个条目;

  2)写:系统要为该文件维护一个写位置的指针,每当有写操作必须更新写指针。

  3)读:为了读文件,使用一个系统调用,并指明文件名称称和要读入文件块的内存位置。系统为该文件维护一个读位置指针。读和写使用同一指针。

  4)文件内重定位:设置当前文件位置指针(读写指针)为给定值。不须要真正的IO,又称为文件寻址。

  5)删除:为了删除文件,在目录中搜索给定名称的文件;
  6)截断:用户可能只需要删除文件内容而保留其属性,而不是强制删除文件再创建新文件。

  以上是文件的6个基本操作,为提高性能。绝大多数OS要求使用文件的时候,显式打开。OS会维护一个全局的打开文件表,以满足各种文件操作须要用到的搜索、定位需求。每一个打开文件另一个文件计数器。以记录多少进程打开了该文件。总的来说,打开文件有: 文件指针、文件打开计数器、文件磁盘位置、訪问权限

  4、文件类型 
  实现文件类型的经常使用技术是在文件名称称内包含类型。比方采用名称 + 扩展名的方式,后者像UNIX。采用幻数(magic number),保存在文件的開始部分,但这些都不是必须的。

  真正确定文件类型,或是否要使用该文件,由应用程序开发人员决定。文件扩展名并不是由操作系统所支持。仅仅用于给操作它们的应用程序以提示。只是,像Mac OS X。每一个文件都有类型,创建时强制其创建者为对应的应用程序。

操作系统是否支持文件类型是一件非常纠结的事情。支持的文件类型太少,会非常不方便;太多又会让操作系统过大。

  5、文件结构 
  磁盘系统通常具有明白的块大小,而逻辑记录则长度可变。经常使用解决的方法是先将若干逻辑记录打包,再放入物理记录。文件可当做一系列块的组合。文件最后一块一般会有浪费,块越大。内部碎片就越大。

   6、访问方法

  6.1、顺序访问

  读操作自己主动前移文件指针,写操作在文件尾部添加内容,文件指针移到新增数据后。当然指针也可重置到开始位置,或者向前向后跳过N个记录。

顺序访问适用于顺序访问设备,也适用于随机访问设备。

  6.2、直接访问

  文件由固定长度的逻辑记录组成,按随意顺序进行高速读和写。 操作之时,块号作为參数传入,能够迅速定位。通常,这个由用户向操作系统提供的块号是相对块号。相对于文件开始的索引。文件系统由这个块号做一定的运算。比方哈希运算,得到绝对块号。 对支持直接訪问的文件。当然也非常easy实现顺序訪问。

  6.3、其他访问方式

  其它访问方式可建立在直接访问方式之上。这些访问通常涉及创建文件索引。索引包含各块的指针。查找文件里的记录,首先搜索索引,再依据指针直接访问文件。 对于大文件,索引会分级。

  7、目录结构(Directory Structure)

  目录是一个包含若干文件属性信息的节点的集合,结构如下图所示。

这里写图片描述 

  目录和文件都保存在磁盘上。逻辑卷(可跨磁盘)的概念,有时候需要在一个磁盘上装多种文件系统,这些部分称为分区(partition)或者片。

这里写图片描述

  7.1、对目录的操作

  查找文件、创建文件、删除文件、罗列目录内容、文件重命名、遍历文件系统

  7.2、单级目录(Single-Level Directory)

这里写图片描述

  在一个目录下存在:

    命名问题:文件位于同一个目录下,他们必须具有唯一名称

    分组问题

  7.3、两级目录(Two-Level Directory)

  对于双层结构目录的结构,每个用户都有自己的用户文件目录(user file directory,UFD)。

  因此在每个UFD中所有的文件名称唯一即可,不同的用户可以有相同拥有文件名的问题。

这里写图片描述

  虽然双层结构目录解决了名称冲突问题,但是它仍有缺点。这种解耦股有效地对用户加以隔离。这种隔离在用户需要完全独立时是有点,但是在用户需要在某个任务上进行合作和访问其他文件时却是一个缺点。为了访问指定的文件唯一,用户必须知道要访问文件的路径名(path name)。

  7.4、树型目录(Tree-Structured Directories)

这里写图片描述

  具有高效的搜索(Efficient searching)、分组能力(Grouping Capability)、当前目录(Current directory / working directory)、路径名有两种形式:绝对路径和相对路径。

  7.5、无环图目录(Acyclic-Graph Directories)

这里写图片描述

  这样对于相同的文件可能有不同的名字,因此有别名。一个文件也可有多个绝对路径名。如果文件被删除,这样可能会留下悬挂指针指向不再存在的文件,更为糟糕的是,这些剩余文件指针可能指向包括实际磁盘地址,而该空间可能正在被其他文件使用。

  7.6、通用图目录(General Graph Directory)

这里写图片描述

  无环图文件夹有时容易出现环。比方链接中,出现了自我引用的情况。存在环可能会导致遍历文件夹时死循环。应避免出现环,或者出现之后要消除,比方添加垃圾回收。消除哪些没有引用或自引用的链接。或者改变遍历算法,遍历文件夹时避开链接。

  8、文件共享 
  1)多用户

  2)远程文件系统 
    NFS:网络文件系统 
    DFS:分布式文件系统 
    (1)客户机-server模型

    (2)分布式信息系统 
    为了便于管理客户机-server服务,提供用于远程计算所需信息的统一訪问

  3)故障模式 
  远程文件系统非常容易出现各种故障,比方掉线等。当故障出现时,客户机系统并不将此作为本地文件系统故障那样进行处理,但会终止对故障server的全部操作,或者等候直至server再次可用。这样的故障语义由远程文件系统协议所定义和实现。通常,终止操作代价较大,绝大多数分布式文件系统在故障出现时,选择等候。那么故障恢复时,客户机和server之间可能须要一定的状态信息。NFS採用了一种简单的方法实现了无状态的DFS,但它不够安全。

  9、一致性语义 
  多用户操作情况下。怎样保持文件一致性。

  1)UNIX语义 

  用户的写操作,能够被其它所见,同意用户共享文件指针位置,移动文件指针会影响其它用户,采用UNIX语义,一个文件与单个物理映射关联。相互排斥访问。

  2)会话语义 

  用户写操作不能马上被打开同一文件的其它用户所见,文件关闭后,改动仅仅能被新打开的会话所见,已经打开的用户看不到,采用这样的语义。一个文件能够对多个物理映射进行关联,并发性非常好。

  3)不可改动共享文件语义 
  既然是共享文件,就不能改动,仅仅读。在分布式系统中实现这样的语义最简单。

  10、保护 

  文件的保护包含可靠性保护和防止非法访问。可靠性通常由文件备份提供;这里说的保护是指防止非法访问。 

  1)访问类型 
  通过限制可进行的文件访问类型,比方说:读、写、运行、加入、删除、列表清单 

  2)访问控制 
  文件对应访问控制列表。而此列表与全部者、组、其它成员组合使用 

  3)其它保护方式 
  文件加password。

原文地址:https://www.cnblogs.com/PIRATE-JFZHOU/p/8254092.html