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

学习日期: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系统调用时,会从读指针指向的内存中,将用户直到大小的数据读入用户指定的外存区域中。


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

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

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

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

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

相关文章

简单实用的企业舆情安全解决方案

前言:企业舆情安全重要吗?其实很重要,尤其面对负面新闻,主动处理和应对,可以掌握主动权,避免股价下跌等,那么如何做使用简单实用的企业舆情解决方案呢? 背景 好了,提取词…

【React打卡学习第一天】

React入门 一、简介二、基本使用1.引入相关js库2.babel.js的作用 二、创建虚拟DOM三、JSX(JavaScript XML)1.本质2.作用3.基本语法规则定义虚拟DOM时,不要写引号。标签中混入JS表达式时要用{}。样式的类名指定不要用class,要用className.内联…

中国贸易外经统计年鉴(2006-2023年)

数据年限:2006-2023年全 数据格式:pdf、excel、caj 数据内容:《中国贸易外经统计年鉴》是一部反映中国国内贸易、对外经济贸易和旅游业发展情况的资料性年刊。收录了 中国国内消费品市场、批发和零售业、住宿和餐饮业、国际收支、对外贸易、利…

Web前端知识视频教程分享

资料下载地址: https://545c.com/f/45573183-1323782723-42d3b2?p7526 (访问密码: 7526)

mysql的索引事务和存储引擎

一、索引 1、索引 索引的概念 :索引是一个排序的列表,在列表当中存储索引的值以及索引值对应数据所在的物理行。 索引的引用: 使用索引之后,就不需要扫描全表来定位某行的数据。 加快数据库的查询速度。 索引可以是表中的一…

智慧园区解决方案PPT(44页)

智慧园区解决方案摘要 一、引言 随着科技的飞速发展,智慧化已成为园区建设与发展的重要趋势。然而,传统园区在智慧化方面仍存在诸多不足,如政企互动便捷化不足、园区治理智能化单一、运营生态化缺失等问题。为此,我们提出了以“…

TI 【ads131m02】DSP TMS320F280049C调试与学习笔记

ads131m02 调试与学习笔记 时序SPI 参考链接: ADS131M02_TI官网资料参考 ADS131M02—英文使用手册 ADS131M0x—参考代码 Example C Code ADS131M02 是一款 two 通道、同步采样、24 位、ΔΣ 模数转换器 (ADC),具有宽动态范围、低功耗和电能测量特定功能…

二叉树的构造

二叉树的构造(前后序用来确定根的位置,中用来划分左右子树 最大二叉树(递归要先写终止条件 终止条件 终止条件 每次找最大的结点为分界点以及根节点,左边构成左子树,右边构成右子树,递归 class Solution {…

【Docker】Docker-harbor私有仓库部署与管理

目录 一.Harbor 概述 1.什么是Harbor 2.Harbor的特性 3.Harbor的构成 二.Harbor 部署 1.部署 Docker-Compose 服务 2.部署 Harbor 服务 3.启动 Harbor 4.创建新项目 5.创建用户 6.本地上传镜像 7.从Harbor下载镜像 三.镜像同步 1.定时拉取 2.主动推送 四.管理 …

SwiftUI 5.0(iOS 17)滚动视图的滚动目标行为(Target Behavior)解惑和实战

概览 在 SwiftUI 的开发过程中我们常说:“屏幕不够,滚动来凑”。可见滚动视图对于超长内容的呈现有着多么秉轴持钧的重要作用。 这不,从 SwiftUI 5.0(iOS 17)开始苹果又为滚动视图增加了全新的功能。但是官方的示例可…

双向链表_代码实现

代码实现的专题:只有手撕代码:),附上重点注释;重要的环节,会配上相应的调试截图与运行截图 。 总之,重点在代码,关于基础理论部分:(还在写) 定义…

Python数据可视化之numpy的11个常用的创建数组的函数

numpy库 在处理成千上万的数据时,Python的1维列表已经不适合来对数据进行处理,效率会很慢,所以numpy就诞生了,他可以将列表变成数组,而数组可以是1维、2维、3维甚至更高纬度,可用于存储和处理大型的矩阵&a…

js | Core

http://dmitrysoshnikov.com/ecmascript/javascript-the-core/ Object 是什么? 属性[[prototype]]对象。 例如,下面的,son是对象,foo不是对象。打印出来的son,能看到有一个prototype 对象。 prototype vs _proto_ v…

Kafka消息队列python开发环境搭建

目录 引言 Kafka 的核心概念和组件 Kafka 的主要特性 使用场景 申请云服务器 安装docker及docker-compose VSCODE配置 开发环境搭建 搭建Kafka的python编程环境 Kafka的python编程示例 引言 Apache Kafka 是一个分布式流处理平台,由 LinkedIn 开发并在 2…

【BUG】已解决:WslRegisterDistribution failed with error: 0x800701bc

已解决:WslRegisterDistribution failed with error: 0x800701bc 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷分享知识,武…

Word文档恢复竟然这么简单?3个推荐方案送上!

“我很喜欢用Word进行文字创作,可是我有一次重新打开我的Word文档,却显示文档已丢失,这该怎么办呢?凝聚我多年心血的文章还有可能恢复吗?” 不论是总结学习内容还是汇报工作成果,我们总会用上Word。Word作…

level 6 day2 网络基础2

1.socket(三种套接字:认真看) 套接字就是在这个应用空间和内核空间的一个接口,如下图 原始套接字可以从应用层直接访问到网络层,跳过了传输层,比如在ubtan里面直接ping 一个ip地址,他没有经过TCP或者UDP的数…

大数据量接口响应慢-传输优化

问题 接口一次性返回大量数据,导致JSON数据大小过大,带宽大小不足,导致接口响应时间过长 解决方案 通过数据传输压缩来降低传输数据的大小,从而提高传输效率 服务器端压缩 springboot项目配置application文件,通过…

不懂U盘文件恢复?学会这4个方法点亮技能点!

“向广大网友求助:U盘里的文件意外删除了还有机会恢复吗?工作的时候不小心删除了存储在U盘里的重要文件,撤销也恢复不了,我还有其他的办法吗?” 相信大家在日常生活中,为了储存和随时携带重要的文件信息&a…

第5章 单片机的中断系统

5.1 中断的概念 5.2 中断控制系统 5.3 中断处理过程 5.4 中断的编程及应用举例 5.1 中断的概念 日常生活的中断现象举例 中断是指在突发事件到来时先中止当前正在进行的工作,转而去处理突发事件。待处理完成后,再返回到原先被中止的工作处&#xff…