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

文章目录

    • 文件的逻辑结构
      • 1. 顺序结构
        • 特点
        • 应用场景
        • 示例
      • 2. 索引结构
        • 特点
        • 应用场景
        • 示例
      • 3. 链接结构
        • 特点
        • 应用场景
        • 示例
      • 总结
    • 文件目录
    • 文件的物理结构
      • 1. 连续分配(Contiguous Allocation)
      • 2. 链接分配(Linked Allocation)
        • 隐式链接
      • 3. 索引分配(Indexed Allocation)
        • 链接方案
        • 多级索引(Multilevel Indexing)
        • 5. 混合索引
    • 逻辑结构和物理结构
      • 1. 文件的逻辑结构
      • 2. 文件的物理结构
    • 文件存储空间管理
    • 文件的基本操作
    • 文件共享
    • 文件保护
      • 1. **口令保护(Password Protection)**
        • 优点:
        • 缺点:
      • 2. **加密保护(Encryption Protection)**
        • 优点:
        • 缺点:
      • 3. **访问控制(Access Control)**
        • 实现方式:
        • 优点:
        • 缺点:
      • 综合比较

文件的逻辑结构

在这里插入图片描述

文件的逻辑结构是指文件数据在逻辑上的组织方式,即文件中数据的排列和存储方式。根据不同的使用需求和存储方式,文件的逻辑结构通常分为三种类型:顺序结构索引结构链接结构。理解文件的逻辑结构有助于优化文件的存储和访问,提高数据处理的效率。

1. 顺序结构

顺序结构是最简单的一种文件逻辑结构,文件中的数据按顺序存放在磁盘上,数据记录的物理位置与逻辑顺序一致。

特点
  • 数据存储连续,访问简单。
  • 适合顺序读取和处理的数据。
  • 插入和删除操作效率低:在文件中插入或删除一条记录时,通常需要移动大量数据,尤其在文件数据量较大时,这种操作非常耗时。
应用场景

适合存储不经常修改的数据,如日志文件、历史数据记录等。

示例

例如,若文件包含一系列学生信息,每条记录按顺序存储,那么系统会从头到尾逐条读取每个学生的记录:

学号姓名成绩
001张三85
002李四90
003王五78

在读取学生数据时,按顺序读取每条记录即可。

2. 索引结构

索引结构文件使用一个或多个索引来组织数据,使得文件中的数据可以快速定位和访问。这种结构类似于书籍的目录或索引页,帮助我们在大量数据中迅速找到特定信息。

特点
  • 存在一个或多个索引文件,记录数据项的物理位置。
  • 通过索引可以实现快速定位,尤其适合于随机访问数据。
  • 数据的插入、删除、修改效率较高,但需要维护索引文件。
应用场景

索引结构常用于需要快速检索的场景,例如数据库表的存储结构(如B树索引)以及需要频繁查找的应用程序。

示例

以学生信息为例,若我们建立了学号索引,那么可以快速通过学号找到学生的详细信息:

索引结构表(根据学号建立索引):

学号物理地址
0010x001
0020x002
0030x003

在实际访问数据时,通过查找索引表,可以快速定位到学生数据所在的地址,减少查找时间。

3. 链接结构

链接结构是通过指针将文件中的各个数据项串联起来,使得数据项不必连续存放。每个数据记录包含指向下一条记录的指针。链式结构的典型实现是链表。

特点
  • 数据不必连续存放,文件可以分散存储在不同的存储块中。
  • 插入和删除操作效率高,因为仅需调整指针而不需要移动数据。
  • 查找操作效率低,尤其是在单链表结构中,查找特定数据需要从头开始逐个遍历。
应用场景

链接结构常用于需要频繁插入和删除操作的文件管理中,例如操作系统中的文件分配表(File Allocation Table, FAT)和一些链表形式的日志文件。

示例

在链接结构中,每条记录存储学生信息和指向下一条记录的指针:

学号姓名成绩下一个地址
001张三850x002
002李四900x003
003王五78NULL

这里的“下一个地址”字段充当指针,指向下一条记录的位置。

