当前位置: 首页 > news >正文

【操作系统】文件管理——文件存储空间管理(个人笔记)

学习日期:2024.7.17

内容摘要:文件存储空间管理、文件的基本操作


在上一章中,我们学习了文件物理结构的管理,重点学习了操作系统是如何实现逻辑结构到物理结构的映射,这显然是针对已经存储了文件的磁盘块的,那么,操作系统又是如何管理空闲磁盘块的呢?

文件存储空间管理

存储空间的划分与初始化

在安装Windows操作系统的时候,我们要将磁盘分区,有时候我们只有一个硬盘,但是能分出来CDE三个区,这是因为分区的过程是将物理磁盘划分为逻辑盘 。

存储空间会把每个盘分成目录区和文件区,目录区主要用于存放FCB等用于磁盘存储空间管理的信息,文件区用于存放文件数据。

空闲表法

适用于连续分配方式,如下图

 就是用一个表记录从哪里开始有多少个连续空闲块,分配和回收的方法也和内存管理中的连续分配方式类似,可以用几种算法决定如何分配。(链接:连续分配方式)需要专门注意的就是回收区前后都是空闲区时,要合并前后的表项

空闲链表法

空闲链表法又可以分成空闲盘块链空闲盘区链,二者的核心区别在于链表的“节点”是单独的盘块还是由连续空闲盘块组成的盘区。

不论那种方式,操作系统都会保存链头和链尾的指针

如果是使用空闲盘块链,当需要K个磁盘块时,从链头开始依次“取下”K个磁盘块 ,并修改链头指针,当回收磁盘块时,将空闲的盘块挂到链尾。显然,这种方式可以适用于离散分配的物理结构。

当使用空闲盘区链时,与空闲表法类似,同样可以用首次适应、最佳适应等算法,从链头开始检索,根据算法规则找出一个合适的空间分配给文件,只不过是空间由表格保存变为了用链表保存。

位示图法

其实就是用二进制位来表示盘块是否已分配,分配的是1,空闲的是0,用字号和位号来推算出盘块号。其实也算是某种表格,用(i,j)表示字号位号,像十字座标一样,确定一个盘块。

当盘块号,字号,位号都从0开始,字长为n时,(字号,位号)=(i,j)对应的盘块号 b=n*i+j

b号盘块对应的字号i=b/n 取整数部分                   位号 j =b%n

如何分配:若文件需要K个块,先顺序扫描位示图,找到K个"0",再根据字号和位号算出对应的盘块号分配出去,最后把"0"改成"1"即可。

成组链接法

空闲表法和空闲链表法在保存大文件时并不好用,因为空闲表或链表可能过大。UNIX系统中采用了成组链接法来对磁盘空闲块进行管理。文件卷的目录区中专门用一个磁盘块作为“超级块”,当系统启动时将超级块读入内存。

超级块中记录下一组空闲盘块数空闲块号,超级块连着下一组超级块,直到尽头用-1等特殊值表示没有下一组。每个分组的空闲盘块数目上限是一定的,图中是100个。

 每个分组的块号不需要连续,例子中是为了便于看出数量。

如何分配:若文件需要K个块,首先检查第一个分组的块数是否足够,不够则检查下一组,当检查到足够的分组时,分配空闲块,并修改分组的空闲块个数和块号。

当一个分组的块数全部用完后,要把下一个分组的信息存到其前置节点,类似链表删除节点,要把next节点接到前一个节点。

如何回收:若分组没满,只需要把回收的块号放入分组,并修改分组的空闲块个数和块号。若分组已经满了,则将超级块中的数据复制到新回收的块中,并修改超级块的内容,让新回收的块成为第一个分组。(类似链表头插法)

文件的基本操作

创建文件(Create系统调用)

进行Create系统调用时,需要提供:

1.所需的外存空间大小

2.文件存放路径(如 D:/demo)和文件名

操作系统在进行Create系统调用时,主要做了:

1.在外存中找到文件所需的空间并分配。(上一部分的内容)

2.根据文件存放路径的信息找到该目录对应的目录文件,然后创建该文件对应的目录项。

删除文件(Delete系统调用)

进行Delete系统调用时,需要提供:

1.文件存放路径和文件名

操作系统在进行Delete系统调用时,主要做了:

1.根据路径找到相应的目录文件,从目录中找到对应的目录项

2.根据文件存放路径的信息找到文件在外存中的存放位置、文件大小等信息,回收磁盘块。(回收时,根据使用管理策略的不同,用不同的方法,参考上面的内容)

3.从目录表中删除对应的目录项。

打开文件(Open系统调用)

进行Open系统调用时,需要提供:

