操作系统:文件系统

news2024/11/24 17:52:51

文件系统

文件保护

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

口令保护

口令指用户在建立一个文件时提供一个口令,系统为其建立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),也就是将新文件系统挂载在某个父目录下

参考

  • https://www.eet-china.com/mp/a38145.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/480878.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

算法套路十四——动态规划之背包问题:01背包、完全背包及各种变形

算法套路十四——动态规划之背包问题:01背包、完全背包及各种变形 算法示例一——0/1背包: 0-1背包:有n个物品,第i个物品的体积为w[i],价值为v[i],每个物品至多选一个, 求体积和不超过capacity时的最大价值…

【状态机dp之 股票买卖 题型系列 帮你学懂 状态机】股票买卖(1-6道题)

股票买卖 股票买卖 1这道题就是求max {ai−aj|j<i} 股票买卖 2股票买卖 3方法一&#xff1a;前后缀拆分dp怎么想到的&#xff1f;方法二&#xff1a;状态机dpf[0/1][i]表示只考虑前i支股票且手头有/没有股票的最大收益 股票买卖 4考虑前 i 天的股票&#xff0c;第 i 天的 决…

深入浅出C++ ——C++11

文章目录 一、C11简介二、列表初始化二、声明四、范围for循环五、STL中的变化六、右值引用和移动语义1. 什么是左值&#xff1f;什么是左值引用&#xff1f;2. 左值引用与右值引用比较3. 右值引用使用场景和意义4. 完美转发 新的类功能默认成员函数类成员变量初始化defaultdele…

在Unity中制作完整的技能系统(介绍篇)

1. 系统结构介绍 首先我们需要对技能中的部分进行一个划分。通过观察&#xff0c;我们不难发现&#xff0c;在多个技能中经常有一些相同的内容&#xff08;以下的例子均来自于《英雄联盟》&#xff09;&#xff1a; 火男被动的燃烧一定时间持续伤害和提莫的E技能中毒一定时间…

【@Param注解】| 台面使用——>底层原理分析

🐇 🐇 😄 🐇 🐇 🐇 🐇 😄 🐇 🐇 🐇 🐇 😄 🐇 🐇 🐇 🐇 😄 🐇 🐇 🐇 🐇 😄 目录 🦁 定义🦁 台面使用🦁 底层原理分析🦁 尾声🐇 🐇 😄 🐇 🐇 🐇 🐇 😄 🐇 🐇 🐇 🐇 😄 🐇 🐇 🐇 🐇 😄…

【Python】什么是爬虫,爬虫实例

有s表示加密的访问方式 一、初识爬虫 什么是爬虫 网络爬虫&#xff0c;是一种按照一定规则&#xff0c;自动抓取互联网信息的程序或者脚本。由于互联网数据的多样性和资源的有限性&#xff0c;根据用户需求定向抓取相关网页并分析已成为如今主流的爬取策略爬虫可以做什么 你可以…

【JAVAEE】JAVA数据库连接(JDBC)

1.什么是JDBC&#xff1f; Java数据库连接&#xff0c;&#xff08;Java Database Connectivity&#xff0c;简称JDBC&#xff09;是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口&#xff0c;提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsyste…

[优雅的面试]MySQL与Redis双写一致性方案

前言 由于缓存的高并发和高性能已经在各种项目中被广泛使用&#xff0c;在读取缓存这方面基本都是一致的&#xff0c;大概都是按照下图的流程进行操作&#xff1a; 但是在更新缓存方面&#xff0c;是更新完数据库再更新缓存还是直接删除缓存呢&#xff1f;又或者是先删除缓存再…

TypeError: Object of type ‘Decimal‘ is not JSON serializable

错误 TypeError: Object of type ‘Decimal’ is not JSON serializable 场景 该错误是在Python3中使用Flask的报错&#xff0c;之前代码是运行正常的&#xff0c;时过几年后再次安装部署&#xff0c;确出现问题。 分析 经过分析发现依旧是版本依赖导致的更新问题。最近在…

JS手写实现Promise.race

