操作系统学习笔记---文件管理

news2025/1/23 13:05:34

文件系统基础

概念

文件:以计算机硬盘为载体的存储在计算机上的信息集合

文件的属性

文件具有一定的属性,系统不同,属性也会有所不同,但通第都包括如下属性:名称、标识符、类型、位置、大小、保护、时间、日期和用户标识。

文件的基本操作

操作系统提供系统调用,它对文件进行创建、写、读、重定位、删除和截断等操作。

(1)创建文件

创建文件有两个必要步骡:一是在文件系统中为文件找到空间;二是在目录中为新文件创建条目,该条目记录文件名称、在文件系统中的位置及其他可能的信息。

(2)写文件

写文件,执行一个系统调用,指明文件名称和要写入文件的内容。对于给定文件名称,系统搜索目录以查找文件位置。系统为该文件维护一个写位置的指针。

(3)读文件

读文件,执行一个系统调用,指明文件名称和要读入文件块的内存位置。同样,需要搜索目录以找到相关目录项,系统维护一个读位置的指针。

(4)文件重定位(文件寻址)

按某条件搜索目录,将当前文件位置设为给定值,并且不会读、写文件。

(5)删除文件

先从目录中找到要删除文件的目录项,使之成为空项,然后回收该文件所占用的存储空间。

(6)截断文件

允许文件所有属性不变,并删除文件内容,即将其长度设为0,并释放其空间。

(7)打开文件

使用Open系统调用打开文件(主要工作:把指定文件的目录项复制到内存指定的区域)

(8)关闭文件

使用Close系统调用关闭文件。

文件逻辑结构

(1)流式文件(无结构文件)

流式文件是最简单的文件组织形式。流式文件将数据按顺序组织成记录并积累、保存,它是有序相关信息项的集合,以字节为单位。

(2)记录式文件(有结构文件)

1)顺序文件

文件中的记录一个接一个地顺序排列,记录通常是定长的,可以顺序存储或以链表形式存储,在访问时需要顺序搜索文件。

ps:可变长记录的顺序文件无法实现随机存取

2)索引文件

3)索引顺序文件

索引顺序文件是顺序和索引两种组织形式的结合。

4)直接文件或散列文件

给定记录的键值或通过散列函数转换的键值直接决定记录的物理地址。

文件目录

文件控制块FCB

与进程管理一样,为实现目录管理,操作系统中引入了文件控制块的数据结构。

文件控制块(FCB)是用来存放控制文件需要的各种信息的数据结构,以实现“按名存取”。

FCB的有序集合称为文件目录,一个FCB就是一个文件目录项。为了创建一个新文件,系统将分配一个FCB 并存放在文件目录中,成为目录项。

FCB主要包含以下信息:

(1)基本信息,如文件名、文件的物理位置、文件的逻辑结构、文件的物理结构等

(2) 存取控制信息,如文件存取权限等

目录结构

  • 搜索。当用户使用一个文件时,需要搜索目录,以找到该文件的对应目录项。
  • 创建文件。当创建一个新文件时,需要在目录中增加一个目录项。
  • 删除文件。当删除一个文件时,需要在目录中删除相应的目录项。
  • 显示目录。用户可以请求显示目录的内容,如显示该用户目录中的所有文件及属性。
  • 修改目录。某些文件属性保存在目录中,因而这些属性的变化需要改变相应的目录项。
1)单级目录结构

在整个文件系统中只建立一张目录表,每个文件占一个目录项

ps:一个系统只有一张目录表,不允许文件重名

2)两级目录结构

将文件目录分成文件目录和用户文件目录两级

ps:不同用户的文件可以重名,但不能对文件进行分类

3)多级目录结构

将两级目录结构层次关系加以推广,就形成了多级目录结构,即树形目录结构

  • 绝对路径:从根目录出发的路径
  • 相对路径:从当前目录出发的路径

ps:不同目录下的文件可以重名,可以对文件进行分类,不方便文件共享

4)无环图目录结构

引入无环图目录结构是为了实现文件共享