1.文件存放路径和文件名

2.要对文件进行的操作类型(如 r只读,rw读写等等)

操作系统在进行Open系统调用时,主要做了:

1.根据路径找到相应的目录文件,从目录中找到对应的目录项,检查用户是否有相应的操作权限。

2.将目录项复制到内存中的“打开文件表”中,并将对应表目的编号返回给用户,之后用户使用打开文件表的编号来指明要操作的文件。

 把每个进程的打开文件表整合,就是整个系统的打开文件表,它可以方便实现某些文件管理的功能。比如说,有时候我们想删除某个文件时,操作系统会提示我们“暂时无法删除,因为该文件正在被xxx占用”,这其实就是操作系统检查了打开文件表,发现有进程正在使用该文件。

关闭文件(Close系统调用)

操作系统在进行Open系统调用时,主要做了:

1.将进程的打开文件表相应表项删除

2.回收分配给该文件的内存空间等资源

3.系统打开文件表的打开计数器count-1,若count=0 删除表项。

读文件(Read系统调用)

进行Read系统调用时,需要提供:

1.要读的文件

2.读入的数据和在内存中放入的位置

操作系统在处理read系统调用时,会从读指针指向的外存中,将用户直到大小的数据读入用户指定的内存区域中。

写文件(Write系统调用)

进行Read系统调用时,需要提供:

1.要读的文件

2.要写出的数据和要写出的数据放在内存中的位置

操作系统在处理read系统调用时,会从读指针指向的内存中,将用户直到大小的数据读入用户指定的外存区域中。


感谢您看到这里,如果满意的话麻烦您点个赞支持一下,个人主页还有更多内容分享。

个人能力不足,如有错漏还请指出,我会尽快修改。

内容总结自王道计算机考研《操作系统》 和 人民邮电出版社《操作系统导论》

相关文章:

【操作系统】文件管理——文件存储空间管理(个人笔记)

学习日期:2024.7.17 内容摘要:文件存储空间管理、文件的基本操作 在上一章中,我们学习了文件物理结构的管理,重点学习了操作系统是如何实现逻辑结构到物理结构的映射,这显然是针对已经存储了文件的磁盘块的&#xff0…...

微软GraphRAG +本地模型+Gradio 简单测试笔记

安装 pip install graphragmkdir -p ./ragtest/input#将文档拷贝至 ./ragtest/input/ 下python -m graphrag.index --init --root ./ragtest修改settings.yaml encoding_model: cl100k_base skip_workflows: [] llm:api_key: ${GRAPHRAG_API_KEY}type: openai_chat # or azu…...

数学建模-Topsis(优劣解距离法)

介绍 TOPSIS法(Technique for Order Preference by Similarity to Ideal Solution) 可翻译为逼近理想解排序法,国内常简称为优劣解距离法 TOPSIS 法是一种常用的综合评价方法,其能充分利用原始数据的信息, 其结果能精…...

嵌入式linux相机 转换模块

convert_manager.c #include <config.h> #include <convert_manager.h> #include <string.h>static PT_VideoConvert g_ptVideoConvertHead NULL;/*********************************************************************** 函数名称&#xff1a; Register…...

【自学安全防御】二、防火墙NAT智能选路综合实验

任务要求&#xff1a; &#xff08;衔接上一个实验所以从第七点开始&#xff0c;但与上一个实验关系不大&#xff09; 7&#xff0c;办公区设备可以通过电信链路和移动链路上网(多对多的NAT&#xff0c;并且需要保留一个公网IP不能用来转换) 8&#xff0c;分公司设备可以通过总…...

【Android】传给后端的Url地址被转码问题处理

一、问题 为什么使用Gson().toJson的时候&#xff0c;字符串中的会被转成\u003d 在 Gson 中&#xff0c;默认情况下会对某些特殊字符进行 HTML 转义&#xff0c;以确保生成的 JSON 字符串在 HTML 中是安全的。因此&#xff0c;字符 会被转义为 \u003d。你可以通过禁用 HTML 转…...

1.厦门面试

1.Vue的生命周期阶段 vue生命周期分为四个阶段 第一阶段&#xff08;创建阶段&#xff09;&#xff1a;beforeCreate&#xff0c;created 第二阶段&#xff08;挂载阶段&#xff09;&#xff1a;beforeMount&#xff08;render&#xff09;&#xff0c;mounted 第三阶段&#…...

设计模式使用场景实现示例及优缺点(行为型模式——状态模式)

在一个遥远的国度中&#xff0c;有一个被称为“变幻之城”的神奇城堡。这座城堡有一种特殊的魔法&#xff0c;能够随着王国的需求改变自己的形态和功能。这种神奇的变化是由一个古老的机制控制的&#xff0c;那就是传说中的“状态宝石”。 在变幻之城中&#xff0c;有四颗宝石&…...

