Skip to content

Latest commit

 

History

History
148 lines (71 loc) · 6.61 KB

File metadata and controls

148 lines (71 loc) · 6.61 KB

6.文件管理

文件是对磁盘的抽象。

所谓未见是指一组带标识(标识即为文件名)的、在逻辑上有完整意义的信息项的序列。

文件管理系统是一组系统软件,它为使用文件的用户和应用程序提供服务,包括文件访问、目录维护和访问控制。文件管理系统通常被视为一个由操作系统提供服务的系统服务,而不是操作系统的一部分,但是在任何系统中,至少有一部分文件管理功能是由操作系统执行的。

文件系统不但提供存储数据(组织为文件)的手段,而且提供一系列对文件进行操作的功能接口。典型的操作如下:

  • 创建
  • 删除
  • 打开
  • 关闭

文件系统架构

img

  • 设备驱动(device drivers):程序直接与外围设备通信。设备驱动程序负责启动设备上的I/O操作,处理I/O请求的完成。
  • 基本文件系统或物理I/O层:是与计算机系统外部环境的基本接口。这一层处理在磁盘间或磁带系统间交换的数据块,因此它关注的是这些块在辅存和内存缓冲区中的位置,而非数据的内容或所涉及的文件结构。
  • 基本I/O管理程序(basic I/O supervisor);负责所有文件I/O的初始化和终止。在这一层,需要一定的控制结构来维护设备的输入/输出、调度和文件状态。基本I/O管理程序是操作系统的一部分。
  • 逻辑I/O(logical I/O)使用户和应用程序能够访问记录。因此基本文件系统处理的是数据块,而逻辑I/O模块处理的是文件记录。逻辑I/O提供一种通用的记录I/O的能。

Android文件系统

Android使用了Linux中的文件管理功能。Android文件系统目录与Linux安装目录类似,只是前者有一些特有的特性。

img

Android文件系统目录的顶层部分:

  • system目录包含操作系统的核心部分,核心部分包括系统的二进制文件、系统库文件和配置文件。它还包含Android的基本应用,如闹钟、计算器和相机。系统映像是锁定的,文件系统只为用户提供只读权限。
  • data目录是应用程序存储文件时的首选位置。当系统中安装了一个新的应用程序时,以下这些操作都有data目录有关:
    • .apk文件放置在/data/app中
    • 以应用为中心的库文件安装在/data/data/<应用名称>目录中。这个目录是特定应用程序的沙盒区域,只有该应用可以访问,其他应用不能访问。
    • 建立应用相关的文件数据库。
  • cache目录用于存储应用的临时数据。该区域存储Android系统频繁访问的数据和应用组件。清理高速缓存不会影响到个人数据,而只会简单地清理其中的已有数据,继续使用设备时,其中的数据会自动创建。
  • mnt/sdcard目录不是设备内部的内存分区,而是sd卡的分区,sd卡是一种用于android设备的非易失性的存储卡。

文件系统布局

文件系统存储在磁盘中。大部分的磁盘能够划分出一到多个分区,叫做磁盘分区(disk partitioning) 或者是磁盘分片(disk slicing)。每个分区都有独立的文件系统,每块分区的文件系统可以不同。磁盘的 0 号分区称为 主引导记录(Master Boot Record, MBR),用来引导(boot) 计算机。在 MBR 的结尾是分区表(partition table)。每个分区表给出每个分区由开始到结束的地址。

当计算机开始引 boot 时,BIOS 读入并执行 MBR。

引导块

MBR 做的第一件事就是确定活动分区,读入它的第一个块,称为引导块(boot block) 并执行。引导块中的程序将加载分区中的操作系统。为了一致性,每个分区都会从引导块开始,即使引导块不包含操作系统。引导块占据文件系统的前 4096 个字节,从磁盘上的字节偏移量 0 开始。引导块可用于启动操作系统。

除了从引导块开始之外,磁盘分区的布局是随着文件系统的不同而变化的。通常文件系统会包含一些属性,如下

image

超级块

紧跟在引导块后面的是 超级块(Superblock),超级块 的大小为 4096 字节,从磁盘上的字节偏移 4096 开始。超级块包含文件系统的所有关键参数

  • 文件系统的大小
  • 文件系统中的数据块数
  • 指示文件系统状态的标志
  • 分配组大小

在计算机启动或者文件系统首次使用时,超级块会被读入内存。

空闲空间块

接着是文件系统中空闲块的信息,例如,可以用位图或者指针列表的形式给出。

碎片

这里不得不提一个叫做碎片(fragment)的概念,也称为片段。一般零散的单个数据通常称为片段。磁盘块可以进一步分为固定大小的分配单元,片段只是在驱动器上彼此不相邻的文件片段。

inode

然后在后面是一个 inode(index node),也称作索引节点。它是一个数组的结构,每个文件有一个 inode,inode 非常重要,它说明了文件的方方面面。每个索引节点都存储对象数据的属性和磁盘块位置。

inode 节点主要包括了以下信息

  • 模式/权限(保护)
  • 所有者 ID
  • 组 ID
  • 文件大小
  • 文件的硬链接数
  • 上次访问时间
  • 最后修改时间
  • inode 上次修改时间

文件分为两部分,索引节点和块。一旦创建后,每种类型的块数是固定的。你不能增加分区上 inode 的数量,也不能增加磁盘块的数量。

紧跟在 inode 后面的是根目录,它存放的是文件系统目录树的根部。最后,磁盘的其他部分存放了其他所有的目录和文件。

文件的实现

最重要的问题是记录各个文件分别用到了哪些磁盘块。不同的系统采用了不同的方法。下面我们会探讨一下这些方式。分配背后的主要思想是有效利用文件空间快速访问文件 ,主要有三种分配方案

  • 连续分配

  • 链表分配

  • 索引分配

  • 参考: