本次笔记内容:
12.1 文件系统:总体介绍
12.2 基本概念
12.3 基本概念——文件系统和文件
12.4 基本概念——文件系统的功能
12.5 基本概念——文件和块
12.6 基本概念——文件描述符
12.7 基本概念——目录
12.8 基本概念——文件别名
12.9 基本概念——文件系统种类

文章目录

  • 文件系统和文件的概念
  • 文件系统的功能(用户角度)
  • 文件和块(文件角度)
  • 文件描述符(编程者角度)
    • 文件描述符的概念与功能
    • 磁盘块与数据的对应
    • 用户怎么访问文件
    • 文件结构
    • 文件访问与保护
    • 语义:他人能否访问文件内数据
  • 目录
    • 目录路径遍历
    • 挂载
  • 文件别名
    • 如果删除了一个有别名的文件,会如何?
    • 应避免出现循环
  • 文件系统的种类

文件系统和文件的概念

文件系统:一种用于持久性存储的系统抽象。

  • 在存储器上:组织、控制、导航、访问和检索数据;
  • 大多数计算机系统包含文件系统;
  • 个人电脑、服务器、笔记本电脑;
  • iPod、Tivo/机顶盒、手机/掌上电脑;
  • Google可能是由一个文件系统构成的。

文件:文件系统中一个单元的相关数据在操作系统中的抽象。

文件系统的功能(用户角度)

  • 分配文件磁盘空间
    • 管理文件块(哪一块属于哪一个文件)
    • 管理空闲空间(哪一块是空闲的)
    • 分配算法(策略)
  • 管理文件集合
    • 定位文件及其内容
    • 命名:通过名字找到文件的接口
    • 最常见:分层文件系统
    • 文件系统类型(组织文件的不同方式)
  • 提供的便利及特征
    • 保护:分层来保护数据安全
    • 可靠性/持久性:保持文件的持久即使能发生崩溃、媒体错误、供给等

文件和块(文件角度)

文件属性:名称、类型、位置、大小、保护、创建者、创建时间、最近修改时间等等。

文件头:

  • 在存储元数据中保存了每个文件的信息;
  • 保存文件的属性;
  • 跟踪哪一块存储块属于逻辑上文件结构的哪个偏移。

文件描述符(编程者角度)

文件描述符的概念与功能

如上图,文件描述符是一个“数”,即操作系统中打开文件表中的index。

需要元数据数据来管理打开文件:

  • 文件指针:指向最近一次读写位置,每个打开了这个文件的进程都这个指针;
  • 文件打开计数:记录文件打开的计数,当最后一个进程关闭了文件时,允许将其从打开文件表中移除;
  • 文件磁盘位置:缓存数据访问信息;
  • 访问权限:每个程序访问模式信息。

用户视图:

  • 持久的数据结构。

磁盘块与数据的对应

系统访问接口:

  • 字符的集合(UNIX);
  • 系统不会关心你想存储在磁盘上的任何数据结构。

操作系统内部视角:

  • 块的集合(块是逻辑转换单元,而扇区是物理转换单元);
  • 块大小&扇区大小:在UNIX中,块的大小是4KB。

举例:

当用户说:给我2-12字节空间时会发生什么?

  • 获取字节所在的块;
  • 返回块内对应部分。

如果说要写2-12字节呢?

  • 获取块;
  • 修改块内对应部分;
  • 写回块。

在文件系统中所有操作都是在整个块空间上进行的,比如:getc()、putc()中,即使每次只能访问1字节的数据,也会缓存目标数据4096字节。

用户怎么访问文件

在系统层面需要知道用户的访问模式。

顺序访问:按字节依次读取。

  • 几乎所有的访问都是这种方式。

随机访问:从中间读写。

  • 不常用,但是仍然重要,例如,虚拟内存支持文件:内存页存储在文件中;
  • 更加快速:不希望获取文件中间的内容的时候也必须先获取块内所有字节。

基于内容访问:通过特征。

  • 许多系统不提供此种访问方式,相反,数据库是建立在索引内容的磁盘访问上(需要高效的随机访问)。

如上图,通过索引文件访问关系文件,这是典型的数据库模式,在操作系统中不常用。

