【操作系统/OS笔记17】文件系统基本概念、文件描述符、文件系统访问、文件别名、文件系统种类
本次笔记内容:
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】文件系统基本概念、文件描述符、文件系统访问、文件别名、文件系统种类相关推荐
- 《Python Cookbook 3rd》笔记(5.18):将文件描述符包装成文件对象
将文件描述符包装成文件对象 问题 你有一个对应于操作系统上一个已打开的 I/O 通道 (比如文件.管道.套接字等)的整型文件描述符,你想将它包装成一个更高层的 Python 文件对象. 解法 一个文件 ...
- linux 文件指针,Linux中文件描述符fd与文件指针FILE*互相转换实例解析
本文研究的主要是Linux中文件描述符fd与文件指针FILE*互相转换的相关内容,具体介绍如下. 1.文件描述符fd的定义:文件描述符在形式上是一个非负整数.实际上,它是一个索引值,指向内核为每一个进 ...
- 文件描述符fd和文件指针File* fp的区别和转换
在linux系统中把设备和普通文件也都看做是文件,要对文件进行操作就必须先打开文件,打开文件后会得到一个文件描述符,它是一个很小的正整数,是一个索引值. 内核会为每一个运行中的进程在进程控制块pcb ...
- linux文件描述符与标识符,文件描述符fd
这里以问答的方式来讨论这个问题: 1. 文件描述符 fd 和文件指针 FILE *的关系? 文件描述符是什么?我们知道每一个进程都有一个自己的PCB(进程控制块),进程控制块的结构是: struct ...
- Linux中的文件描述符与打开文件之间的关系
1. 概述 在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文件.链接文件和设备文件.文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是 ...
- linux c中的文件描述符与打开文件之间的关系
转载请说明出处:http://blog.csdn.net/cywosp/article/details/38965239 1. 概述 在Linux系统中一切皆可以看成是文件,文件又可分为:普通 ...
- 文件描述符与打开文件的关系
所有执行I/O操作的系统调用都以文件描述符,即一个非负整数来指代所打开的文件.文件描述符可以用来表示所有类型的已打开文件.同时,多个文件描述符可以指向同一个打开文件,因为有在不同进程中打开同一个文件的 ...
- Linux下多个进程可以同时打开同一个文件吗?文件描述符与打开文件的关系?
一:结论 1.两个进程中分别产生生成两个独立的fd 2.两个进程可以任意对文件进行读写操作,操作系统并不保证写的原子性 3.进程可以通过系统调用对文件加锁,从而实现对文件内容的保护 4.任何一个进程删 ...
- linux中文件描述符fd和文件指针flip的理解
整理自:http://www.cnblogs.com/Jezze/archive/2011/12/23/2299861.html 简单归纳:fd(file descriptor)只是一个整数,在ope ...
最新文章
- 2021年大数据Kafka(三):❤️Kafka的集群搭建以及shell启动命令脚本编写❤️
- 干货:阅读跟踪 Java 源码的几个小技巧!
- oracle 整个表空间迁移,oracle11g迁移表空间
- Linux 命令之 cut
- 2017.12.20-21
- 【转载】浅析输入法原理
- 解除ASP.net上传文件大小的限制
- python 的库如何开发_Python开发者必备6个基本库
- 绿联蓝牙驱动 linux,Ugreen绿联蓝牙驱动下载
- DWF是个什么格式,要怎么进行相应的格式转换?
- vue+elementUI 打印pdf文件
- 《应用时间序列分析:R软件陪同》——2.6 MA 模型
- 中国有些东西不是给人吃的
- 阿帕拉契州立大学代表团访问AURAK
- 车辆违章查询接口,获取支持城市参数接口示例
- bzoj:1703: [Usaco2007 Mar]Ranking the Cows 奶牛排名
- vscode中文备注出现方框标注显示此字符非ascii字符如何取消
- @Cacheable和@CacheEvict的学习使用
- 安卓仿陌陌用户详情页轮播图联动效果
- 人脸识别(cv2库的实现)
热门文章
- 【Postgresql-9.6.8】触发器实例(记录增、删、改)
- python的异常处理及异常类定义
- MacOS~jenkins里解决docker执行权限问题
- 抛弃百度UMEditor,拥抱summernote (解决上传文件又慢又卡的问题)
- 解决Python开发中,Pycharm中无法使用中文输入法问题
- 【Selenium-WebDriver自学】出现的问题和解决方案(十七)
- 客户读取文件服务器上文件的过程,java从服务器上读取文件
- text/x-jquery-tmpl做分页查询
- _Linux学习笔记
- 陇东学院计算机学院教授有,陇东学院