OS复习笔记ch12-1

news2025/1/18 6:28:19

文件系统

概述

文件是大多数应用程序的核心要素,文件系统是操作系统对用户来说最重要的部分之一。
本章的主要内容见下图:
image.png
文件,大家耳熟能详的就是的docx、pdf、jpg、MP4等各种后缀文件,根据任务需要文件又分成了文本、图片、表格、视频等类型。那么文件该如何定义呢?


说白了,文件就是一组有意义的信息集合。我们新建一个文件,核心目的就是为了存储一些有用的信息,比如各种申请表、证件照、产品说明等等,一般不会无故创建文件。
文件自身有很多的属性,比如文件名、标识符、类型、位置(路径)、大小、保护信息等。
OS一般都会封装一些常见的文件操作作为系统调用,比如create、delete、open、close等,在Linux中我们可以编写C代码,通过#include <fcntl.h>来引入。

接下来我们来了解一些文件的组织形式。

文件的组织和访问

  1. 无结构文件:流式文件,文件体为字节流,不划分记录(常见的.txt文件)
  2. 有结构文件:记录式文件,每条记录由若干数据项组成。
    1. 累积文件(Pile,文件体为无结构的记录序列,通过特定分隔符来划分记录,各记录大小和组成可变;最简单文件组织,例如数据库的log)
    2. 索引文件(Indexed file,记录大小不必相同,不必排序。比如词典A/B/C/D……,溢出的新词一般放在最后)
    3. 顺序文件(Sequential file,主文件和临时文件构成,记录格式固定,大小相同;不过在磁盘中即使排列有序也无法通过算法进行快速查找)
    4. 索引顺序文件(在顺序文件的基础上根据区间建立索引,甚至可以建立多级索引)
    5. 哈希文件(Direct/Hash file,主文件和溢出文件组成,通过哈希函数计算出记录在文件中的相对位置)

image.png
其中,有结构文件根据记录长度是否相等又分为定长记录和可变长记录。

索引文件在文件记录中快速查找,同时可以对非关键字建立索引(比如姓名),但是一旦修改之后维护成本高。哈希查找速度更快,同时会有溢出文件。现在的通用计算机不会插入一条记录到文件系统,只有数据库管理系统才会有类似的记录。

在记录数量较大时,索引顺序比顺序文件大大缩短检索时间。
顺序文件是N/2,而索引顺序文件(一级索引)是 i 2 + ( N / i ) 2 = ( i + N / i ) 2 \frac{i}{2} + \frac{(N/i)}{2} = \frac{(i + N/i)}{2} 2i+2(N/i)=2(i+N/i),其中i为索引长度,N/i是每个索引映射的文件范围。
举个🌰,1,000,000条记录的文件,顺序文件的平均检索长度为500,000,有1,000条索引项的索引文件,平均检索长度为(1,000+1,000,000/1,000)/2 = 1000。

索引还可以是多级的,二级索引的平均索引长度更短,查询速度更快。
同理,假设i1 = i2 = 100,那么结果作为N‘ = i 1 2 + i 2 2 + N / ( i 1 × i 2 ) 2 \frac{i_1}{2}+\frac{i_2}{2}+\frac{N/(i_1 \times i_2)}{2} 2i1+2i2+2N/(i1×i2) = 50+50+50 = 150

管理层次

image.png
从下之上,依次是设备驱动程序→基本文件系统→基本 I/O 管理程序→逻辑 I/O 层→实际文件→用户程序(了解即可)

  • 磁盘和磁带驱动,统称为设备驱动程序。它们直接与外围设备通信,负责启动一个设备上的I/O 操作,并继续处理I/O 请求的完成。
  • 基本文件系统,即物理I/O层,处理与磁盘等系统交换的数据块,关注数据块在辅存中的放置,关注在主存中缓冲的数据块
  • 基本I/O管理程序,负责文件I/O 的开始和终止,维护控制结构,辅助磁盘/磁带调度,负责缓冲区的指定和辅存的分配
  • 逻辑I/O,使得用户和应用程序可以访问到记录,提供通用的记录I/O 操作的能力,维护有关文件的基本数据

