操作系统——文件系统

操作系统系列4——文件系统

操作系统学习总结系列,主要是对操作系统概念和重点主干知识的总结与归纳。参考:《现代操作系统》第4版

其他系列链接:

操作系统系列1——进程与线程链接

操作系统系列2——内存管理

操作系统系列3——死锁

操作系统系列4——文件系统

一、文件
1、概念

​ 文件是一种抽象机制,它提供了一种在磁上保存信息而且方便以后读取的方法。这种方法可以使用户不必了解存储信息的方法、位置和实际磁盘工作方式等有关细节

2、文件命名

​ win95、win98用的都是MS-DOS的文件系统,即FAT-16, win98扩展了FAT-16成为FAT-32。较新版的操作系统NTFS,win8配备ReFS。微软优化FAT,叫作exFAT。prog.c,圆点后面的部分称为文件扩展名。

3、文件结构
  • 字节结构

    把文件看成字节序列为操作系统提供了最大的灵活度

  • 记录序列

    文件结构上的第一步改进,这种模型中,文件是具有固定长度记录的序列

  • 文件在这种结构中由一棵记录树构成,每个记录不必具有相同的长度,记录的固定位置上有一个键字段。这棵树按“键”字段进行排序,从而可以对特定“键”进行快速查找。

4、文件类型
  • 普通文件
  • 目录
  • 字符特殊文件(UNIX)
  • 块特殊文件(UNIX)
5、文件访问
  • 顺序访问

    按顺序读取文件的全部字节,早期操作系统只有这种访问方式

  • 随机访问文件

​ 当用磁盘存储文件时,可以以任何次序读取其中字节或记录的文件。许多应用程序需要这种类型文件

6、文件属性
  • 概念

    ​ 除了文件名和数据外,所有操作系统还会保存其他的文件相关信息,如创建日期、时间和大小等,这些附加的信息称为文件属性

  • 举例

    创建者: 创建文件者ID

    所有者: 当前所有者

    当前大小: 文件字节数

7、文件操作

概念: 使用文件的目的是存储信息并方便以后检索。对于存储和检索,不同系统提供了不同的操作。

常见的文件操作(系统调用):

  • create 创建不包含任何数据的文件
  • delete 当不再需要某个文件时,必须删除该文件以释放磁盘空间
  • open 在使用文件之前,必须先打开文件
  • close 访问结束后,不再需要文件属性和磁盘地址,这时应该关闭文件以释放内部表空间
  • read 在文件中读取数据
  • write 向文件写数据,写操作一般也是从文件当前位置开始
  • append 此调用是write的限制形式,他只能在文件末尾添加数据
  • seek 对于随机访问文件,要指定从何处开始获取数据,通常的方法是用seek系统调用把当前位置指针指向文件中特定的位置。
  • get attributes 进程运行常需要读取文件属性
  • set attributes 某些属性是可由用户设置的,甚至在文件创建之后
  • rename 用户尝尝要改变已有的名字,rename系统调用用于这一目的
二、目录
1、概念

文件系统通常提供目录或文件夹用于记录文件的位置,在很多操作系统中目录本身也是文件

2、一级目录系统

在一个目录中包含所有文件,这有时称为根目录

3、层级目录系统

当用户有着数以千计的文件,为了寻找方便。需要层次结构(即一个目录树)

4、路径名
  • 绝对路径名

  • 相对路径名

    它常和工作目录(working directory)(也和当前目录(acurrent directory))一起使用
    例:UNIX
    cp /usr/ast/mailbox /usr/ast/mailbox/mailbox.bak
    和命令
    cp mailbox mailbox.bak具有相同的含义。

  • 特殊目录项

    . dot,指当前目录

    … dotdot,指其父目录

    eg:
    cp …/lib/dictionay .
    将usr/lib/下的dictionay复制到当前目录下

5、目录操作
  • 概念: 管理目录的系统调用

  • 举例(Unix)

    • create 创建目录
    • delete 删除目录
    • opendir 目录内容可被读取
    • closedir 读目录结束
    • readdir 返回打开目录下一个目录项
    • rename 改变目录名
    • link 链接技术允许在多个目录中出现同一个文件
    • unlink 删除目录项
三、文件系统的实现
1、概念

​ 文件存储实现的关键问题是记录各个文件分别用到哪些磁盘块。不同的操作系统用到不同的方法

2、文件系统布局

文件系统存放在磁盘上。多数磁盘划分为一个或多个分区,每个分区中国有一个独立的文件系统。磁盘0号扇区称为主引导记录(MBR),用来引导计算机。在MBR结尾是分区表。该表给出每个分区的起始结束地址。表中的一个分区被标记为活动区。在计算机被引导时,BIOS读入并执行MBR。MBR做的第一件事是确定活动分区,读入它的第一个块,称为引导块,并执行之。引导块中的程序将装载该分区中的操作系统。