Promise.race() 是一个常见的 JavaScript Promise 方法&#xff0c;它接受一个 Promise 数组作为参数&#xff0c;并返回一个新的 Promise 对象。这个新的 Promise 对象在传入的 Promise 数组中&#xff0c;任意一个 Promise 对象状态变为 fulfilled 或者 rejected&#xff0c;…

57.网页设计图标实战

首先我们需要找一个图标库&#xff0c;本次演示采用的是heroicon ● 之后我们根据需求搜索与之想匹配的图标并复制svg代码 ● 之后将我们的代码复制到我们想要放置图标的地方 ● 当然我们需要使用CSS来修饰一下 .features-icon {stroke: #087f5b;width: 32px;height: 3…

Python——Pyqt5的数据可视化小工具(完整代码)

前言 作业要求&#xff1a;【都已经打包放网上了&#xff0c;有缘人需要就自取】 一份报告书&#xff08;在全球变暖背景下碳中和对各国的二氧化碳排放量的影响项目报告书&#xff09; 一份代码 作业包&#xff1a;python数据可视化小工具.zip - 蓝奏云 大一的时候&#xff0c;…

Java 整合常用docker Api

整合环境&#xff1a; 与docker 版本差异不大&#xff0c;基本都可以 API version: 1.26开放docker api &#xff0c;两种方式 /etc/sysconfig/docker &#xff0c;最后一行添加&#xff1b;开放端口&#xff1a;2375 -H tcp://0.0.0.0:2375systemctl status docker 查询 d…

vsftpd.conf参数配置

文章目录 初始vsftdp.conf翻译后需修改参数write_enableYES&#xff08;启用任何形式的FTP写入命令&#xff09;userlist_file/etc/vsftpd.user_list、userlist_enableYES、userlist_denyNOlocal_umask022&#xff08;放开权限&#xff09;chroot_local_userYES&#xff08;限定…

每日学术速递4.29

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.LG 1.A Cookbook of Self-Supervised Learning 标题&#xff1a;自监督学习食谱 作者&#xff1a;Randall Balestriero, Mark Ibrahim, Vlad Sobal, Ari Morcos, Shashank Shekhar, Tom…

学知识变现,看完这些就够了

点击查看【18本知识变现电子书】 100个实用知识点 60万字知识变现精华 资深知识变现教练海哥扛鼎之作 2000多位学员实战经验干货总结 从理论到实践&#xff0c;从思维到实操 教你彻底学透如何知识变财富 .......... 全网最全知识变现知识付费电子教程 资深知识变现教练海…

Linux线程相关函数:线程的创建、属性、回收、退出、取消

1. 线程号 进程号在系统中唯一&#xff0c;但线程号只在其所属进程环境中有效。 &#xff08;1&#xff09;pthread_self函数 #include<pthread.h>pthread_t pthread_self(void); /* 功能&#xff1a;获取线程号 返回值&#xff1a;调用此函数线程的ID */ pthread_se…

【Unity-UGUI控件全面解析】| Panel 容器组件详解

🎬【Unity-UGUI控件全面解析】| Panel 容器组件详解一、组件介绍二、组件属性面板三、代码操作组件💯总结🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN🙉 🎄 学习专栏推荐:Unity系统学习专栏 🌲 游戏制作专栏推荐:游…

2007-2020年上市公司数字经济化指标含原始数据和计算代码(do文档)

2007-2020年上市公司数字经济化指标含原始数据和计算代码&#xff08;do文档&#xff09; 1、时间&#xff1a;2007-2020 2、范围&#xff1a;A股上市公司剔除jin rong行业 3、数据说明&#xff1a;包含计算过程和原始数据 4、参考文献&#xff1a;祁怀锦,数字经济对公司治…

利用C#实现动态替换桌面快捷方式对应的应用程序

公司有一个特殊的业务可能会用到这个&#xff0c;至于什么业务就不展开了。本文的内容作为备用方案。 实现思路&#xff1a; 1 获取当前exe程序运行的全路径 2 获取桌面的所有快捷方式 3 遍历快捷方式&#xff0c;获取快捷键方式对应程序的运行路径&#xff0c;并与当前…