image.png
这张图展示了文件管理系统的关键组成部分及其相互关系,包括文件结构、目录管理、访问方法、文件操作功能,以及用户访问控制。系统还涉及物理存储管理,如内存中的物理块、磁盘调度、I/O处理、文件分配与空闲存储管理。每个部分都是文件系统性能和效率的关键,需要良好的协调和优化以确保整个系统的高效运作。

文件目录

目录是由文件说明组成的用于文件检索的特殊文件。文件目录的内容主要是文件访问的控制信息(不包括文件内容),主要作用如下:

  • 实现按名存取
  • 提高目录检索速度
  • 文件共享
  • 解决文件重名问题
  1. 文件控制块(FCB)
    文件控制块是操作系统为管理文件而设置的数据结构,存放了为管理文件所需的有关信息(文件属性),类似进程控制块PCB。
  • 文件控制块是文件存在的标志
  • 文件控制块构成文件目录项
    image.png

FCB有多条信息供给系统,包括文件属性、位置(路径)、属主等。而文件属性包括了文件的基本信息、存取控制信息、使用信息等等。

  1. 文件目录:
    把所有的FCB组织在一起,就构成了目录文件,即文件控制块的有序集合,其中一个FCB就称作一个目录项。
    image.png
    文件名在特定的目录里面必须是唯一的,不能重名。
    不同系统有不同的命名规则,比如有些系统不支持某些特殊符号,有的支持修改有的不支持。

image.png

  • 文件目录也是一个文件
  • 提供文件名与文件自身的映射(双击进入)
  1. 一级目录
  • 线性结构,一个文件一个表项
  • 以文件名为关键字的顺序文件
  • 无法管理和组织文件
  • 没有解决重名问题
    image.png
  1. 二级目录
    image.png
    在主目录下每个用户目录对应一个目录项,解决了不同用户之间的文件重名问题,没有解决用户自身文件重名问题,或者说不能进行文件分类。
  2. 多级目录
    image.png
    每个用户目录下可以有子目录和文件,彻底解决了文件重名问题
  • 文件命名
    image.png
    按名存取,同一路径下不能重名,查找的时候名字是最关键的
  • 工作目录
    image.png
    除了绝对路径,我们常常会基于当前目录/工作目录使用相对路径,比如.表示当前目录,..表示父目录。在Linux类OS中,使用pwd指令就可以知道当前的工作目录了。
  1. 改进的多级文件目录
    image.png
    首先说一下索引节点inode (index node)是指在许多“类Unix文件系统”中的一种数据结构,用于描述文件系统对象(包括文件、目录、设备文件、socket、管道等)。每个inode保存了文件系统对象数据的属性和磁盘块位置。文件系统对象属性包含了各种元数据(如:最后修改时间) ,也包含用户组(owner)和权限数据。
    基于iNode改进的多级目录:
  • 符号文件目录:只有文件名和内部标识iNode组成树状结构,可以按文件名排序
  • 基本文件目录:一张大表,包含iNode和对应文件的全部详细信息。

举个🌰,
image.png
分解前,遍历读取才能知道文件在哪个盘块,平均需要13/2 = 6.5,也就是7次

而分解后,先查找符号目录,两个盘块平均就是一次,然后由于iNode大小确定,通过符号目录编号iNode计算出偏移量,然后根据基址变址寻址找到文件的基本目录项,再查看文件权限和数据等,也就是说总共平均是两次。这样确实能有效减少访问硬盘的次数,提高检索速度

到此总结一下,常见的三种文件目录查询技术:

  • 目录查询:用户给出文件名,按名寻找目录项(FCB,或索引节点)。
  • 线性检索:
    • 全路径名:从根开始
    • 相对路径:从当前目录开始
  • Hash检索:hashed structure,通过键值对进行查询

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

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

相关文章

c++ 中如何往 string 字符串类型里插入浮点数

