操作系统之文件系统

本文深入探讨了文件系统的核心概念,包括文件命名、类型、访问方式、属性、操作及其实现。讨论了不同类型的文件系统,如FAT、NTFS和exFAT,以及ASCII和二进制文件的区别。文件访问的顺序和随机访问模式被详细阐述,同时介绍了文件属性如保护、创建时间等。此外,文章还涵盖了目录结构、路径名、目录操作,以及文件系统的实现,如i节点和链接技术。最后,文章提到了共享文件及其管理问题。
摘要由CSDN通过智能技术生成

汇总:Android小白成长之路_知识体系汇总【持续更新中…】

文件

文件命名

文件是一种抽象机制,提供了一种在磁盘上保存信息而且方便以后读取的方法。文件的具体命名规范在各个系统上是不同的,有些文件系统区分大小写字母,例如UNIX,有些不区分,例如MS-DOS。

各种文件系统:

  • FAT-16:老版本Windows使用的文件系统
  • FAT-32:对FAT-16进行扩展后的文件系统
  • NTFS:新版本Windows使用的更先进的文件系统
  • ReFS:Windows 8配备的弹性文件系统
  • exFAT:微软公司对闪存和大文件操作系统开发的一种优化的FAT-32扩展版本,是微软唯一满足OS X读写操作的文件系统

文件结构

目前最常用的文件结构就是一种无结构的字节序列,操作系统所见到的就是字节,文件内容的任何含义只在用户程序中解释,UNIX和Windows都是用这种结构。

文件类型

UNIX(包括OS X)和Windows都有普通文件和目录,UNIX还有字符特殊文件和块特殊文件

  • 普通文件:包含有用户信息的文件
  • 目录:管理文件系统结构的系统文件
  • 字符特殊文件:和输入/输出有关,用于I/O类设备
  • 块特殊文件:用于磁盘类设备

普通文件一般分为ASCII文件和二进制文件

  • ASCII文件:由多行正文组成,文件中各行的长度不一定相同,最大的优势是可以显示和打印,还可以用任何文本编辑器进行编辑
  • 二进制文件:有一定的内部结构,使用该文件的程序才了解这种结构,打印出来是混乱的字符无法进行理解

文件访问

  • 顺序访问:进程在这些系统中可从头按顺序读取文件的全部字节或记录,但不能跳过某一些内容,只能按照顺序进行读取。可以返回到起点,需要时可以多次读取该文件,存储介质是磁带
  • 随机访问:不按顺序读取文件中的字节或记录,可以按照关键字而不是位置来访问记录,许多应用程序都需要这种类型的文件,存储介质是磁盘

文件属性

文件都有文件名和数据,同时还会保存其他与文件相关的信息,如创建的日期、文件大小等,这些附加信息称为属性或者元数据,一些常用的文件属性和其含义如下:

属性含义
保护谁可以访问文件,以什么方式存储文件
口令访问文件需要口令
创建者创建文件者的ID
所有者当前所有者
只读标志0表示读/写,1表示只读
隐藏标志0表示正常,1表示不在列表中显示
系统标志0表示普通文件,1表示系统文件
存档标志0表示已经备份,1表示需要备份
ASCII/二进制标志0表示ASCII文件,1表示二进制文件
随机访问标志0表示只允许顺序访问,1表示随机访问
临时标志0表示正常,1表示进程退出时删除该文件
加锁标志0表示未加锁,非0表示加锁
记录长度一个记录中的字节数
键的位置每个记录中键的偏移量
键的长度键字段的字节数
创建时间创建文件的日期时间
最后一次存取时间上一次访问文件的日期时间
最后一次修改时间上一次修改文件的日期时间
当前大小文件的字节数
最大长度文件可能增长到的字节数

文件操作

  • create:创建不包含任何数据的文件,该调用的目的是表明文件即将创建,并设置文件的一些属性
  • delete:任何系统总有一个系统调用来删除文件
  • open:在使用文件前,必须先打开文件,把文件属性和磁盘地址表装入内存,便于后续调用的快速访问
  • close:访问结束后,不再需要文件属性和磁盘地址,应该关闭文件以释放内部表空间,关闭文件时,写入该文件的最后一块,即使这个块还没有满
  • read:在文件中读取数据,读取的数据一般来自文件的当前位置,必须指明需要读取多少数据,并且提供存放这些数据的缓冲区
  • write:向文件写入数据,一般也是从文件当前位置开始,如果当前位置是文件末尾,文件长度增加,如果当前位置是文件中间,现有数据被覆盖并且永远消失
  • append:write的限制形式,只能在文件末尾添加数据
  • seek:对于随机访问文件,要指定从何处开始获取数据,通常的方法是用seek系统调用把当前位置指针指向文件的特定位置
  • get attributes:获取文件的属性
  • set attributes:设置文件的某些可由用户设置的属性
  • rename:重命名已有文件