总结

  • 顺序结构:适合顺序读取的数据,读取简单但修改不灵活。
  • 索引结构:适合频繁查找的数据,查询速度快但需要维护索引。
  • 链接结构:适合频繁修改的数据,插入删除效率高但查找效率低。

文件目录

文件控制块(FCB)是文件系统中用于管理文件的核心数据结构,包含文件的基本信息和存储位置。通过FCB,操作系统能够高效地执行文件的各种操作,是文件系统管理的重要组成部分。
树形目录结构不能文件共享
在这里插入图片描述

文件的物理结构

文件的物理结构指的是文件在磁盘上的实际存储方式。文件在物理存储层面上可以有不同的组织形式,这些结构直接影响到文件的读取、写入速度,以及磁盘空间的利用率。以下是文件的几种主要物理结构:
在这里插入图片描述

1. 连续分配(Contiguous Allocation)

在连续分配中,文件的所有数据块都存储在磁盘上连续的区域中。文件系统在创建文件时为其分配一段连续的空间。

优点

  • 访问速度快:读取时只需顺序读取整个连续区域,减少了寻道时间,顺序访问效率高。
  • 简单的管理:只需记录文件的起始位置和长度。

缺点

  • 空间不灵活:文件增长时如果紧接的空间已被占用,就需要将文件整体移到新的连续空间。
  • 磁盘碎片:文件的创建和删除会导致磁盘碎片,影响存储空间的利用率。

适用场景:常用于只读数据或不会频繁扩展的文件,如光盘或DVD。

2. 链接分配(Linked Allocation)

在链接分配中,文件的数据块无需存储在连续的磁盘位置上。每个数据块包含指向下一个块的指针,形成链表结构。分配离散。

隐式链接

在这里插入图片描述
在这里插入图片描述

优点

  • 空间利用率高:不要求文件连续存储,避免了碎片问题。
  • 灵活性强:文件增长时可以分配新的块并链接起来。

缺点

  • 随机访问效率低:要读取文件中的某个特定位置,必须按顺序遍历链表。
  • 存储空间开销:每个块都需要存储指针,占用额外空间。
  • 可靠性问题:一旦某个块的指针损坏,整个文件链就会断裂。

适用场景:适合顺序访问的文件或动态增删的数据,如日志文件。

3. 索引分配(Indexed Allocation)

索引分配为每个文件分配一个索引块,索引块中保存了文件所有数据块的地址。这样,文件的各个数据块可以存储在非连续的区域。

优点

  • 高效的随机访问:索引块可以直接访问文件的任意数据块。
  • 减少了碎片化:文件不需要连续存储,扩展时可以灵活分配空间。

缺点

  • 索引块的额外开销:文件较大时索引块可能占用较多的磁盘空间。
  • 索引块容量有限:大文件需要多个索引块,增加了访问复杂度。

适用场景:适用于需要随机访问的大文件,如数据库文件。

链接方案

将多个索引链接起来,但是读第二级要把前一级全都给读下。所以劣势很大

多级索引(Multilevel Indexing)

多级索引是索引分配的扩展,通过多级索引结构来支持大文件。常见于UNIX文件系统,它在inode中使用直接索引、一级索引、二级索引等多层索引。
在这里插入图片描述

优点

  • 支持超大文件:通过多级索引可以扩展到支持非常大的文件。
  • 灵活性强:文件较小时使用直接索引,文件大时使用多级索引,兼顾空间和访问效率。

缺点

  • 管理复杂:多级索引带来管理和访问上的复杂性,读取深层索引的数据块会降低效率。

适用场景:适用于大型文件系统和大文件存储,如Linux的ext4文件系统。

5. 混合索引

一些文件系统结合了多种分配方式,例如先采用连续分配,当文件扩展时改用索引或链式分配,从而兼顾了效率和空间利用率。

在这里插入图片描述

逻辑结构和物理结构

1. 文件的逻辑结构

定义:文件的逻辑结构是用户看到的文件内容的组织方式。它指的是文件内部数据如何排列和访问,通常与应用程序的使用和用户交互有关。

