操作系统入门 -- 文件管理
操作系统入门 – 文件管理
1.文件管理概述
1.1 文件系统基本功能
目前,计算机内存的容量依然有限,并且其特性决定了数据无法长时间保存,因此把执行的数据以文件形式保存在外存中,等到需要使用时再调入内存。所以,操作系统中需要增加一个文件管理系统用于对文件的保存、读取保护、共享等功能。
- 文件系统五大功能:
- 文件存储空间管理、分配与回收
- 文件目录管理
- 实现逻辑文件到物理文件的转换和映射
- 实现对文件的各种控制操作和存取操作
- 实现文件信息的共享,以及文件保密、保护措施
1.2 文件的组成
- 1.数据项:数据项是文件系统中最低级的数据组织形式
- 基本数据项:用于描述一个对象的某种属性的值,如姓名等,是数据中可命名的最小逻辑数据单位(原子数据)
- 组合数据项:由多个基本数据项组成
- 2.记录:记录是一组相关的数据项集合,用于描述一个对象在某方面的属性,如某一人员信息表包括姓名、性别、电话等信息
- 3.文件:文件是指由创建者所定义的一组相关信息的集合,逻辑上分为
有结构文件和无结构文件。在有结构文件中,文件由一组相似的记录组成,如某个班级的学生信息表。而无结构文件则被视为字符流。
1.3 文件属性
文件具有一定的属性,系统不同,属性也会有所不同,文件属性包括了文件名、标识符、类型、位置、大小、创建时间等信息。
1.4 文件类型
按照不同角度可分为:
- 性质与用途:
- 系统文件:如内核、系统程序等,只允许用户执行,无法读写和修改。
- 库文件:只允许读和执行,如C子程序库。
- 用户文件:由用户建立的文件,如源程序、目标程序和数据文件等。只允许文件所有者和所有者授权用户使用。
- 保存期限:
- 临时文件:记有临时性信息的文件。用于系统在工作过程中产生的中间文件,一般有暂存的目录。正常工作情况下,工作完毕会自动删除,一旦有异常情况往往会残留不少临时文件。
- 永久性文件:其信息需要长期保存的文件。指一般受系统管理的各种系统和用户文件,经过安装或编辑、 编译生成的文件,存放在软盘、硬盘或光盘等外存上。
- 档案文件:系统或一些实用工具软件包在工作过程中记录在案的文档资料文件,以便查阅历史档案。
- 按文件中数据形式:
- 源文件:由源程序和数据构成的文件。通常由终端或输入设备输入的源程序和数据所形成的文件都属于源文件。
- 目标文件:源文件被目标语言的编译器进行编译后但并未链接到内存中的文件。
- 可执行文件:编译后的代码进行链接程序后形成的文件。
- 按存取控制属性分类:
- 只执行文件:只允许被核准的用户调用执行,无法读写。
- 只读文件:只允许文件主及被核准的用户读,无法写入。
- 读写文件:允许文件主和被核准的用户区读或写的文件。
- 无保护文件
以下还有其他分类方式,本文不过多赘述
2.文件系统提供的操作
2.1 创建文件
2.1.1 参数提供
在文件创建时需要提供以下几个参数:
- 所需的外存空间大小
- 文件存放路径
- 文件名
2.1.2 创建流程
- 在外存中找到文件所需空间
- 根据文件存放路径的信息找到该目录对应的目录文件,在目录中创建该文件对应的目录项。目录项中包含文件名、文件在外存中存放的位置信息。
2.2 删除文件
2.2.1 参数提供
- 文件存放路径
- 文件名
2.2.2 删除流程
- 根据文件目录找到文件所在位置,从目录中找到文件名对应的目录项
- 根据该目录项记录的文件在外存的存放位置、文件大小等信息,回收文件占用的磁盘。
- 从目录表中删除文件对应的目录项
2.3 打开文件
2.3.1 参数提供
- 文件存放路径
- 文件名
- 要对文件执行的操作类型(r:只读,rw:读写等)
2.3.2 打开流程
- 根据文件存放路径查找相应的目录文件,从目录中找到文件名对应的目录项,并检查该用户是否指定操作权限。
- 将目录项复制到内存中“打开文件表”中。并将对应表目的编号返回给客户。之后用户使用打开文件表的编号来指明要操作的文件。
2.4 关闭文件
- 将进程的打开文件表相应表项删除
- 回收分配给该文件的内存空间等资源
- 系统打开文件表的计数器减一
2.5 读文件
在进行文件读取操作时,需要指明是哪个文件和读入的数据量、读入数据存放的位置。操作系统在读取文件时会从读指针指向的外存中,将用户指定大小的数据读入用户指定的内存区域中。
2.6 写文件
在写文件过程中,需要指明是哪个文件,以及写入数据、文件存放位置等信息。操作系统在处理写入时,会从用户指定的内存区域中,将指定大小的数据写回写指针指向的外存。
2.7 文件系统层次结构
以删除某个文件为例
- 1.用户通过操作系统提供的接口发出操作文件的请求(用户接口)
- 2.由于用户提供文件存放路径,因此需要操作系统逐层查找目录,并找到对应目录项(文件目录系统)
- 3.不同的用户对文件由不同操作权限,为保证安全,需要检查用户是否有访问权限(存取控制模块)
- 4.验证用户的访问权限后,需要把用户提供的“记录号”转为逻辑地址(逻辑文件系统与文件信息缓冲区)
- 5.明确目标记录对应的逻辑地址后,需要转为物理地址(物理文件系统)
- 6.删除记录后会对磁盘发出请求(设备管理程序)
- 7.删除记录后会有磁盘空间剩余,需要将剩余空间回收(辅助分配模块)
3.文件逻辑结构
想要深入了解文件,就需要了解它的逻辑结构,文件的逻辑结构是从用户观点出发看到文件的组织形式;不同于文件的物理结构是从实现观点出发看到的文件在外存上的存储组织形式,与存储介质的特性有很大关系。文件结构大致可分为无结构文件和有结构文件,接下来将一一讲解。
3.1 无结构文件
无结构文件即一系列二进制流或字符流组成的文件,又称为流式文件。如在Windows中的.txt文件。
3.2 有结构文件
有结构文件又称为记录式文件,每条记录又由若干数据项组成,如一张学生信息表。根据表中各个记录长度来判断可以分为定长记录和可变记录。接下来讲解有结构文件的组织方式
3.2.1 顺序文件
顺序文件即在逻辑上文件中的记录一个接一个地顺序排列,其中记录可以是定长也可以是可变。各个记录在物理上可以顺序存储或链式存储。
3.2.2 索引文件
索引文件自身是定长记录的顺序文件,由于记录长度固定,因此可以快速找到记录对应的索引项。一般来说索引文件会将关键字作为索引内容,按照关键字进行折半查找。由于索引速度较快,因此索引文件的内容修改速度较快,因此该种类文件适合对信息处理和及时性要求比较高的场景。
3.2.3 索引顺序文件
即索引文件和顺序文件的结合。在该类文件中同样会创建一张索引表,文件中的每组记录会对应一个表项。
4.文件物理结构(外存分配)
文件的物理结构即文件数据在物理存储设备上如何分配和组织的,是从实现观点出发看到的文件在外存上的存储组织形式,与存储介质的特性有很大关系。以下是文件外存分配的介绍
4.1 连续分配
连续分配要求每个我呢间在磁盘上占有一组连续的块。在读取某个磁盘块时,需要移动磁头。访问的两个块相距越远,磁头移动时间越长。因此连续分配在顺序读/写时速度最快,但不方便文件拓展,会产生磁盘碎片。
- 总结
- 优点:支持顺序访问和随机访问,连续分配文件在顺序访问时速度最快
- 缺点:不方便文件拓展,存储空间利用率低,容易产生碎片。
4.2 链接分配
链接分配采用离散的分配方式,并可分为隐式链接和显式链接
4.2.1 隐式链接
除我呢间的最后一个盘块之外,每个盘块中都存有指向下一个盘块的指针。文件目录包括文件第一块的指针和最后一块指针。
- 优点:方便文件拓展,不会产生磁盘碎片,磁盘空间利用率高。
- 缺点:只支持顺序访问,不支持随机访问,查找效率低,指向下一个盘块的指针需要耗费少量存储空间。
4.2.2 显式链接
把用于链接文件个物理块的指针显式地放在一张表中,即文件分配表(FAT)。一个磁盘只会建立一张文件分配表。开机时文件分配表放入内存,并常驻内存
- 优点: 方便文件拓展,无磁盘碎片问题,磁盘空间利用率高,且支持随机访问。相比于隐式链接,地址转换时不需要访问磁盘,文件访问效率高。
- 缺点:文件分配表需要占用一定存储空间。
4.3 索引分配
索引分配允许文件离散地分配在各个磁盘块中,系统会为每个文件建立一张索引表,索引表中记录了文件的各个逻辑块对应的物理块。索引表存放的磁盘块为索引块。文件数据存放的区域为数据块。
4.3.1 链接方案
若索引表太大导致索引块装不下,可以将多个索引块链接起来存放。
- 缺点:若文件较大,索引表会很长,此时需要将多个索引块链接起来,使得查找效率低下。
4.3.2 多层索引
建立索引时,使第一层索引块指向第二层索引块。也可根据文件大小建立更多索引层。采用K层索引结构,且顶级索引表未调入内存,访问一个数据库只需要K+1次读操作。
- 缺点:即使小文件读取操作也是K+1次
4.3.3 混合索引
多种索引方式组合。如一个顶级索引表中,包含了直接地址索引和多级间接索引。
- 优点:对小文件来说,访问一个数据块需要的读操作次数更少。
5.文件目录
文件系统与文件目录相关联,目录中包含看文件相关信息如属性、位置、所有权等。对用户来说,目录是在用户所需文件名和文件之间提供的一种映射,即目录需要实现按名存取。同时目录对系统的存取性能有直接影响,因此需要提高目录的检索速度。本节将讲解目录的结构和实现。
5.1 文件控制块(FCB)
操作系统为实现目录,引入文件控制块的数据结构。文件控制块是用来存放控制文件所需的各种信息的数据结构,FCB的有序集合就称为文件目录,一个FCB就是一个文件目录项。为了创建一个新文件,系统将分配一个FCB并存放于文件目录中称为目录项。
5.2 目录结构
5.2.1 单级目录结构
由于早期的操作系统不支持多级目录,因此整个系统中只建立一张目录表,每个文件占用一个目录项。单级目录实现了“按名存取”,但是不允许文件重名。因此该类型目录并不适合多用户操作系统。
5.2.2 双级目录结构
双级目录结构分为主文件目录和用户文件目录。主文件目录用于记录用户名及相应用户文件目录的存放位置,用户目录中则存放对应用户的文件信息。此时用户可以存储同名文件,单实质上是两个不同文件。两级目录虽然可以实现同名文件存储,但仍缺乏灵活性。
5.2.3 多级目录结构
多级目录结构又称树形目录结构。用户要访问某个文件时需要用文件路径名标识文件,文件路径则为一串字符,各级目录使用"/"分隔,并从根目录触发。
树形目录结构能很方便地对文件进行分类,层次结构清晰,同时也能更有效地对文件进行管理。但树形目录结构并不适合文件共享。
5.2.4 无环图目录结构
在树形目录结构的基础上增加一些指向同一节点的有向边,使整个目录称为一个有向无环图。可以更方便地实现对个用户间的文件共享。
相关文章:
操作系统入门 -- 文件管理
操作系统入门 – 文件管理 1.文件管理概述 1.1 文件系统基本功能 目前,计算机内存的容量依然有限,并且其特性决定了数据无法长时间保存,因此把执行的数据以文件形式保存在外存中,等到需要使用时再调入内存。所以,操…...
由浅入深,走进深度学习(2)
今天分享的学习内容主要就是神经网络里面的知识啦,用到的框架就是torch 在这里我也是对自己做一个学习记录,如果不符合大家的口味,大家划走就可以啦 可能没有什么文字或者原理上的讲解,基本上都是代码,但是我还是想说…...
【Python Tips】创建自己的函数包并安装进Anaconda,像引入标准包一样直接import导入
目录 一、引言 二、方法步骤 步骤一:创建包目录结构 步骤二:配置__init__.py文件 步骤三:文件夹外配置setup.py文件 步骤四:终端Pip安装 三、结尾 一、引言 在编写项目代码的时候,有些自定义功能的函数是可以复用的。…...
【Python机器学习实战】 | 基于支持向量机(Support Vector Machine, SVM)进行分类和回归任务分析
🎩 欢迎来到技术探索的奇幻世界👨💻 📜 个人主页:一伦明悦-CSDN博客 ✍🏻 作者简介: C软件开发、Python机器学习爱好者 🗣️ 互动与支持:💬评论 &…...
备份和还原
stai和dnta snat:源地址转换 内网---外网 内网ip转换成可以访问外网的ip 内网的多个主机可以使用一个有效的公网ip地址访问外部网络 DNAT:目的地址转发 外部用户,可以通过一个公网地址访问服务内部的私网服务。 私网的ip和公网ip做一个…...
Java数组的初始化方法
Java数组的初始化方法 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!在Java编程中,数组是一种非常基础也非常重要的数据结构,它能够存储…...
通过分离有色和无色pdf页面减少打印费
前言 该工具是我认识的一位中科大的大佬在本科毕业的时候做的一个小工具,去打印店打印全彩的毕业论文的话会比较贵,他想到有没有一种方案可以实现有彩色页面的pdf和没有彩色页面的pdf分开打印,前者打印彩色,后者打印黑白…...
c语言--指针
前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文整理c语言中指针的相关知识点。 指针概念 指针存储的就是数据的地址。 直观理解: 李华家是北洋路130号1单元101 用变量处理数据: 我们去李华家拿数据。 用指针处理数据: 我们去北洋路130号1单元101拿数据…...
python-九九乘法表(对齐式1)
[题目描述] 输出九九乘法表,输出格式见样例。输入格式: 无输出格式: 输出乘法表,对齐方式见样例输出。样例输入 无样例输出 来源/分类(难度系数:一星) 完整代码展示: #对齐式1 a[] …...
thinkphp单独为某个接口设置缓存
参考 官方文档 $this->request->cache(__URL__,600);只需要在接口方法的开头添加这个代码即可...
OpenCV视觉--视频人脸微笑检测(超详细,附带检测资源)
目录 概述 具体实现 1.加载分类器 2.打开摄像头并识别人脸 3.处理人脸并检测是否微笑 效果 总结 概述 OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,广泛应用于图像处理和视频分析等领…...
docker 搭建 AI大数据模型 --- 使用GPU
docker 搭建 AI大数据模型 — 使用GPU方式 搭建本地大模型,最简单的方法!效果直逼GPT 服务器GPU系统HP580 G8P40Rocky9.2 安装程序AnythingLLM前端界面Open WebUIChatOllamaollama 一、AnythingLLM 介绍 AnythingLLM 是 Mintplex Labs Inc. 开发的一…...
面向对象, 常用类, 集合, 异常, JDBC, mysql数据库 复习
1.面向对象 (1)面向过程和面向对象 ● 面向过程的程序设计思想 (procedure -Oriented Programming),简称POP ● 关注的焦点是过程:过程就是操作数据的步骤。如果某个过程的实现代码重复出 现,那么就可…...
js取数组最大值之Math.max、Math.max.apply
js取数组最大值之Math.max、Math.max.apply Math.maxMath.max.applyapply()第一个参数为什么可以是null 最小值同理 Math.max Math.max(n1,n2,n3,…,nX) 支持传递多个参数,带有较大的值的那个数 Math.max(2,5,3,6,2,4,2,15,9,6,0,1)Math.max.apply apply() 语法&a…...
各种中间件的安装
文章目录 20232306mysql的wondows安装 2023 2306 mysql的wondows安装 常用mysql教程 springboot整合druid连接池SpringBoot配置Druid连接池 mysql的wondows安装 MySQL学习笔记 01、MySQL安装 这个是安装的具体思路 win10 安装 mysql 5.7 msi版的教程图文详解 这个是安装的…...
【Mysql】多表查询、隐式内链接、显式内连接、左外连接、右外连接
多表查询 什么是多表查询 •DQL: 查询多张表,获取到需要的数据 •比如 我们要查询家电分类下 都有哪些商品,那么我们就需要查询分类与商品这两张表 数据准备 创建db3_2 数据库 -- 创建 db3_2 数据库,指定编码 CREATE DATABASE db3_2 CHARACTER SET utf8;创建分类表与商品表 …...
Linux驱动开发(三)--新字符设备驱动开发 LED驱动开发升级
1、新字符设备驱动原理 使用 register_chrdev 函数注册字符设备的时候只需要给定一个主设备号即可,但是这样会 带来两个问题 需要我们事先确定好哪些主设备号没有使用 会将一个主设备号下的所有次设备号都使用掉,比如现在设置 LED 这个主设备号为200&…...
MCU的最佳存储方案CS创世 SD NAND
大家都知道MCU是一种"麻雀"虽小,却"五脏俱全"的主控。它的应用领域非常广泛,小到手机手表,大到航空航天的设备上都会用到MCU.市面上目前几个主流厂商有意法半导体(其中最经典的一款就是STM32系列)…...
40岁学习java是否需要报班学习?
在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「java的资料从专业入门到高级教程」, 点个关注在评论区回复“666”之后私信回复“666”,全部无偿共享给大家!!!应该不需要。各种公开免费的…...
Vitis Accelerated Libraries 学习笔记--OpenCV 运行测试
目录 1. 简介 2. 实例测试 2.1 实例介绍 2.2 创建工程 2.2.1 创建工程 2.2.2 获取路径 2.2.3 设置路径 2.2.4 打开工程 2.2.5 添加文件 2.2.6 启动 GUI 2.2.7 配置 csim 参数 3 常见错误 3.1 核心共享库报错 4. 总结 1. 简介 在《Vitis Accelerated Libraries …...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...
通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...
uniapp 实现腾讯云IM群文件上传下载功能
UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...
【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统
Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...
基于Uniapp的HarmonyOS 5.0体育应用开发攻略
一、技术架构设计 1.混合开发框架选型 (1)使用Uniapp 3.8版本支持ArkTS编译 (2)通过uni-harmony插件调用原生能力 (3)分层架构设计: graph TDA[UI层] -->|Vue语法| B(Uniapp框架)B --&g…...