抖音短视频seo矩阵系统源码(搭建技术开发分享)

#抖音矩阵系统源码开发 #短视频矩阵系统源码开发 #短视频seo源码开发 一、 抖音短视频seo矩阵系统源码开发&#xff0c;需要掌握以下技术&#xff1a; 网络编程&#xff1a;能够使用Python、Java或其他编程语言进行网络编程&#xff0c;比如使用爬虫技术从抖音平台获取数据。…...

基于 asp.net家庭财务管理系统设计与实现

博主介绍&#xff1a;专注于Java .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用感兴趣的可以先…...

allure_pytest:AttributeError: ‘str‘ object has no attribute ‘iter_parents‘

踩坑记录 问题描述&#xff1a; 接口自动化测试时出现报错&#xff0c;报错文件是allure_pytest库 问题分析&#xff1a; 自动化测试框架是比较成熟的代码&#xff0c;报错也不是自己写的文件&#xff0c;而是第三方库&#xff0c;首先推测是allure_pytest和某些库有版本不兼…...

C语言 反转链表

题目链接:https://leetcode.cn/problems/reverse-linked-list/description/?envTypestudy-plan-v2&envIdselected-coding-interview 完整代码: /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/// 反转链表…...

MFC CRectTracker 类用法详解

CRectTracker 类并非 Microsoft Foundation Class (MFC) 库中应用很广泛的一个类&#xff0c;一般教科书中很少有提到。在编程中如果需编写选择框绘制以及选择框大小调整、移动等程序时&#xff0c;用CRectTracker 类就会做到事半而功倍。下面详细介绍MFC CRectTracker 类。 M…...

好玩的调度技术-场景编辑器

好玩的调度技术-场景编辑器 文章目录 好玩的调度技术-场景编辑器前言一、演示一、代码总结好玩系列 前言 这两天写前端写上瘾了&#xff0c;顺手做了个好玩的东西&#xff0c;好玩系列也好久没更新&#xff0c;正好作为素材写一篇文章&#xff0c;我真的觉得蛮好玩的&#xff…...

提高自动化测试脚本编写效率 5大关键注意事项

提高自动化测试脚本编写效率能加速测试周期&#xff0c;减少人工错误&#xff0c;提升软件质量&#xff0c;促进项目按时交付&#xff0c;增强团队生产力和项目成功率。而自动化测试脚本编写效率低下&#xff0c;往往会导致测试周期延长&#xff0c;增加项目成本&#xff0c;延…...

护眼落地灯哪个更护眼?2024年度最值得入手的5款护眼大路灯推荐

落地灯和台灯哪个更护眼&#xff1f;之所以我们眼睛经常酸痛&#xff0c;很大部分的原因是因为我们长时间在不良光线下&#xff0c;将注意力集中在屏幕或书本上会导致眼睛肌肉过度使用&#xff0c;引发疲劳和酸痛。但也不排除不正确的坐姿或者工作环境缺乏适当的照明引起的&…...

DP讨论——适配器、桥接、代理、装饰器模式通用理解

学而时习之&#xff0c;温故而知新。 共性 适配器、桥接、代理和装饰器模式&#xff0c;实现上基本没啥区别&#xff0c;怎么区分&#xff1f;只能从上下文理解&#xff0c;看目的是啥。 它们&#xff0c;我左看上看下看右看&#xff0c;发现理解可以这么简单:都是A类调用B/…...

Apache AGE的MATCH子句

MATCH子句允许您在数据库中指定查询将搜索的模式。这是检索数据以在查询中使用的主要方法。 通常在MATCH子句之后会跟随一个WHERE子句&#xff0c;以添加用户定义的限制条件到匹配的模式中&#xff0c;以操纵返回的数据集。谓词是模式描述的一部分&#xff0c;不应被视为仅在匹…...

Netty Websocket

一、WebSocket 协议概述 WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。它允许服务端主动向客户端推送数据&#xff0c;从而实现了实时通信。WebSocket 建立在 HTTP 之上&#xff0c;但与 HTTP 的轮询&#xff08;Polling&#xff09;和长轮询&#xff08;Long Pol…...

用户注册业务逻辑、接口设计和实现、前端逻辑

一、用户注册业务逻辑分析 二、用户注册接口设计和定义 2.1. 设计接口基本思路 对于接口的设计&#xff0c;我们要根据具体的业务逻辑&#xff0c;设计出适合业务逻辑的接口。设计接口的思路&#xff1a; 分析要实现的业务逻辑&#xff1a; 明确在这个业务中涉及到几个相关子…...

