zoukankan      html  css  js  c++  java
  • 《操作系统》课程笔记(Ch10-文件系统)

    文件概念

    属性

    • 文件名
    • 文件ID(唯一标记)
    • 类型
    • 位置
    • 大小
    • 保护策略(读、写、执行控制)
    • 时间、日期、用户标记

    相关结构

    • 文件控制块FCB

      用于存储与文件相关的信息,与文件一一对应。通常包含文件权限、日期、所有者、大小、数据块的指针。

    • 文件目录

    • inode

      UNIX中,每一个文件有对应的inode,里面包含文件的信息,与FCB类似。系统内部不使用文件名,而使用inode号码来识别文件。

    文件操作

    • 打开

      打开文件时,需要记录有关信息:

      • 文件指针
      • 文件的打开计数
      • 磁盘位置
      • 访问权限

      有的操作系统提供锁功能,来避免边写边读,导致值不可复现错误:

      • 共享锁:类似于读者锁,多个进程可以并发获取
      • 独占锁:类似于写者锁,一次只有一个进程可以获取
    • 关闭

    • 存取

      • 顺序访问

        从头到尾访问

      • 直接访问

        从某点切入访问

      • 借助索引访问

    盘和目录结构

    磁盘可以进行分区;盘或者分区可以通过RAID进行保护;包含文件系统的分区通常称为卷。

    目录可以视为文件名称构成的符号表。

    • 单级目录

      最简单的目录,所有文件都在同一目录中,按名访问,文件必须有唯一的名称

    • 两级目录

      每个用户有自己的UFD。用户搜索文件时,只搜索自己的UFD,解决了名称碰撞。但是这种隔离性让用户之间进行合作变得困难。

    • 树形目录

      使得用户可以创建自己的子目录并相应地组织文件

    • 无环图目录

      不同目录可以拥有同一个文件或目录,允许用户之间共享子目录和文件

      虚悬指针问题:如果一个用户删除了该文件,而另一个用户不知道

      • 解决方法:可以采用引用计数方案。

        设文件F1的当前引用计数值为1,先建立F1的符号链接文件F2,再建立F1的硬链接文件F3,然后删除F1。此时,F2和F3的引用计数值分别是?

        硬链接:新文件和被链接文件指向同一个节点,引用计数值加1。当删除被链接文件时,引用计数值减1,直到引用计数值为0时,才能真正删除文件。
        软链接:又叫符号链接,新文件中只包含了被链接文件的路径名,和被链接文件指向不同的节点。建立软链接文件时,文件的引用计数值不会增加。当被链接文件删除时,新文件仍然是存在的,只是不能通过新文件访问被链接文件。因此删除软链接时,引用计数值不变化
        因此,在本题中,当建立F2时,F1和F2的引用计数值都为1。当再建立F3时,F1和F3的引用计数值就都变成了2。当后来删除F1时,F3的引用计数值为2-1=1。F2的引用计数值仍然保持不变。

    • 通用图目录

      在添加链接时,可能破坏树形结构,形成有环的图。

      • 如何避免重复搜索环?可以限制搜索访问次数。
      • 如何解决自我引用导致的引用计数不降到0问题?可采用垃圾收集方案,两次遍历文件系统,确定可回收空间,但极为耗时。

    挂载

    文件系统被访问前,需要先被挂载在挂载点上。

    • mount
    • unmount

    文件共享

    • 在多用户系统中,可以通过用户ID和组ID进行访问权限控制
    • 在远程文件系统中,可以使用FTP、DFS(分布式文件系统)、WWW(万维网)、C/S架构
    • 支持共享的文件系统要考虑一致性语义,即如何处理多用户对文件的视图(一起变动,还是不立即可见?)

    保护

    文件需要进行访问权限控制。许多系统使用三种用户类型:所有者、组、其他,提供读、写、执行三种权限控制,这样共计3*3=9位控制点,每种类型3位,可用一个八进制数表示。

  • 相关阅读:
    智课雅思词汇---二十、前缀syn-sym-syl是什么意思
    运行php的时候出现计算机中丢失 MSVCR110.dll怎么解决
    解决PHP5.6版本“No input file specified”的问题
    PhpSpreadsheet如何读取excel文件
    [thinkphp使用phpspreadsheet时出现]Cannot redeclare xxxxxx() (previously declared in C:WWWxxx.xxx:xxx)
    thinkphp中如何使用phpspreadsheet插件
    thinkphp中composer方式安装的插件如何使用
    phpexcel如何读取excel的数据和如何导出数据到excel
    Composer如何安装(安装注意事项)
    enq: TX
  • 原文地址:https://www.cnblogs.com/zxuuu/p/13021782.html
Copyright © 2011-2022 走看看