基本概念

1. 文件系统和文件

1. 1 文件系统

一种用于持久性存储(掉电不会丢失数据,例如硬盘)的系统抽象。

1. 2 文件

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

1. 3 文件系统的功能

  1. (在磁盘角度)分配文件磁盘空间:
  • 管理文件块(哪一块属于哪一个文件)
  • 管理空闲空间(哪一块是空心啊的)
  • 分配算法
  1. (在用户角度)管理文件集合:
  • 定位文件及其内容
  • 命名:通过名字找到文件的接口
  • 文件系统类型
  1. 提供的便利及特征
  • 保护:分层来保护数据安全
  • 可靠性/持久性:保持文件的持久即使发生崩溃、媒体错误、攻击等。

1. 4 文件属性

名称、类型、位置、大小、保护、创建者、创建时间、最近修改时间

1. 5 文件头

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

2. 文件描述符

操作系统内核中,为每个进程维护一打开文件表,一个打开文件描述符石这个表的索引,每一个项保存了该文件的信息。

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

  • 文件指针:指向最近的一次读写位置,每个打开了这个文件的进程都指向这个指针
  • 文件打开计数:记录文件打开的次数(允许不同的进程同时打开一个文件)。当最后一个进程关闭了文件时,允许将其从打开文件表中移除。
  • 文件磁盘位置:打开文件一般用于读或者写,需要知道文件在磁盘中的位置。
  • 访问权限:每个程序访问模式信息

2. 1 不同视角下

  • 用户视图:持久的数据结构
  • 系统访问接口:字节的集合
  • 操作系统内部视角:块的集合(块是逻辑转换单元,而山区是物理转换单元)

注意:在文件系统中的所有操作都是在整个块空间上进行的(即使每次只访问1字节的数据,也会缓存整个buffer的数据)

例如,当用户需要给他2-12字节空间时:操作系统会获取字节所在的块然后返回块内对应部分。

2. 2 用户怎么访问文件

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

  • 顺序访问:按字节依次读取
  • 随机访问:从中间读取
  • 基于内容访问:通过特征

2. 3 文件内部结构

  • 无结构:单词、bit的结构
  • 简单记录结构:列、固定长度、可变长度
  • 复杂结构:格式化的文档(word、PDF)、可执行文件

2. 4 多用户系统中的文件共享

  • 访问控制

    谁能获得哪些文件的哪些访问权限

    访问模式:读、写、执行、删除、列举等

  • 文件访问控制列表ACL

    <文件实体,权限>

  • Unix模式

    <用户|组|其他人,读|写|可执行>

    用户ID识别用户/创建者,表明每个用户所允许的权限及保护模式

    组ID允许用户组成组,并指定了组访问权限

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

  • Unix文件系统语义

    对打开文件的写入内容立即对其他打开同一文件的其他用户可见。

    共享文件指针允许多用户同时读取和写入文件

  • 会话语义

    写入内容只有当文件关闭时可见

3. 目录

  • 文件以目录的方式组织起来

  • 目录是一类特殊的文件:每个目录都包含了一张表<name, pointer to file header>

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

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

  • 名字解析:逻辑名字转换成物理资源的过程(遍历文件目录知道找到目标文件)

  • 当前工作目录:每个进程都会指向一个文件目录用于解析文件名

    允许用户指定相对路径来代替绝对路径

  • 挂载

    • 一个文件系统需要先挂载才能被访问
    • 一个未挂载的文件系统被挂载在挂载点上(挂载点类似于目录)

4. 文件别名

两个或多个文件名关联同一个文件。

  • 硬链接:多个文件项指向一个文件

  • 软链接:以“快捷方式”指向其他文件。该文件中的内容是真实文件的逻辑路径名。

  • 若删除一个有别名的文件这个别名将成为一个悬空指针

  • 如何保证没有循环:

    • 只允许到文件的链接,不允许到子目录的链接。
    • 每增加一个新的链接都用循环检测算法确定是否合理

5. 文件系统种类

  • 磁盘文件系统

    • 文件存储在数据存储设备上,如磁盘。
    • 例如:FAT、NTFS等
  • 数据库文件系统
    • 文件根据其特征是可被寻址的
    • 例如:WinFS
  • 日志文件系统
    • 记录文件系统的修改/事件
    • 例如:journaling file system
  • 网络/分布式文件系统
    • 例如NFS、SMB
    • 文件可以通过网络被共享:文件位于远程服务器,客户端远程挂载服务器文件系统,标准系统文件访问被转换成远程访问
    • 分布式文件系统的问题:客户端和客户端上的用户辨别起来很困难。
  • 特殊/虚拟文件系统

