Untitled

文件概念

文件是存储某种介质上的(如磁盘、光盘、SSD等)并具有文件名的一组相关信息的集合

文件系统提供机制,以便对计算机操作系统与所有用户的数据与程序进行在线存储和访问

连续的逻辑地址空间

位、字节、行或记录的序列,其含义由文件的创建者和用户定义

文件属性

名称:符号文件名是以人类可读形式来保存的唯一信息

标识符:标识文件系统的文件的唯一标记(通常为数字)

类型:支持不同类型文件的系统需要这个信息

位置:指向设备与设备上文件位置的指针

尺寸:文件的当前大小(以字节、字或块为单位)以及可能允许的最大尺寸

保护:访问控制信息确定谁能进行读取、写入、执行等

时间、日期和用户标识:文件创建、最后修改和最后使用的相关信息可以保存,用于保护、安全和使用监控

所有文件的信息保存在目录结构中,目录结构保存在外存上

通常目录条目由文件名和唯一标识符组成,根据标识符可以定位其他文件属性

文件操作

创建、写入、读取、重新定位、删除、截断

打开文件表(open-file table):用于维护所有打开文件的信息

系统调用open()返回一个指向打开文件表中的项的指针

  • 每个打开文件具有如下关联信息:
    • 文件指针:跟踪上次读写位置作为当前文件位置指针
    • 文件打开计数:跟踪文件打开和关闭的数量,在最后关闭时,计数器为0,系统可以移除该条目
    • 文件的磁盘位置:用于定位磁盘上文件位置的信息
    • 访问权限:访问模式信息
  • 文件锁允许一个进程锁定文件,以防止其他进程访问它类似于读者-写者锁:
    • 共享锁(shared lock):类似于读者锁,以便多个进程可以并发获取它
    • 独占锁(exclusive lock):类似于写者锁,一次只有一个进程可以获得这样的锁
  • 操作系统可以提供强制或建议文件锁定机制:
    • 强制(mandatory):一旦进程获取独占锁,操作系统就组织任何其他进程访问锁定的文件
    • 建议(advisory):进程可以获取锁的状态并决定做什么

文件结构

None 流文件结构:字、字节的序列

Simple record structure 记录文件结构:lines, fixed length, variable length

Complex Structures: formatted document, relocatable load file

可以通过插入适当的控制字符,用第一种方法模拟最后两个

文件结构由 OS 和程序决定

文件类型

Untitled

访问方法

顺序访问(Sequential Access)

文件信息按顺序,一个记录接着一个记录地加以处理

read_next()读取文件的下一部分,并且自动前移文件指针以便跟踪 I/O 位置

write_next()对文件的结尾附加内容,并迁移到新写材料的末尾

rewind()重置到文件开始处

Untitled

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

直接访问(Direct Access)

文件由固定长度的逻辑记录(logical records)组成,允许程序按任意顺序进行快速读写

文件可作为块或记录的编号序列

读写顺序没有限制

可以立即访问大量信息

以块号作为参数,read(n)读取第 n 块文件

Untitled

其他访问方法

索引顺序访问

Untitled

目录与磁盘结构

目录是包含所有文件信息节点的集合。目录结构和文件在磁盘上。

磁盘可以装多种文件系统,分区或片minidisk slice。

典型的文件系统结构

典型的文件系统结构

目录概述

  • 可对目录执行的操作:
    • 搜索文件
    • 创建文件
    • 删除文件
    • 遍历目录
    • 重命名文件
    • 遍历文件系统

单级目录

Untitled

所有文件包含在同一目录中,系统所有用户使用同一目录

由于所有文件在同一级,所以不能有重名,此外存在着分组问题

两级目录

Untitled

每个用户都有自己的用户文件目录(User File Directory, UFD)

不同用户可以有同名文件,搜索效率高,但是没有分组能力

树形目录

Untitled

搜索高效,有分组能力

禁止共享文件和目录

无环图目录

允许目录共享子目录和文件

Untitled

实现文件盒目录共享,UNIX 采用创建一个叫做链接的新目录条目,实际上是另一个文件的指针

链接通过使用路径名定位真正文件

无环图目录导致一个文件可以有多个绝对路径名,不同文件名可能表示同一文件,出现了别名问题

在遍历文件系统时,共享文件可能被访问多次

在删除共享文件时,可能造成指针悬空(dangling pointer),解决方法是保存文件的关联的链接列表或保存关联链接的个数

符号链接(symbolic link)在删除时只删除来链接本身,不删除文件,真正删除文件时符号链接允许悬空,标记为无效

删除的另一方法是保留文件直到删除其全部引用,所以为文件引入了计数,删除一次链接或者条目就计数 -1,到 0 时完全删除文件,UNIX 的硬链接采用这种方法,在 inode 中保留一个引用计数。通过禁止对目录的多重引用,可以维护无环图结构。

通用图目录

Untitled

通常需要垃圾收集(garbage collection)方案,以确定何时最后引用已被删除并重新分配磁盘空间

文件系统安装(File System Mounting)

1
$ mount /dev/dsk /users

Untitled

Untitled

安装之后会暂时隐藏安装点下的原有文件,在卸载之后会还原

文件共享

多用户系统的文件共享很有用

文件共享需要通过一定的保护机制实现

在分布式系统,文件通过网络访问,网络文件系统 NFS 是常见的分布式文件共享方法

NFS 是 UNIX 文件共享协议

CIFS 是 WIN 的协议

文件保护

不同的操作类型:读、写、执行、附加、删除、列表

基于身份访问的一种实现方法是为每个文件和目录关联一个访问控制列表(Access-Control List, ACL),指定每个用户的名称及其允许访问的类型

  • 三种用户类型:
    • 所有者
    • 其他