索引节点

除了文件名之外的所有信息都放到索引结点中,每个文件对应一个索引结点。

目录项中只包含文件、索引结点指针,因此每个目录项的长度大幅減少,检索文件时磁盘1/0的次数就少了很多。

文件的物理结构

连续分配

连续分配方式要求每个文件在磁盘上占有一组连续的块

  • 优点:支持顺序访问和直接访问(随机访问);在顺序读/写时速度最快
  • 缺点:不方便文件扩展;存储空间利用率低;会产生磁盘碎片

物理块号=起始块号+逻辑块号

链接分配

采取离散分配的方式,可以为文件分配离散的磁盘块。

隐式链接

目录中记录了文件存放的起始块号和结束块号。除了文件的最后一个磁盘块之外,每个磁盘块中都会保存指向下一个盘块的指针

  • 优点:方便文件拓展;无碎片问题;外存利用率高
  • 缺点:只支持顺序访问,不支持随机访问,查找效率低;指向下一个盘块的指针也需要耗费少量的存储空间

显式链接

把用于链接文件各物理块的指针显式地存放在一张表中,即文件分配表(FAT)。

ps:一个磁盘只会建立一张文件分配表(FAT)。开机时文件分配表放入内存,并常驻内存。

从目录项中找到起始块号,若i>=0,则查询内存中的文件分配表FAT,往后找到i号逻辑块对应的物理块号。逻辑块号转换成物理块号的过程不需要读磁盘操作

  • 优点:方便文件拓展;无碎片问题;外存利用率高;支持顺序访问和随机访问。相比于隐式链接来说,地址转换时不需要访问磁盘,因此文件的访问效率更高。
  • 缺点:文件分配表的需要占用一定的存储空间

 ps:开机时,将FAT读入内存,并常驻内存

索引分配

允许文件离散地分配在各个磁盘块中,系统会为每个文件建立一张索引表,索引表中记录了文件的各个逻辑块对应的物理块。索引表存放的磁盘块称为索引块。文件数据存放的磁盘块称为数据块。

优点:支持直接访问,无外部碎片问题

缺点: 索引块的分配增加了系统存储空间的开销

ps:一个文件对应一张索引表

索引块支持大文件机制
1)链接方案

如果索引表太大,一个索引块装不下,那么可以将多个索引块链接起来存放。

2)多层索引

建立多层索引。使第n层索引块指向第n+1层的索引块。

 ps:采用K层索引结构,且顶级索引表未调入内存,则访问一个数据块只需要K+1次读磁盘操作

3)混合索引

三种机制的对比

文件共享

(1) 基于索引结点的共享方式(硬链接)

索引结点中设置一个链接计数变量count,用于表示链接到本索引结点上的用户目录项数。

  1. 若count=2,说明此时有两个用户目录项链接到该寨引结点上,或者说是有两个用户在共享此文件
  2. 若某个用户“删除” 该文件,则只是要把用户目录中与该文件对应的目录项删除,且索引结点的count 值减1。
  3. 若count >0,说明还有别的用户要使用该文件暂时不能把文件数据删除,否则会导致指针悬空。

(2)基于符号链的共享方式(软链接)

为使用户B能共享用户A的一个文件F,可以由系统创建一个LINK类型的新文件,也取名为F,并将文件F写入用户B的目录中,以实现用户B的目录与文件F的链接。

文件保护

(1)口令保护

为文件设置一个“口令”,用户想要访问文件时需要提供口令,由系统验证口令是否正确。

实现开销小,但“口令”一般存放在FCB 或索引结点中(也就是存放在系统中)因此不大安全

(2)加密保护

用一个“密码”对文件加密,用户想要访问文件时,需要提供相同的“密码” 才能正确的解密。

安全性高,但加密/解密需要耗费一定的时问(例:异或加密)。

(3)访问控制

用一个访问控制表(ACL)记录各个用户(或各组用户)对文件的访问校限。
对文件的访问类型可以分为:读/写/执行/删除等。
实现灵活,可以实现复杂的文件保护功能。