类型

  • 顺序结构:文件中的数据按顺序排列,从头到尾读取或写入。例如,文本文件和日志文件常采用这种结构。
  • 索引结构:索引结构通过建立一个额外的数据结构,即索引表或索引文件,将文件内容的物理地址与逻辑地址联系起来。索引表中每一项记录了数据在文件中的位置,从而允许快速查找和访问文件内容,而无需从头至尾顺序遍历文件。
  • 链式结构:数据块通过指针链接在一起,常用于需要动态增长的文件,例如日志系统。

2. 文件的物理结构

定义:文件的物理结构是文件在存储介质(如磁盘、SSD)上的组织方式。它描述了文件如何存储在物理设备上,以及数据块如何分配和管理。

类型

  • 连续存储:文件存储在连续的存储空间中。访问速度快,但文件扩展时可能遇到空间不足的问题。
  • 链式存储:文件数据块通过指针链接,分散存储在不同位置。扩展容易,但随机访问效率较低。
  • 索引存储:使用索引块来记录文件的所有数据块的地址。结合了连续和链式存储的优点,常用于操作系统文件系统。

在这里插入图片描述

文件存储空间管理

在这里插入图片描述

文件的基本操作

操作描述操作步骤命令行示例Python 示例备注
创建文件在文件系统中生成一个新文件1. 检查文件是否存在
2. 分配存储空间
3. 初始化文件元数据
touch newfile.txtwith open('newfile.txt', 'w') as file: pass'w' 模式会创建新文件,若存在则清空
删除文件从文件系统中移除文件,释放存储空间1. 检查用户权限
2. 删除文件控制块
3. 释放存储空间
rm newfile.txtimport os
os.remove('newfile.txt')
删除后无法恢复,需小心操作
打开文件访问文件以进行读/写操作1. 检查文件是否存在(读取模式)
2. 检查用户权限
3. 返回文件句柄
N/Afile = open('newfile.txt', 'r')打开模式包括 'r''w''a''r+'
关闭文件释放文件资源1. 刷新文件缓冲区
2. 关闭文件句柄
N/Afile.close()with open() as file:with 语句可自动关闭文件
读文件读取文件内容1. 打开文件
2. 读取数据到内存
3. 返回数据
cat newfile.txtwith open('newfile.txt', 'r') as file: content = file.read()读取方式有 read()readline()readlines()
写文件将数据写入文件1. 打开文件
2. 将数据写入文件
3. 刷新缓冲区(自动或手动)
echo "Hello, world!" > newfile.txtwith open('newfile.txt', 'w') as file: file.write('Hello, world!')'w' 模式清空再写,'a' 模式追加

文件共享

硬链接,删除只会删除结点,不会删除文件。只有count=0,才能删除,否则指针悬空。
软连接,链接的是一个文件指向文件,类似于快捷方式

文件保护

文件保护是确保文件安全的措施,目的是防止文件的未经授权的访问、修改、泄露或删除。

1. 口令保护(Password Protection)

口令保护是最基本的文件保护机制,它要求用户在访问文件或文件系统时输入正确的密码。只有输入正确的密码,用户才能获得访问权限。

优点:
  • 简单易用。
  • 不需要额外的工具或复杂的设置。
缺点:
  • 安全性相对较低,尤其是密码简单或者密码泄漏时。密码存在系统里
  • 容易受到暴力破解攻击。

2. 加密保护(Encryption Protection)

加密保护是通过加密算法将文件的内容转换为不可读的形式。只有拥有正确的密钥或密码的用户才能解密文件并查看其内容。加密保护比口令保护更为安全,因为即使文件被非法访问或复制,没有密钥或密码,文件内容也无法被读取。

优点:
  • 高度安全,即使文件被盗取,也无法轻易破解。
  • 支持透明加密,可以使文件加密和解密自动化。
缺点:
  • 如果密钥丢失,文件可能无法恢复。
  • 可能会增加系统的性能开销,尤其是在加密/解密大量文件时。

3. 访问控制(Access Control)

访问控制是一种通过设定权限来控制用户或进程对文件的访问权限的方法。通过访问控制,管理员可以明确指定哪些用户或用户组可以访问、修改或删除文件。可以将用户进行分组