谢谢&#xff0c;在看王老师课程时&#xff0c;有如此用法&#xff0c;单独拿出来记录一下 (2) 这是为什么呢&#xff1f; 其实 cout << 3.33 ; 这样的代码是可以直接编译通过。 cout 就是 ostream 类型的对象。此类对象可以保存任何类型的数据。 STL 库为我们写好了大量…

Linux 五种IO模型

注&#xff1a;还有一种信号驱动IO&#xff0c;使用较少暂不讨论&#xff1b; 一&#xff0c;区分阻塞、非阻塞和同步、异步 看了很多文章对这两组概念解释和对比&#xff0c;说的太复杂了&#xff0c;其实没必要&#xff0c;两句话就能说清楚。 首先&#xff0c;对于读数据rec…

黑马苍穹外卖6 清理redis缓存+Spring Cache+购物车的增删改查

缓存菜品 后端服务都去查询数据库&#xff0c;对数据库访问压力增大。 解决方式&#xff1a;使用redis来缓存菜品&#xff0c;用内存比磁盘性能更高。 key :dish_分类id String key “dish_” categoryId; RestController("userDishController") RequestMapping…

如何配置taro

文章目录 step1. 全局安装wepacksetp2. 使用npm安装tarostep3. 项目初始化 使用taro时需要在本地配置好nodejs环境&#xff0c;关于如何配置nodejs可参考我的这篇博文 如何配置nodejs环境 step1. 全局安装wepack 使用指令npm install webpack -g即可 安装完成后可看到有wepa…

使用Vue+Antv-X6实现一个输送线可视化编辑器(支持拖拽、自定义连线、自定义节点等)

最近公司有这样的业务&#xff0c;要实现一个类似流程图的编辑器&#xff0c;可以拖拉拽之类的&#xff0c;网上寻找了一番&#xff0c;最终决定使用Antv-X6这个图形引擎&#xff0c;非常强大&#xff0c;文档多看几遍也就能上手使用了。感觉还不错就写个使用心得期望能帮助到同…

2000年 - 2022年 Fama-French三因子模型数据+代码

Fama-French三因子模型是由著名经济学家尤金法玛&#xff08;Eugene Fama&#xff09;和肯尼斯法兰奇&#xff08;Kenneth French&#xff09;提出的&#xff0c;旨在改进资本资产定价模型&#xff08;CAPM&#xff09;&#xff0c;更全面地解释资产收益率的变化。该模型认为&a…

论文笔记:Spatial-Temporal Interval Aware Sequential POI Recommendation

ICDE 2022 1 intro 1.1 背景 空间&#xff08;Spatial&#xff09;和时间&#xff08;Temporal&#xff09;信息是序列 POI 推荐中两个重要且相辅相成的因素。 空间因素&#xff08;如地理距离间隔&#xff09;可以在用户的历史轨迹呈现空间分簇现象时&#xff0c;细粒度刻画…

主流中间件--Redis

NOSQL 什么是NOSQL NoSQL(NoSQL Not Only SQL )&#xff0c;意即“不仅仅是SQL”&#xff0c;它泛指非关系型的数据库。 关系型数据库&#xff1a;以关系(由行和列组成的二维表)模型建模的数据库。简单理解&#xff1a;有表的就是关系型数据库。 NOSQL分类 Redis 什么是Redi…

L02_并发编程知识图谱

这些知识点你都掌握了吗&#xff1f;大家可以对着问题看下自己掌握程度如何&#xff1f;对于没掌握的知识点&#xff0c;大家自行网上搜索&#xff0c;都会有对应答案&#xff0c;本文不做知识点详细说明&#xff0c;只做简要文字或图示引导。 并发理论 并发编程Bug源头 为了…

反射机制详解

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a;Java从入门到精通 ✨特色专栏&#xff…

读书笔记之智能商业

智能商业 本书试图勾勒的是未来商业的大蓝图&#xff0c;目前中国市场变化速度非常之快&#xff0c;作者用了一个词来形容现在市场发展的特殊性&#xff1a;三浪叠加 1.0浪&#xff1a;传统的零售2.0浪&#xff1a;国美、苏宁为代表的综合商城模式3.0浪&#xff1a;以淘宝为代…