文件系统

文件系统的层次结构

文件存储空间管理

(1)空闲表法

适用于连续分配方式

(2)空闲链表法

1)空闲盘块链

以盘块为单位组成一条空闲链,分配时从链头依次取出空闲块,回收时将空闲块查到链尾

2)空闲盘区链

以盘区为单位组成一条空闲链,分配时可采用首次适应、最佳适应等策略;回收时注意相邻空闲盘区合并的问题

(3)位示图法

一个二进制位对应一个盘块

(4)成组链接法

UNIX 采用的策略,适合大型文件系统。

具体讲解观看王道考研-操作系统:4.1_6_文件存储空间管理_哔哩哔哩_bilibili 

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

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

相关文章

vbs读取excel内容的代码-编辑代码,查找并在以下位置xls文件路径-供大家学习研究参考

用vbs读取excel的脚本,比较强悍。 编辑代码,查找并在以下位置xls文件路径。 strExcelPath "xls文件的路径" 当然,要想正确运行,你需得安装ms excel才行。 下载:https://download.csdn.net/download/weixin_43097956/…

【数据分享】2000—2023年我国省市县三级逐月植被覆盖度(FVC)数值(Shp/Excel格式)

之前我们分享过2000—2023年我国250米分辨率逐月植被覆盖度(FVC)栅格数据(可查看之前的文章获悉详情),该数据来源于高吉喜等学者在国家青藏高原科学数据中心平台上分享的数据,合成方式采用月最大值合成&…

命令按钮QLink

主要作用用来点击后可以自动打开系统的网页浏览器,跳转到指定的网页 常用方法 文本 //获取和设置文本 QString text() const void setText(const QString &text)描述信息 //获取和设置描述文本 QString description() const void setDescription(const QSt…

YOLOv11改进 | 注意力篇 | YOLOv11引入ACmix注意力机制

1. ACmix介绍 1.1 摘要:卷积和自注意力是表示学习的两种强大技术,它们通常被认为是两种彼此不同的同行方法。 在本文中,我们表明它们之间存在很强的潜在关系,从某种意义上说,这两种范式的大量计算实际上是通过相同的操…

特殊的加法和除法(考察点为位操作符)

目录 一简介: 二例题讲解: 2.1不用加号的加法: 2.1.1题目: 2.1.2思路汇总: 2.1.3代码解答: 2.2两数相除: 2.2.1题目: 2.2.2思路汇总: 2.2.3代码解答&#xff1a…

第 13 章 常用类

第 13 章 常用类 文章目录 <center>第 13 章 常用类13.1 包装类13.1.1 包装类的分类13.1.2 包装类和基本数据的转换13.1.3 案例演示13.1.4 课堂测试题13.1.5 包装类型和 String 类型的相互转换13.1.6 Integer 类和 Character13.1.7 Integer 类面试题 113.1.8 Intege 类面…

【算法】0/1背包问题

背包中有一些物品&#xff0c;每件物品有它的价值与重量&#xff0c;给定一个重量&#xff0c;在该重量范围内取物品&#xff08;每件物品不可重复取&#xff09;&#xff0c;求最大价值。 将需求转化为表格&#xff0c;每一行中的每个格子代表可选哪些下标的物品在总重量限额内…

【c++】 模板初阶

泛型编程 写一个交换函数&#xff0c;在学习模板之前&#xff0c;为了匹配不同的参数类型&#xff0c;我们可以利用函数重载来实现。 void Swap(int& a, int& b) {int c a;a b;b c; } void Swap(char& a, char& b) {char c a;a b;b c; } void Swap(dou…

Linux开发讲课45--- 链表

Linux内核代码中广泛使用了数据结构和算法,其中最常用的有链表、队列kfifo、红黑树、基数树和位图。 链表 Linux内核代码大量使用了链表这种数据结构。链表是在解决数组不能动态扩展这个缺陷而产生的一种数据结构。 链表所包含的元素可以动态创建并插入和删除。链表的每个元素…