实现方式:
  • 基于角色的访问控制(RBAC):在系统中,每个用户根据其角色获得不同的权限。比如,某个用户是“管理员”角色,可以访问和修改所有文件,而“普通用户”只能查看文件。
优点:
  • 可以细粒度地控制谁可以访问文件及其权限。
  • 适用于多用户环境,能够防止非授权用户修改文件。
缺点:
  • 配置复杂,尤其是在多用户和复杂权限管理的系统中。
  • 在配置不当时,可能会出现安全漏洞(例如权限过宽)。

综合比较

保护方式优点缺点适用场景
口令保护简单易用,适用于基本文件保护。安全性较差,易被破解。适合个人用户、文件压缩和小范围的文件保护。
加密保护高度安全,防止未授权访问者读取文件内容。需要管理密钥或密码,若丢失密钥则无法恢复文件。适合需要高安全性的文件共享或存储。
访问控制可以精细控制用户权限,适合多用户环境。配置较复杂,可能出错。适用于多用户、多角色的环境,需要对文件进行细粒度控制。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ES文档:文档操作_doc(7.9.2)

用心记录技术,走心分享,始于后端,不止于后端,励志成为一名优秀的全栈架构师,真正的实现码中致富。 ElasticSearch文档的操作; 添加文档 新建一个索引 goboy-blog,如果添加文档索引不存在则会创…

深入解析 WinForms MVVM 模式中的事件驱动与数据驱动

