操作系统:文件系统

文件系统

文件保护

文件的保护通过口令保护加密保护、和访问控制等方式实现。其中,口令和加密是为了防止用户文件被他人存取或窃取,而访问控制则用于控制用户对文件的访问方式

口令保护

口令指用户在建立一个文件时提供一个口令,系统为其建立FCB时附上相应的口令,同时告诉允许共享该文件的其他用户。用户在请求访问时必须提供口令

优点:这种方式需要的时间和空间开销不多

缺电:正确的“口令”存放在系统内部,不够安全

加密保护

使用``密码`对文件进行加密,在访问文件时需要提供正确的密码,才能对文件进行正确的解密。如下图是对文件实现的一种简单加密:

image-20230501155648740

优点:保密性强,不需要在系统中存储密码

缺点: 编码/译码,或者说是要加密/解密要花费一定时间

访问控制

在每个文件的FCB(或索引结点)中增加一个访问控制列表(Access-Control List ACL),该表中记录了各个用户可以对该文件执行的哪些操作。为减短了访问控制表,精简ACL可以精简访问列表,以“组”为单位,标记各“组”的用户可以对文件执行哪些操作。

​ 需要注意的是如果对某个目录进行了访问权限的控制,哪也要对目录下的所有文件进行相同的访问权限控制。

image-20230501160333814

文件系统的层次结构

文件系统提供高效和便捷的磁盘访问,以便允许存储、定位、提取数据。

image-20230501162455649

image-20230501163116184

文件系统的全局结构

文件在磁盘上的结构

文件系统存放在磁盘上,文件系统可能包含如下信息:启动存储在那里的操作系统的方式、总的块数、空闲块的数量和位置、目录结构以及各个具体文件等。

物理格式化,即低级格式化——划分扇区,检测坏扇区,并用备用扇区替换坏扇区

image-20230501170425652

  • 主引导记录(MBR),位于磁盘的0号扇区,用来引导计算机,MBR后面是分区表,该表给出了每个分区的起始和结束地址。当计算机启动时,BIOS读入并执行MBR。MBR做的第一件事情即使确定活动分区,读入它的第一个块,即引导块(用于对操作系统的引导,一般只在启动操作系统时使用)
  • 超级块反映了文件系统整体的控制信息。超级块中的典型信息包括分区的块数量、块的大小、空闲块的数量和指针、空闲的FCB数量和FCB指针等
  • 文件系统的空闲块信息,可以用位示图或者指针链接给出。后面给出的则是i结点,每个i节点包含了文件的详细信息
  • 最后就是文件的根目录,它存放了文件系统目录树的根部

文件在内存中的结构

下图展示了文件系统在内存中的的结构。近期访问过的目录文件会被缓存在内存中,不用每次都从磁盘读入,这样加速了目录检索的速度。在内存中的信息用于管理文件并通过缓存来提高性能。这些结构的类型可能包括:

  • 安装表(mount table),包含每个已安装文系统分区的有关信息
  • 内存中的目录结构的缓存包含最近访问目录的信息。对安装分区的目录,它可以包括一个指向分区表的指针
  • 整个系统的打开文件表,包含每个打开文件的FCB(不打开的没有)及其他信息
  • 每个进程的打开文件表,包含一个指向整个系统的打开文件表中的对应条目的指针,及其他信息

image-20230501173439588

下图展示的系统执行open系统调用的过程:

  1. 当用户使用open系统调用,并指定对应的参数,会根据路径一级一级读入目录
  2. 找到目标文件的FCB,复制到系统打开文件表
  3. 在进程打开文件表中新建一个条目,并返回文件描述符(Windows系统中为文件句柄)

image-20230501173334296

下图展示了执行read系统调用的执行过过程:

  1. 根据文件的描述符(句柄)在对应进程的打开文件表中找到在系统打开文件表中的索引
  2. 在系统打开文件表中找到对应的FCB信息
  3. 根据FCB中指向文件物理地址的指针,去访问磁盘读取文件数据

image-20230501174634626

虚拟文件系统

虚拟文件系统VFS)为用户提供了文件系统操作的统一接口,屏蔽了不同文件系统的差异和操作细节。用户可以通过CFS提供的统一调用函数来操作不同系统的文件,而无需考虑具体的文件系统和实际的存储介质

image-20230501194153454

虚拟文件系统的三大特点:

  1. 向上层用户提供统一标准的系统调用接口,屏蔽底层具体文件系统的实现差异
  2. VFS要求下层的文件系统必须实现某些规定的函数功能,如open/read/write。一个新的文件系统想要在某操作系统上被使用,就必须满足该操作系统VFS的要求
  3. 每打开一个文件,VFS就在主存中新建一个vnode,用统一的数据结构表示文件,无论该文件存储在哪个文件系统。注意:vnode只存在于主存中,而inode既会被调入主存,也会在外存中存储。在打开文件后,创建vnode,并将文件信息复制到vnode中,vnode的功能指针指向具体文件系统的函数功能

image-20230501195405790

为了实现VFS,Liunx主要抽象了四种对象类型。每个VFS对象都存放在一个适当的数据结构中,其中包含:

  • 超级块对象:表示一个已安装的特定文件系统
  • 索引节点对象:表示一个特定的文件
  • 目录项对象:表示一个特定的目录项
  • 文件对象:表示一个与进程相关的已打开文件

文件系统的挂载

文件系统挂载要做的事:

  1. 在VFS中注册挂载的文件系统。**内存中的挂载表(mount table)**包含每个文件系统的相关信息,包含文件系统类型、容量大小等
  2. 新挂载的文件系统,要向VFS提供函数地址列表
  3. 将新文件系统加到挂载点(mount point),也就是将新文件系统挂载在某个父目录下

参考

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值