AR 领域的突破——微型化显示屏为主流 AR 眼镜铺平道路

概述 多年来&#xff0c;增强现实 (AR) 技术一直吸引着人们的想象力&#xff0c;有望将数字信息与我们的物理世界无缝融合。通过将计算机生成的图像叠加到现实世界的视图上&#xff0c;AR 有可能彻底改变我们与环境的互动方式。从增强游戏体验到协助手术室的外科医生&#xff…

【Linux】进程间关系与守护进程

超出能力之外的事&#xff0c; 如果永远不去做&#xff0c; 那你就永远无法进步。 --- 乌龟大师 《功夫熊猫》--- 进程间关系与守护进程 1 进程组2 会话3 控制终端4 作业控制5 守护进程 1 进程组 之前我们提到了进程的概念&#xff0c; 其实每一个进程除了有一个进程 ID(P…

2024/10/2 408 20题

c d d b b a b c b b a d c d a c

【C++】C++基础

目录 一. C关键字(C98) 二、C的第一个程序 三、命名空间 3.1.namespace的价值 3.2.namespace的定义 3.2.命名空间使用 总结&#xff1a;在项目当中第一、第二种方法搭配使用&#xff0c;第三种冲突风险非常大&#xff0c;仅适合练习使用。 四、C输入&输出 五、缺省…

【数据库】揭秘Oracle中不朽的scott用户:起源、影响与技术启示

标题&#xff1a;【数据库探秘】揭秘Oracle中不朽的scott用户&#xff1a;起源、影响与技术启示 摘要 本文将带你深入了解Oracle数据库中一个传奇的用户——scott。从scott用户的起源到其在数据库发展中的影响&#xff0c;我们将探索这个经典用户账户背后的故事。此外&#xf…

[动态规划] 二叉树中的最大路径和##树形DP#DFS

标题&#xff1a;[动态规划] 二叉树中的最大路径和##树形DP#DFS 个人主页水墨不写bug &#xff08;图片来源于网络&#xff09; 目录 一 、什么是树形DP 二、题目描述&#xff08;点击题目转跳至题目&#xff09; NC6 二叉树中的最大路径和 算法思路&#xff1a; 讲解与参考代…

SpringCloud-基于Docker和Docker-Compose的项目部署

一、初始化环境 1. 卸载旧版本 首先&#xff0c;卸载可能已存在的旧版本 Docker。如果您不确定是否安装过&#xff0c;可以直接执行以下命令&#xff1a; sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logro…

NeRF2: Neural Radio-Frequency Radiance Fields 笔记

任务&#xff1a;用 NeRF 对无线信号的传播进行建模&#xff0c;建模完成后可以用NeRF网络生成新位置下的信号。生成的信号用于指纹定位、信道估计等下游任务。 核心思路 在视觉 NeRF 的基础上&#xff0c;根据无线信号的特点修改了隐式场模型、渲染函数&#xff0c;网络的输…

C++初阶:STL详解(十)——priority_queue的介绍,使用以及模拟实现

✨✨小新课堂开课了&#xff0c;欢迎欢迎~✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C&#xff1a;由浅入深篇 小新的主页&#xff1a;编程版小新-CSDN博客 一.priority_queue的介绍 优先级队列被实现…

calibre-web的翻译translations

calibre-web的翻译translations Windows安装calibre-web&#xff0c;Python-CSDN博客文章浏览阅读539次&#xff0c;点赞10次&#xff0c;收藏11次。pip install calibreweb报错&#xff1a;error: Microsoft Visual C 14.0 or greater is required. Get it with "Microso…

Oracle 12c在Windows环境下安装

适合初学者使用的Oracle 12c在Windows环境下安装步骤、参数配置、常见问题及参数调优的详细补充说明。 一、Oracle 12c安装步骤 1. 准备工作 在安装Oracle 12c之前&#xff0c;确保你的系统满足以下要求&#xff1a; 操作系统&#xff1a;Oracle 12c支持的Windows版本包括Wi…