突破性网络资源嗅探解决方案:从技术困境到智能下载的革命性跨越

突破性网络资源嗅探解决方案&#xff1a;从技术困境到智能下载的革命性跨越 【免费下载链接】res-downloader 资源下载器、网络资源嗅探&#xff0c;支持微信视频号下载、网页抖音无水印下载、网页快手无水印视频下载、酷狗音乐下载等网络资源拦截下载! 项目地址: https://gi…...

从DataBinding到Compose:一个老Android的UI数据绑定演进思考

从DataBinding到Compose&#xff1a;一个老Android的UI数据绑定演进思考 作为一名从Eclipse时代走过来的Android开发者&#xff0c;我见证了UI开发方式的多次变革。从最初手工调用findViewById的繁琐&#xff0c;到ButterKnife的注解简化&#xff0c;再到DataBinding带来的声明…...

避开这些坑!个人免签支付平台实战对比:蓝鲸、V云、云免签到底怎么选?

个人免签支付平台深度评测&#xff1a;如何根据业务需求选择最优方案&#xff1f; 对于独立开发者和小型站长来说&#xff0c;支付接入一直是令人头疼的问题。没有企业资质无法直接对接官方支付渠道&#xff0c;而传统的第三方支付平台又往往门槛高、手续费昂贵。近年来兴起的个…...

Qwen3-TTS-12Hz-1.7B-VoiceDesign效果展示:同一instruct跨语言声线迁移能力验证

Qwen3-TTS-12Hz-1.7B-VoiceDesign效果展示&#xff1a;同一instruct跨语言声线迁移能力验证 你有没有想过&#xff0c;同一个声音描述&#xff0c;比如“温柔的成年女性声音”&#xff0c;用中文说出来是一种感觉&#xff0c;用英文、日文说出来&#xff0c;会不会还是同一种感…...

宇视NVR接入AS-V1000平台全流程指南(含SDK端口配置避坑)

宇视NVR对接AS-V1000平台实战手册&#xff1a;从配置到排障的深度解析 当监控系统需要整合多品牌设备时&#xff0c;宇视NVR与AS-V1000平台的对接成为典型场景。不同于标准化的协议对接&#xff0c;SDK接入方式往往隐藏着诸多"暗礁"——从端口冲突到能力集匹配&#…...

少样本学习实战指南:从数据增强到多模态融合的5个关键技巧

少样本学习实战指南&#xff1a;从数据增强到多模态融合的5个关键技巧 在工业质检和医疗影像等实际场景中&#xff0c;数据稀缺问题长期困扰着机器学习工程师。传统深度学习模型需要海量标注数据&#xff0c;而现实情况往往是每个类别仅有几个样本可用。这种少样本学习&#xf…...

保姆级教程:在PVE上5分钟搞定一个Ubuntu LXC容器,并配置好Docker环境

5分钟极速部署&#xff1a;PVE上Ubuntu LXC容器与Docker环境全自动配置指南 刚接触家庭服务器的朋友往往被复杂的虚拟化环境劝退。今天分享的这套方案&#xff0c;能让你在PVE平台上用不到5分钟时间&#xff0c;快速获得一个开箱即用的Ubuntu容器&#xff0c;并预装好Docker环境…...

Stable Diffusion Lora训练避坑指南:为什么你的模型总是‘丑’?

Stable Diffusion LoRA训练实战&#xff1a;从“翻车”到精通的避坑手册 每次看到别人分享的精致LoRA模型&#xff0c;再看看自己训练出的"克苏鲁风格"作品&#xff0c;是不是有种砸键盘的冲动&#xff1f;别急着放弃——这可能是你训练流程中几个关键环节出了问题。…...

产品经理的‘外挂’:用DeepSeek+R1和墨刀AI,5分钟搞定智能对话APP的需求文档与原型图

产品经理的‘外挂’&#xff1a;用DeepSeekR1和墨刀AI&#xff0c;5分钟搞定智能对话APP的需求文档与原型图 在快节奏的互联网产品开发中&#xff0c;产品经理常常面临时间紧、任务重的挑战。从市场调研到需求分析&#xff0c;从文档撰写到原型设计&#xff0c;每个环节都需要投…...

轻量级免安装跨设备:浏览器插件如何重塑微信使用体验

轻量级免安装跨设备&#xff1a;浏览器插件如何重塑微信使用体验 【免费下载链接】wechat-need-web 让微信网页版可用 / Allow the use of WeChat via webpage access 项目地址: https://gitcode.com/gh_mirrors/we/wechat-need-web 在数字化办公日益普及的今天&#xf…...