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

文件系统基础

概念

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

文件的属性

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

文件的基本操作

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

(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.mzph.cn/web/54362.shtml

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

相关文章

vue3+vite@4+ts+elementplus创建项目详解

1、第一步创建项目cnpm init vite4 2、设置vue3.2局域网可访问配置: 找到项目路径下的package.json目录下找到script对象下面添加一下代码: "serve": "vite --host 0.0.0.0" 启动项目命令不在是dev而是:cnpm run serve 3…

《深度学习》OpenCV 摄像头OCR 过程及案例解析

目录 一、摄像头OCR 1、含义 2、一般操作步骤 1)安装OpenCV库 2)设置摄像头 3)图像采集 4)图像预处理 5)文本识别 6)文本处理 7)结果显示 二、案例实现 1、定义展示图像函数 2、定…

深入理解 JavaScript 事件循环机制:单线程中的异步处理核心

深入理解 JavaScript 事件循环机制:单线程中的异步处理核心 JavaScript 是一门单线程的编程语言,也就是说它在同一时间只能执行一个任务。然而,现代 Web 应用经常需要处理大量的异步操作,如用户输入、网络请求、定时器等。为了确…

《迁移学习》—— 将 ResNet18 模型迁移到食物分类项目中

文章目录 一、迁移学习的简单介绍1.迁移学习是什么?2.迁移学习的步骤 二、数据集介绍三、代码实现1. 步骤2.所用到方法介绍的文章链接3. 完整代码 一、迁移学习的简单介绍 1.迁移学习是什么? 迁移学习是指利用已经训练好的模型,在新的任务上…

鸿蒙开发(NEXT/API 12)【状态查询与订阅】手机侧应用开发

注意 该接口的调用需要在开发者联盟申请设备基础信息权限与穿戴用户状态权限,穿戴用户状态权限还需获得用户授权。 实时查询穿戴设备可用空间、电量状态。订阅穿戴设备连接状态、低电量告警、用户心率告警。查询和订阅穿戴设备充电状态、佩戴状态、设备模式。 使…

初识Django

前言: 各位观众老爷们好,最近几个月都没怎么更新,主要是最近的事情太多了,我也在继续学习Django框架,之前还参加了一些比赛,现在我会开始持续更新Django的学习,这个过程会比较久,我会把我学习的…

MySQL--三大范式(超详解)

目录 一、前言二、三大范式2.1概念2.2第一范式(1NF)2.3第二范式(2NF)2.3第三范式(3NF) 一、前言 欢迎大家来到权权的博客~欢迎大家对我的博客进行指导,有什么不对的地方,我会及时改进…

嘴尚绝卤味:健康美味的双重奏

在当今快节奏的生活中,人们对美食的追求不再仅仅停留于味蕾的满足,更加注重食物的健康与营养。在这一背景下,"嘴尚绝卤味"以其独特的健康理念与精湛的制作工艺,成为了市场上备受瞩目的卤味品牌。本文将从"嘴尚绝卤…

Kotlin基本知识

Kotlin是一种现代的静态类型编程语言,由JetBrains公司在2010年推出,并被Google在2019年宣布为Android开发的首选语言。 超过 50% 的专业 Android 开发者使用 Kotlin 作为主要语言,而只有 30% 使用 Java 作为主要语言。 70% 以 Kotlin 为主要语…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑光伏不确定性的配电网谐波监测优化配置方法 》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

Azure DevOps Server:不能指派新增的用户

Contents 1. 概述2. 解决方案 1. 概述 近期和微软Azure DevOps项目组解决了一个“无法指派开发人员”的问题,在此分享给大家。问题描述: 在一个数据量比较大的Azure DevOps Server的部署环境中,用户发现将新用户的AD域账户添加到Azure DevOps…

《15分钟轻松学 Python》教程目录

为什么要写这个教程呢,主要是因为即使是AI技术突起的时代,想要用好AI做开发,那肯定离不开Python,就算最轻量级的智能体都有代码块要写,所以不一定要掌握完完整整的Python,只要掌握基础就能应对大部分场景。…

数据看板如何提升决策效率?

数据看板作为一种直观、高效的数据可视化工具,在这一过程中发挥着至关重要的作用。以一家中型制造企业为例,每天面临着生产计划的安排、原材料的采购、产品质量的把控以及市场销售的策略制定等诸多业务场景。在生产线上,需要确保设备的高效运…

【隐私计算篇】多方安全计算之函数秘密共享(FSS)

1. 函数秘密共享(FSS)定义 秘密共享是一种将一个值拆分为多个份额的方法,形式有多种,可以参考《安全多方计算(MPC)矩阵乘法算子的原理分析》。这里主要提及加法秘密共享,使得:这些份额可以重新组合以还原出秘密值;任…

【HTML并不简单】笔记1-常用rel总结:nofollow、noopener、opener、noreferrer,relList

文章目录 rel"nofollow"rel"noopener"与rel"opener"rel"noreferrer"relList对象 《HTML并不简单:Web前端开发精进秘籍》张鑫旭,一些摘要: HTML,这门语言的知识体系非常庞杂,涉…

Python数据结构与算法问题详解

Python数据结构与算法问题详解 Python 作为一种高级编程语言,凭借其简洁的语法和强大的内置库,成为了数据结构与算法学习的绝佳工具。本文将深入解析几种常见的数据结构,并结合具体的算法,展示如何在实际问题中高效解决问题。通过…

《PMI-PBA认证与商业分析实战精析》第7章 解决方案评价

第7章 解决方案评价 本章主要内容: 评价的建议思维 解决方案的评价计划 确定评价什么 何时以及如何验证解决方案的结果 评价验收标准和解决缺陷 促进通过/不通过的决策 获得解决方案的签字确认 评价解决方案的长期绩效 解决方案替换/淘汰 本章涵盖的考试…

ASP.NET Core 创建使用异步队列

示例图 在 ASP.NET Core 应用程序中,执行耗时任务而不阻塞线程的一种有效方法是使用异步队列。在本文中,我们将探讨如何使用 .NET Core 和 C# 创建队列结构以及如何使用此队列异步执行操作。 步骤 1:创建 EmailMessage 类 首先&#xff0c…

1、Spring Boot 3.x 集成 Eureka Server/Client

一、前言 基于 Spring Boot 3.x 版本开发,因为 Spring Boot 3.x 暂时没有正式发布,所以很少有 Spring Boot 3.x 开发的项目,自己也很想了踩踩坑,看看 Spring Boot 3.x 与 2.x 有什么区别。自己与记录一下在 Spring Boot 3.x 过程…

Linux下的IO模型

阻塞与非阻塞IO(Input/Output) 阻塞与非阻塞IO(Input/Output)是计算机操作系统中两种不同的文件或网络通信方式。它们的主要区别在于程序在等待IO操作完成时的行为。 阻塞IO(Blocking IO) 在阻塞IO模式下…