文件结构

无结构:

  • 单词、比特的队列。

简单记录结构:

  • 列;
  • 固定长度
  • 可变长度

复杂结构:

  • 格式化的文档(如MS Word、PDF)
  • 可执行文件

实际上,操作系统通过“字节流”来理解组织文件,文件的具体结构与应用相关,与操作系统无关。由此可以简化操作系统的实现。

文件访问与保护

多用户系统中的文件共享是很必要的。

访问控制:

  • 谁能够获得哪些文件的哪些访问权限;
  • 访问模式:读、写、执行、删除、列举等。

文件访问控制列表(ACL):

  • (文件实体,权限)

Unix模式:

  • 将访问者分为三类:用户、组、所有人;
  • 将操作分为三类:读、写、可执行;
  • 用户ID识别用户,表明每个用户所允许的权限及保护模式;
  • 组ID允许用户组成组,并指定了组访问权限。

语义:他人能否访问文件内数据

指定多用户/客户如何同时访问共享文件:

  • 和过程同步算法相似;
  • 因磁盘I/O和网络延迟而设计简单。

Unix文件系统(UFS)语义:

  • 对打开文件的写入内容立即对其他打开同一文件的其他用户可见;
  • 共享文件指针允许多用户同时读取和写入文件。

会话语义:

  • 写入内容只有当前文件关闭时可见;
  • 保证会话结束后,其他进程访问文件都可成功。

锁:

  • 一些操作系统和文件系统提供该功能;
  • 不同力度的文件锁可以保证执行的高效性,比如同时写文件。

目录

目录定义如上图,层次名称空间也称层次目录结构。

目录的典型操作有:

  • 搜索文件
  • 创建文件
  • 删除文件
  • 枚举目录
  • 重命名文件
  • 在文件系统中遍历一个路径

操作系统应该只允许内核模式修改目录:

  • 确保映射的完整性
  • 应用程序能够读目录(如ls)

目录如何储存?

  • 文件名的线性列表,包含了指向数据块的指针,则编程简单、执行耗时;
  • Hash表(hash数据结构的线性表),减少目录搜索时间,可能有hash碰撞,大小是固定的。

目录路径遍历

目录路径遍历机制如上图。可以在缓存中存储当前工作目录,从而提高效率。

挂载

如上图,可以将文件系统挂载到目录上。可以在不同的挂载点上挂载不同的文件系统。

挂载机制实现起来较难,但是用起来较简单。

文件别名

如上图,文件名即一个文件有多个名字。

在Unix中,有硬链接和软链接两种方式:

  • 硬链接:多个文件项指向一个文件;
  • 软链接:以“快捷方式”的形式,指向其他文件(快捷方式的内容是另一个文件的路径名)。

如果删除了一个有别名的文件,会如何?

对于硬链接:只是引用计数减少1,只有引用计数等于0时,才真正删除。

对于软链接:快捷方式形成“悬空指针”。

别名的管理、映射方式如上图。

应避免出现循环

目录应为树状结构,如果出现循环,可能出现异常现象,因此应避免出现循环,如上图。可以使用检测算法等方式避免循环的出现。

文件系统的种类

如上图,文件系分为多个类别。

现在的文件系统增加了日志功能,防止掉电打断中间状态,文件丢失。

谷歌文件系统,一种分布式文件系统,可以高速、高吞吐率、高容错、高可靠地访问。

proc目录中,通过文件的方式来展现虚拟文件系统,使使用者可以很好地配置参数。

如上图,因其复杂性与多因素性,分布式文件系是实现时当前研究热点之一。