目录

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

一级目录系统

目录系统最简单形式是在一个目录中包含所有文件,这个目录称为根目录

层次目录系统

目录树结构,用目录把文件分组,几乎所有的现代文件系统都是这个方式

路径名

  • 绝对路径名:由从根目录到文件的路径组成
  • 相对路径名:常和工作目录(当前目录)一起使用,可以指定一个目录作为当前工作目录,所有的不从根目录开始的路径名都是相对于工作目录的。
  • 两个特殊目录项:
    • “.” :一个点,表示当前目录
    • “…”:两个点,表示当前目录的父目录

目录操作

  • create:创建目录
  • delete:删除目录,只有空目录可删除
  • opendir:目录内容可被读取,读目录前,必须先打开目录
  • closedir:读目录结束后,应关闭目录以释放内部表空间
  • readdir:返回打开目录的下一个目录项
  • rename:重命名
  • link:链接技术允许在多个目录中出现同一个文件,指定一个存在的文件和一个路径名,并建立从该文件到路径所知名字的链接
  • unlink:删除目录项

文件系统的实现

文件系统布局

在这里插入图片描述

文件系统放在磁盘上,多数磁盘划分为一个或多个分区,每个分区中有一个独立的文件系统。

  • MBR:主引导记录,位于磁盘的0号扇区,用来引导计算机

  • 分区表:给出每个分区的起始和结束地址,表中的一个分区被标记为活动分区

    磁盘分区:随着文件系统的不同而变化,通常包括

    • 引导块:MBR确定活动分区,读入它的第一个块,称为引导块,并执行,引导块中程序将装载该分区中的操作系统
    • 超级块:包含文件系统的所有关键参数,例如确定文件系统类型用的魔法数、文件系统中块的数量等
    • 空闲块:管理空闲空间,可以用位图或指针列表的形式给出
    • i节点:一个数据结构数组,说明了文件的方方面面
    • 根目录:存放文件系统目录树的根部
    • 文件和目录

文件的实现

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

  • 连续分配:把每个文件作为一连串连续数据块存储在磁盘上,每个文件都从一个新的块开始
    • 优势:实现简单,读操作性能好
    • 缺陷:随着时间推移,磁盘会变得零碎
  • 链表分配:为每个文件构造磁盘块链表,每个块的第一个字作为指向下一块的指针,块的其他部分存放数据。
    • 优势:充分利用每个磁盘块,不会因为磁盘碎片而浪费存储空间
    • 缺陷:随机访问相当缓慢,而且指针占去了一些字节,导致存储的字节数不再是2的整数次幂,而许多程序都是以长度2的整数次幂来读写磁盘块的,因此降低了系统运行效率
  • 采用内存中的表进行链表分配:把磁盘块的指针字节,存放到内存中的一个表,就能解决链表分配的两个问题,这个表称为文件分配表
    • 优势:相比链表分配,这种方式整个块都能存放数据,随机访问页容易得多
    • 缺陷:必须把整个表都存放到内存中,当磁盘很大时,表也将很大占用内存,因此不太实用
  • i结点:给每个文件赋予一个称为i节点的数据结构,其中列出文件属性和文件块的磁盘地址
    • 优势:只有对应的文件打开时,其i节点才在内存中,比上述文件分配表的方式占用内存要小得多
    • 缺陷:如果每个i节点只能存储固定数量的磁盘地址,那么当一个文件所含的磁盘块的数量超出i节点所容纳的数目怎么办?一个解决方案是最后一个“磁盘地址”不指向数据块,而是指向一个包含额外磁盘块地址的块的地址。更高级的解决方案是:可以有两个或更多个包含磁盘地址的块,或者指向其他存放地址的磁盘块的磁盘块

共享文件

如果一个共享文件同时出现在属于不同用户的不同目录下,就能满足共享的需要。但也存在一些问题:如果目录中包含磁盘地址,则当链接文件时,必须把一个目录中的磁盘地址复制到另一个目录中。如果其中一个目录对文件进行了修改,则新的数据块将只会出现在这个目录所有者的目录中,别的用户并不知道这个改变,这违背了共享的目的。

解决方法:

  • i节点:磁盘块不列入目录,而是列入一个与文件本身关联的小型数据结构中,目录指向这个小型数据结构,即i节点。
  • 符号链接:让系统建立一个类型为link的新文件,并把该文件放在当前目录下,使得当前目录与另一个目录的一个文件存在链接。新的文件中只包含了它所链接的文件的路径名,当这个文件被读取时,系统先查看它是否为link类型,是的话则找到该文件所链接的文件的名字,并且通过路径读那个文件,这种方法称为符号链接
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Nbin_Newby

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值