3、文件的实现
  • 连续分配

    最简单的分配是把每个文件作为一连串连续数据块存储在磁盘

    优势:1、实现简单,记录每个文件用到磁盘块简化为只需记住两个数字即可:第一块的磁盘地址和文件的块数。给定了第一块编号,一个简单的加法就可以找到任何其他块的编号
    2、操作性能较好,因为单个操作中就能从磁盘上读出整个文件。只需一次寻找。

  • 链表分配

    为每个文件构造磁盘块链表。每一块的第一个字作为指向下一块的指针,块的其他部分存放数据。

    优势:1、可以充分利用磁盘块,不会因为磁盘碎片浪费存储内存
    2、随机访问快。

    缺点:指针占用一些字节,每个磁盘块存储数据的字节数不再是2的整数次幂。怪异的大小降低了系统的运行效率,每个块前几个字节被指向下一个块的指针所占据,需要从两个磁盘中获取拼接信息,这就因复制而引发额外的开销。

  • 采用内存中的表进行链表分配

    取出每个磁盘块的指针字,把他放在内存的一个表中,解决链表分配的不足。内存中这样的表格称为文件分配表(File Allocation Table,FAT)

  • i节点

    最后一个记录各文件分别包含哪些磁盘块的方法是给每个文件赋予一个称为i节点的数据结构,其中列出了文件属性和文件的磁盘地址。

4、目录的实现

在读文件之前,必须先打开文件。打开文件时,操作系统利用用户给出的路径名找到相应的目录项。
简单目录:包含固定大小的目录,在目录项中有磁盘地址和属性
采用i节点的系统:把文件属性存放在i节点中而不是目录项中。这种情形下,目录项会更短。

5、共享文件

当几个用户同在一个项目里工作时,他们常常需要共享文件。共享文件与目录的联系称为一个链接(link)。这样文件系统本身就是一个有向无环图(DAG),而不是一棵树。

6、日志结构文件系统

CPU运行速度越来越快,磁盘容量越来越大,价格越来越便宜(但磁盘速度并没有增快多少),同时内存容量也以指数形式增长。而没有得到快速发展的参数是磁道的寻道时间。这些成为了文件系统性能的瓶颈,为了解决这一问题设计了全新的文件系统即日志结构文件系统(LFS)。

虽然是一个很吸引人的想法,由于它们和文件系统不匹配,该文件系统并没有被广泛应用。

7、日志文件系统

基本的想法是保存一个用于记录系统下一步将要做什么的日志。这样当系统在完成他们即将完成的任务前崩溃时,重新启动后,可以通过查看日志,获取崩溃前计划完成的任务,并完成它们。这样的文件日志系统,并已经被实际应用。微软的NTFS、Linux的 ext3和ReiserFS文件系统都使用日志。

8、虚拟文件系统

将多个文件系统整合到一个统一的结构中。一个Linux系统可以用ext2作为根文件系统,ext3分区装载在/usr下,另一块采用ReiserFS文件系统的硬盘装载在/home下,以及一个ISO 9660的CD-ROM临时装载在/mnt下。从用户的观点来看,只有一个文件系统层级。它们事实上是多种文件系统,对于用户和进程是不可见的。绝大多数Unix操作系统都在使用虚拟文件系统(Virtual File System, VFS)

四、文件系统的管理和优化

1、磁盘空间管理
概念

几乎所有文件系统都把文件分割成固定大小的块来存储,各块之间不一定相邻

块大小

从历史的观点上来说,文件系统将大小设在1~4KB之间,但现在随着磁盘超过了1TB,还是将块的大小提升到64KB并且接受浪费的磁盘孔空间,这样也许更好。磁盘空间几乎不再会短缺。

记录空闲块

磁盘块链表:链表的每个块中包含尽可能多的空闲磁盘块号。通常情况下,采用空闲块存放空闲表,这样不会影响存储器

位图:在位图中,空闲块用1表示,已分配块用0表示。

磁盘配额

为防止人们贪心而占有太多的磁盘空间,用户操作系统常常提供一种强制性磁盘配额机制。其思想是系统管理员分给每个用户拥有文件和块的最大数量,操作系统确保每个用户不超过分给他们的配额。(配额表、打开文件表)

2、文件系统备份

做磁盘备份主要是处理好两个潜在问题中的一个:
1)从意外的灾难中恢复
2)从错误的操作中恢复

3、文件系统的一致性

很多文件系统读取磁盘块,进行修改后,再写回磁盘。如果在修改过的磁盘块全部写回之前系统崩溃,则文件系统有可能处于不一致状态。如果一些未被写回的块是i节点块、目录块或者是包含有空闲表的块时,这个问题尤为严重

4、文件系统性能
  • 高速缓存: 减少磁盘访问次数技术是块高速缓存(block cache)或者缓冲区高速缓存(buffer cache)。本书中,高速缓存指的是一系列的块,它们在逻辑上属于磁盘,但实际上基于性能的考虑被保存在内存中。

  • 块提取读: 在需要用到块之前,试图提前将其写入高速缓存,从而提高命中率。块提前读策略只适用于实际顺序读取的文件。对随机访问文件,提前读丝毫不起作用。

  • 减少磁盘臂运动:把可能顺序访问的块放一起,当然最好是同一柱面上,从而减少磁盘臂的移动次数。

5、磁盘碎片整理

​ 移动文件使它们相邻,并把所有的空闲空间放在一个或多个大的连续区域内。

高速缓存指的是一系列的块,它们在逻辑上属于磁盘,但实际上基于性能的考虑被保存在内存中。

  • 块提取读: 在需要用到块之前,试图提前将其写入高速缓存,从而提高命中率。块提前读策略只适用于实际顺序读取的文件。对随机访问文件,提前读丝毫不起作用。

  • 减少磁盘臂运动:把可能顺序访问的块放一起,当然最好是同一柱面上,从而减少磁盘臂的移动次数。

5、磁盘碎片整理

​ 移动文件使它们相邻,并把所有的空闲空间放在一个或多个大的连续区域内。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值