清华操作系统课程(向勇、陈渝)笔记——第十二章(一)(基本概念:文件系统和文件,文件描述符,目录,文件别名,文件系统种类)相关推荐

  1. Android群英传笔记——第十二章:Android5.X 新特性详解,Material Design UI的新体验

    Android群英传笔记--第十二章:Android5.X 新特性详解,Material Design UI的新体验 第十一章为什么不写,因为我很早之前就已经写过了,有需要的可以去看 Android高 ...

  2. R语言实战笔记--第十二章 重抽样(置换检验)与自助法

    R语言实战笔记–第十二章 重抽样(置换检验)与自助法 标签(空格分隔): R语言 重抽样 自助法 置换检验 置换检验 双样本均值检验的时候,假设检验的方法就是,检查正态性.独立性.方差齐性,分别对应的 ...

  3. Linux(b站视频兄弟连)自学笔记第十二章——Linux服务管理

    Linux(b站视频兄弟连)自学笔记第十二章--Linux服务管理 服务分类 RPM包安装服务的管理 独立服务的管理 基于xinetd 的服务管理 源码包服务管理 服务分类 RPM包安装服务的管理 独 ...

  4. Android群英传读书笔记——第十二章:Android 5.X新特性详解

    第十二章目录 12.1 Android5.X UI设计初步 12.1.1 材料的形态模拟 12.1.2 更加真实的动画 12.1.3 大色块的使用 12.2 Material Design主题 12. ...

  5. css层叠样式表基础学习笔记--第十二章 我要自学网首页实战

    第十二章 我要自学网首页实战 12-01 页面分析 12-02 工作准备 12-03 搜索区块页面结构 12-04 导航条布局 12-05 幻灯片布局 12-06 公告栏布局 12-07 远程培训班布 ...

  6. 学习笔记-第十二章 恶意代码分析实战

    第12章 隐蔽的恶意代码启动 1.启动器启动器是一种设置自身或其他恶意代码片段以达到即使或将来秘密运行的恶意代码.启动器的目的是安装一些东西,以使恶意行为对用户隐蔽.启动器经常包含它要加载的恶意代码. ...

  7. 《DAMA数据管理知识体系指南》读书笔记-第十二章(元数据管理)

    目录 一.前言 二.内容结构 三.主要内容 1.引言 2.活动 3.工具 4.方法 5.实施指南 6.元数据治理 四.思考与总结 一.前言 本文是<DAMA数据管理知识体系指南>第12章的 ...

  8. apue读书笔记-第十二章

    1 可重入,线程安全,异步信号安全之间的区别? 可重入:可以重复进入,不会引起问题(这个概念最宽) 线程安全:被多个线程使用时,不会出问题,也就是可以被多个进程重入(新函数和被终端和被中断的函数不在同 ...

  9. 《Linux4.0设备驱动开发详解》笔记--第十二章:Linux设备驱动的软件架构思想

    待补充 转载于:https://www.cnblogs.com/zcjboke/p/5513130.html

  10. vilatile 深入理解java虚拟机_《深入理解Java虚拟机》笔记 第十二章 volatile变量

    当一个变量定义成volatile之后,它将具备两种特性: 1.第一是保证此变量对所有线程的可见性,这里的"可见性"是指当一条线程修改了这个变量的值,新值对于其它线程是可以立即得知的 ...

最新文章

  1. 提莫隐身+机器人能钩_航空工业官宣全新歼20正式亮相,可以隐身的变形金刚
  2. 求连续子数组的最大和
  3. 量子力学 一 基础7 酉算符与Hausdorff-Campbell公式
  4. Java基础篇:对象拷贝:clone方法 以及 序列化
  5. django入门记录 2
  6. 一起谈.NET技术,编写T4模板无法避免的两个话题:quot;Assembly Lockingquot;amp;quot;Debugquot;...
  7. 闪电邮修改服务器设置,网易闪电邮添加outlook邮箱的方法(图文教程)
  8. c语言程序设计徐立辉答案,C语言习题
  9. WSDL(Web服务描述语言)详细解析
  10. python下载歌曲教程视频_实现python批量下载网易云音乐的免费音乐
  11. matlab中的sparse函数使用
  12. Nim游戏、3的幂、4的幂
  13. 武汉前端技术和找工作微信交流群
  14. 如何解决cmd找不到路径问题
  15. 数据库学习(mysql)----一些理论
  16. 显示器 RUIGE瑞鸽高清显示器TL-S1700HD
  17. Java面向对象(下)
  18. java 16进制比较_java – 比较带符号的十六进制数
  19. LC792. 匹配子序列的单词数
  20. 【2016阿里安全峰会】风声与暗算,无中又生有:威胁情报应用的那些事儿【附PDF下载】...

热门文章

  1. Linux cpu为什么会超过100% ?
  2. springboot的配置文件
  3. USB TO I2C(上海同旺电子)调试器调试LM75A--TI
  4. Pikachu-敏感信息泄露
  5. Uncode系列开源后端开发组件
  6. 计算机网络的权威杂志,科学网—晒个自己整理的计算机网络和通信方向可能相关的期刊列表...
  7. python暴力破解压缩密码?
  8. ROVIO WowWee 路威小车
  9. SVCHOST启动服务实战
  10. yarn安装JEST报错:EPERM: operation not permitted, unlink 解决方法