STM32学习之一:什么是STM32

目录 1.什么是STM32 2.STM32命名规则 3.STM32外设资源 4. STM32的系统架构 5. 从0到1搭建一个STM32工程 学习stm32已经很久了&#xff0c;因为种种原因&#xff0c;也有很久一段时间没接触过stm32了。等我捡起来的时候&#xff0c;发现很多都已经忘记了&#xff0c;重新捡…

【mysql】常用操作:维护用户/开启远程/忘记密码/常用命令

一、维护用户 1.1 创建用户 -- 语法 > CREATE USER [username][host] IDENTIFIED BY [password];-- 例子&#xff1a; -- 添加用户user007&#xff0c;密码123456&#xff0c;并且只能在本地可以登录 > CREATE USER user007localhost IDENTIFIED BY 123456; -- 添加用户…

宇哥强调!7月份必须开始强化阶段(附规划)

七月开始强化不晚&#xff0c;但是要开始了&#xff01; 张宇老师说&#xff1a;七月&#xff0c;也就是暑假是大家学习的最佳时机&#xff0c;这个时候要大量的做题&#xff01; 如果你是三月份开始备考的&#xff0c;那么到了七月份&#xff0c;基础应该复习的差不多了&…

wget:unable to resolve host address ...(已解决)

写在前面&#xff1a; 最近在学习Linux命令&#xff0c;此问题是在使用wget安装rar时出现的问题&#xff0c;记录一下解决的过程。仅供参考&#xff0c;若有不当的地方&#xff0c;恳请指正。如果对你有帮助&#xff0c;欢迎点赞&#xff0c;关注&#xff0c;收藏&#xff0c;…

基于YOLOv5+pyqt5的跌倒检测系统(含pyqt页面、训练好的模型)

简介 跌倒是老年人和身体不便者常见的意外事故&#xff0c;及时检测和处理跌倒事件对于保障他们的安全至关重要。为了提高对跌倒事件的监控效率&#xff0c;我们开发了一种基于YOLOv5目标检测模型的跌倒检测系统。本报告将详细介绍该系统的实际应用与实现&#xff0c;包括系统…

OpenCv形态学(一)

目录 形态学转换 结构元素 腐蚀 膨胀 开运算 闭运算 形态学梯度 顶帽 黑帽 图像轮廓 查找轮廓 绘制轮廓 形态学转换 形态变换是一些基于图像形状的简单操作。通常在二值图像上执行。它需要两个输入&#xff0c;一个是我们的原始图像&#xff0c;第二个是决定操作性…

Nginx Proxy Manager反向代理Jackett

1 说明 最近折腾nas&#xff0c;发现npm反向代理Jackett后出现无法访问的问题&#xff0c;是因为外网访问jackett (例如https://domain.com:7373/jackett/UI/Dashboard)时&#xff0c;url会被重定向到https://domain.com/jackett/UI/Login?ReturnUrl%2Fjackett%2FUI%2FDashbo…

基于matlab的K-means聚类图像分割

1 原理 K-means聚类算法在图像分割中的应用是基于一种无监督的学习方法&#xff0c;它将图像中的像素点或特征区域划分为K个不同的簇或类别。以下是K-means聚类算法用于图像分割的原理&#xff0c;包括步骤和公式&#xff1a; 1.1 原理概述 选择簇的数量(K)&#xff1a; 首先…

《数字图像处理与机器视觉》案例一(库尔勒香梨果梗提取和测量)

一、引言 果梗是判断水果新鲜程度的重要标志&#xff0c;对水果的贮藏和保鲜也具有重要的参考价值。库尔勒香梨分级标准中对果梗有明确要求&#xff0c;要求果梗完整&#xff0c;但由于库尔勒香梨果梗颜色与果实接近&#xff0c;用传统的简单阈值分割方法难以提取。因此&#…