【操作系统/OS笔记17】文件系统基本概念、文件描述符、文件系统访问、文件别名、文件系统种类相关推荐

  1. 《Python Cookbook 3rd》笔记(5.18):将文件描述符包装成文件对象

    将文件描述符包装成文件对象 问题 你有一个对应于操作系统上一个已打开的 I/O 通道 (比如文件.管道.套接字等)的整型文件描述符,你想将它包装成一个更高层的 Python 文件对象. 解法 一个文件 ...

  2. linux 文件指针,Linux中文件描述符fd与文件指针FILE*互相转换实例解析

    本文研究的主要是Linux中文件描述符fd与文件指针FILE*互相转换的相关内容,具体介绍如下. 1.文件描述符fd的定义:文件描述符在形式上是一个非负整数.实际上,它是一个索引值,指向内核为每一个进 ...

  3. 文件描述符fd和文件指针File* fp的区别和转换

    在linux系统中把设备和普通文件也都看做是文件,要对文件进行操作就必须先打开文件,打开文件后会得到一个文件描述符,它是一个很小的正整数,是一个索引值.  内核会为每一个运行中的进程在进程控制块pcb ...

  4. linux文件描述符与标识符,文件描述符fd

    这里以问答的方式来讨论这个问题: 1. 文件描述符 fd 和文件指针 FILE *的关系? 文件描述符是什么?我们知道每一个进程都有一个自己的PCB(进程控制块),进程控制块的结构是: struct ...

  5. Linux中的文件描述符与打开文件之间的关系

    1. 概述 在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文件.链接文件和设备文件.文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是 ...

  6. linux c中的文件描述符与打开文件之间的关系

    转载请说明出处:http://blog.csdn.net/cywosp/article/details/38965239 1. 概述     在Linux系统中一切皆可以看成是文件,文件又可分为:普通 ...

  7. 文件描述符与打开文件的关系

    所有执行I/O操作的系统调用都以文件描述符,即一个非负整数来指代所打开的文件.文件描述符可以用来表示所有类型的已打开文件.同时,多个文件描述符可以指向同一个打开文件,因为有在不同进程中打开同一个文件的 ...

  8. Linux下多个进程可以同时打开同一个文件吗?文件描述符与打开文件的关系?

    一:结论 1.两个进程中分别产生生成两个独立的fd 2.两个进程可以任意对文件进行读写操作,操作系统并不保证写的原子性 3.进程可以通过系统调用对文件加锁,从而实现对文件内容的保护 4.任何一个进程删 ...

  9. linux中文件描述符fd和文件指针flip的理解

    整理自:http://www.cnblogs.com/Jezze/archive/2011/12/23/2299861.html 简单归纳:fd(file descriptor)只是一个整数,在ope ...

最新文章

  1. 2021年大数据Kafka(三):❤️Kafka的集群搭建以及shell启动命令脚本编写❤️
  2. 干货:阅读跟踪 Java 源码的几个小技巧!
  3. oracle 整个表空间迁移,oracle11g迁移表空间
  4. Linux 命令之 cut
  5. 2017.12.20-21
  6. 【转载】浅析输入法原理
  7. 解除ASP.net上传文件大小的限制
  8. python 的库如何开发_Python开发者必备6个基本库
  9. 绿联蓝牙驱动 linux,Ugreen绿联蓝牙驱动下载
  10. DWF是个什么格式,要怎么进行相应的格式转换?
  11. vue+elementUI 打印pdf文件
  12. 《应用时间序列分析:R软件陪同》——2.6 MA 模型
  13. 中国有些东西不是给人吃的
  14. 阿帕拉契州立大学代表团访问AURAK
  15. 车辆违章查询接口,获取支持城市参数接口示例
  16. bzoj:1703: [Usaco2007 Mar]Ranking the Cows 奶牛排名
  17. vscode中文备注出现方框标注显示此字符非ascii字符如何取消
  18. @Cacheable和@CacheEvict的学习使用
  19. 安卓仿陌陌用户详情页轮播图联动效果
  20. 人脸识别(cv2库的实现)

热门文章

  1. 【Postgresql-9.6.8】触发器实例(记录增、删、改)
  2. python的异常处理及异常类定义
  3. MacOS~jenkins里解决docker执行权限问题
  4. 抛弃百度UMEditor,拥抱summernote (解决上传文件又慢又卡的问题)
  5. 解决Python开发中,Pycharm中无法使用中文输入法问题
  6. 【Selenium-WebDriver自学】出现的问题和解决方案(十七)
  7. 客户读取文件服务器上文件的过程,java从服务器上读取文件
  8. text/x-jquery-tmpl做分页查询
  9. _Linux学习笔记
  10. 陇东学院计算机学院教授有,陇东学院