前言 在传统的 WinForms 开发中,事件驱动模型(Event-Driven Model)是核心,它通过控件的事件(如点击按钮、改变文本等)触发业务逻辑。然而,MVVM 模式引入了数据驱动(Data-Driven&…

Python中的 if __name__ == ‘__main__

在Python中,if __name__ __main__: 这行代码有一个特定的用途和含义。为了理解它,我们需要先了解Python中的__name__变量以及Python脚本是如何执行的。 __name__变量 每个Python模块(python文件)都有一个内置的属性__name__。当…

【系统面试篇】进程与线程类(2)(笔记)——进程调度、中断、异常、用户态、核心态

目录 一、相关面试题 1. 进程的调度算法有哪些? 调度原则 (1)先来先服务调度算法 (2)最短作业优先调度算法 (3)高响应比优先调度算法 (4)时间片轮转调度算法 &am…

大数据工具 flume 的安装配置与使用 (详细版)

参考网址:Flume 1.9用户手册中文版 — 可能是目前翻译最完整的版本了 1,上传安装包 安装包链接:文件下载-奶牛快传 Download |CowTransfer 口令:x8bhcg 1,切换盘符到安装目录 cd /opt/moudles 解压文件…

使用uni-app框架开发各种web前端程序

使用uni-app框架开发各种web前端程序是目前非常流程的开发方式,比如开发APP、小程序、H5等等,是一个使用 vue 开发所有前端应用的框架,开发者编写一套代码,可发布到ios,安卓、H5、以及各种小程序(微信、支付…

鸿蒙ArkTS中的布局容器组件(Column、Row、Flex、 Stack、Grid)

在鸿蒙ArkTS中,布局容器组件有很多,常见的有:   ⑴ Column:(垂直布局容器):用于将子组件垂直排列。   ⑵ Row:(水平布局容器):用于将子组件水…

简单介绍一下mvvm mvc mvp以及区别、历史

MVC(Model - View - Controller) 因MVC架构的灵活性,架构图形式很多,仅供参考 历史: MVC 是最早出现的软件架构模式之一,其历史可以追溯到 20 世纪 70 年代,最初被用于 Smalltalk - 80 环境。…

黑马程序员linux学习【持续更新】

Linux基础 一、Linux简介 1.分类 不同领域的主流操作系统,主要分为下 几类:桌面操作系统、服务器操作系统、移动设备操作系统、嵌入式操作系统。 桌面操作系统 操作系统特点Windows用户数量最多MacOS操作体验好,办公人士首选Linux用户数…

Vert.x,应用监控 - 全链路跟踪,基于Zipkin

关于Zipkin Zipkin是一款开源的分布式实时数据追踪系统(Distributed Tracking System),能够收集服务间调用的时序数据,提供调用链路的追踪。Zipkin每一个调用链路通过一个trace id来串联起来,通过trace id,就能够直接定位到这次调…

ENSP作业——园区网

题目 根据上图,可得需求为: 1.配置交换机上的VLAN及IP地址。 2.设置SW1为VLAN 2/3的主根桥,设置SW2为VLAN 20/30的主根桥,且两台交换机互为主备。 3.可以使用super vlan。 4.上层通过静态路由协议完成数据通信过程。 5.AR1作为企…

从壹开始解读Yolov11【源码研读系列】——Data.dataset.py:模型训练数据预处理/YOLO官方数据集类——YOLODataset

【前情回顾】在上一篇文章记录了YOLO源码data目录下的 base.py 文件,其中定义了一个可灵活修改的数据加载处理基类——Class BaseDataset 灵活基类博文地址:https://blog.csdn.net/qq_58718853/article/details/143249295 【实验代码】所有实验代码上传至…

HFSS 3D Layout中Design setting各个选项的解释

从HFSS 3D LAYOUT菜单中,选择Design Settings打开窗口,会有六个选项:DC Extrapolation, Nexxim Options, Export S Parameters, Lossy Dielectrics, HFSS Meshing Method, and HFSS Adaptive Mesh. DC Extrapolation 直流外推 直流外推分为标…

【板栗糖GIS】——如果安装的vscode版本落后了,如何无障碍更新

【板栗糖GIS】——如果安装的vscode版本落后了,如何无障碍更新 今天想安装新扩展插件时发现vscode版本有点旧,于是在不影响插件的情况下更新。 打开vscode软件,点击设置检查更新,如果有需要更新的直接安装到原目录,如…

数字化转型必看!华为数字化最全合集(192页PDF限免下载 )

今天给大家整理了6份关于华为数字化的资料,共计192页,干货满满! 资料已经全部打包,划到文末添加大师兄即可免费下载👇👇👇 一、华为实施数字化转型方法论与实践的业务解读 这份报告是华为实施数…

【数据集】【YOLO】【目标检测】道路结冰数据集 1527 张,YOLO目标检测实战训练教程!

数据集介绍 【数据集】道路结冰数据集 1527 张,目标检测,包含YOLO/VOC格式标注。数据集中包含2种分类:“clear_road, ice_road”。数据集来自国内外图片网站和视频截图,部分数据经过数据增强处理。检测范围监控视角检测、无人机视…

创建线程时传递参数给线程

在C中,可以使用 std::thread 来创建和管理线程,同时可以通过几种方式将参数传递给线程函数。这些方法包括使用值传递、引用传递和指针传递。下面将对这些方法进行详细讲解并给出相应的代码示例。 1. 值传递参数 当你创建线程并希望传递参数时&#xff…

集智书童 | DuoDiff: 提升浅层 Transformer 性能的扩散模型, 双 Backbone 件扩散模型在图像处理中的应用 !

本文来源公众号“集智书童”,仅用于学术分享,侵权删,干货满满。 原文链接:DuoDiff: 提升浅层 Transformer 性能的扩散模型, 双 Backbone 件扩散模型在图像处理中的应用 ! 扩散模型在图像生成方面取得了前所…

linux perf 环境部署和基本测试(基于Ubuntu20.04)

1,linux 安装perf sudo apt-ge install linux-tools-common sudo apt-get install linux-tools-$(uname -r) linux-tools-generic -y 2 补充安装 sudo apt-get install python3-q-text-as-data 3,perf常用命令 larkubuntu:~$ perf usage: perf [--version] [--hel…

PHP露营地管理平台小程序系统源码

⛺️【露营新风尚】露营地管理平台系统全攻略⛺️ 🏕️一、露营热潮下的管理难题:如何高效运营露营地?🤔 随着露营文化的兴起,越来越多的人选择在大自然中享受宁静与自由。然而,露营地的管理却面临着诸多…