当前位置: 首页 > news >正文

操作系统之文件系统的基本概念

目录

用户和磁盘视角的文件

文件控制块(FCB)和索引结点(inode)

文件的操作

创建文件(create系统调用)

写文件(write系统调用)

读文件(read系统调用)

重新定位文件

删除文件(delete系统调用)

截断文件

文件保护

目的

方法

文件的逻辑结构

无结构文件

有结构文件

文件的物理结构

连续分配

链接分配

索引分配

优化机制


用户和磁盘视角的文件

  • 用户视角:文件被视为字符流或字节流,用户通过文件名来访问文件内容。
  • 磁盘视角:文件是由一系列盘块组成的集合,每个盘块包含文件数据的一部分。

文件控制块(FCB)和索引结点(inode)

  • 文件控制块(FCB)
    • 作用:存放控制文件所需的信息,实现“按名存取”。
    • 内容:包括文件名、物理位置、逻辑结构、物理结构、存取控制信息和使用信息。
  • 索引结点(inode)
    • 引入原因:减少内存中文件目录的大小,提高检索效率。
    • 磁盘索引结点:每个文件有一个唯一的磁盘索引结点,包含文件主标识符、类型、存取权限、物理地址、长度、链接计数、存取时间等。
    • 内存索引结点:文件打开时,磁盘索引结点复制到内存,包含索引结点编号、状态、访问计数、逻辑设备号、链接指针等。

文件的操作

写文件(write系统调用)

写文件操作允许用户将数据写入到文件中。这个过程包括:

读文件(read系统调用)

读文件操作允许用户从文件中读取数据。操作步骤如下:

重新定位文件

重新定位文件操作(通常通过lseek系统调用)改变文件的读写位置。这包括:

删除文件(delete系统调用)

删除文件操作从文件系统中移除指定的文件。这个过程通常涉及:

截断文件

截断文件操作将文件的大小减小到用户指定的大小。这通常包括以下步骤:

  • 创建文件(create系统调用)

    创建文件操作允许用户在文件系统中生成一个新的文件实体。这个过程通常涉及以下步骤:

  • 检查权限:系统检查用户是否有权限在指定目录下创建文件。
  • 分配FCB:系统为新文件分配一个文件控制块(FCB),并在其中填写文件名、创建时间、文件所有者等信息。
  • 分配inode:系统为新文件分配一个索引结点(inode),记录文件的物理位置、大小、访问权限等。
  • 初始化存储空间:根据文件的物理结构,系统可能会分配一个或多个磁盘块来存储文件数据。
  • 定位:系统根据文件指针确定写入位置。
  • 写入数据:系统将用户指定的数据写入到文件的相应位置。
  • 更新FCB和inode:系统更新文件控制块和索引结点,以反映文件的新大小和最后修改时间。
  • 分配新块:如果文件需要更多存储空间,系统会分配新的磁盘块。
  • 定位:系统根据文件指针确定读取位置。
  • 读取数据:系统从文件的指定位置读取数据,并将其传送到用户指定的缓冲区。
  • 更新文件指针:读取操作完成后,系统更新文件指针,以便下次操作可以从新的位置开始。
  • 设置文件指针:用户可以指定新的位置,系统将文件指针移动到该位置。
  • 检查边界:系统确保新的位置在文件的合法范围内。
  • 检查权限:系统检查用户是否有权限删除该文件。
  • 释放FCB:系统释放文件的文件控制块。
  • 释放inode:系统释放文件的索引结点。
  • 释放存储空间:系统释放文件所占用的所有磁盘块,以便这些块可以被重新使用。
  • 检查权限:系统检查用户是否有权限修改文件大小。
  • 调整大小:系统将文件大小减小到指定的大小,释放多余的数据块。
  • 更新FCB和inode:系统更新文件控制块和索引结点,以反映文件的新大小。
  • 处理剩余数据:如果文件被缩小,系统会处理剩余的数据块,可能会将其标记为可用

文件保护

目的
  • 防止文件共享时被破坏或未经允许的修改。
方法
  • 口令保护:访问文件时需提供口令。
  • 加密保护:文件加密,访问时需密钥解密。
  • 访问控制
    • 访问控制列表:规定用户及其所允许的访问类型。
    • 访问类型:读、写、执行、添加、删除、列表清单。
    • 用户访问权限:与文件属性共同限制文件访问。

文件的逻辑结构

无结构文件
  • 数据按顺序组织,适合基本信息单位操作不多的文件。
有结构文件
  • 顺序文件:通常是定长的,可以顺序存储或链式存储。
  • 索引文件:适用于定长和变长记录文件,提高检索效率。
  • 索引顺序文件:为顺序文件建立索引表,每组第一条记录有一个索引项。
  • 直接文件或散列文件:通过键值或散列函数直接决定记录的物理地址。

操作系统之文件的逻辑结构-CSDN博客

文件的物理结构

连续分配
  • 每个文件在磁盘上占有一组连续的块,支持随机存取,但可能导致外部碎片。
链接分配
  • 隐式链接:磁盘块离散分配,每个块(除最后一个)有指向下一个块的指针。
  • 显式链接:链接指针存放在内存的文件分配表(FAT)中,提高检索速度,支持随机访问。
索引分配
  • 每个文件有一个索引块,包含指向文件各块的指针,支持随机存取。

后面补

优化机制
  • 链接方案:多个索引块链接在一起处理大文件。
  • 多层索引:类似多级页表,处理大型索引块。
  • 混合索引:结合链接分配和索引分配的优点。

相关文章:

操作系统之文件系统的基本概念

目录 用户和磁盘视角的文件 文件控制块(FCB)和索引结点(inode) 文件的操作 创建文件(create系统调用) 写文件(write系统调用) 读文件(read系统调用) 重…...

深入探讨 Android 中的 AlarmManager:定时任务调度及优化实践

引言 在 Android 开发中,AlarmManager 是一个非常重要的系统服务,用于设置定时任务或者周期性任务。无论是设置一个闹钟,还是定时进行数据同步,AlarmManager 都是不可或缺的工具之一。然而,随着 Android 系统的不断演…...

西电-算法分析-研究生课程复习笔记

24年秋的应该是张老师最后一次用卷面考试,他说以后这节课的期末考试都是在OJ上刷题了张老师上课还挺有意思的,上完之后能学会独立地思考算法设计问题了。整节课都在强调规模压缩这个概念,考试也是考个人对这些的理解,还挺好玩的哈…...

编译时找不到需要的库,如何在PyCharm中为你的项目添加需要的库

丰富的库支持是 Python 语言的一大特点,但是在使用 PyCharm 进行Python 代码编译的时候,遇到一些需要使用到的库提示不能解析时,该如何添加呢? 比如下图所示的代码,可以看到需要使用 selenium、b4、jieba 这些库&…...

ip addr 命令给Linux网络接口配置多个IP地址值

问一下Chatgpt 怎么使用ip addr 命令给Linux网络接口配置多个IP地址值 根据Chatgpt的提示执行了命令,命令执行成功,看下执行结果。 ifconfig 命令查看接口IP地址 ip addr show 命令查看接口IP地址...

C#语言的数据库编程

C#语言的数据库编程 在现代软件开发中,数据库是不可或缺的一部分。无论是企业级应用还是个人项目,数据的存储与管理都是程序的核心功能之一。C#作为一种强类型、面向对象的编程语言,广泛应用于Windows平台的开发,尤其是在构建与数…...

时频分析之S变换

S变换的提出 1996年,由R.G Stockwell 提出了S变换,和其他时频分析工具一样,通过S变换,我们可以同时从时域以及频域观察一个信号的能量分布。S变换融合了短时傅里叶变换和小波变换的优点。关于S变换,最早发表于TSP上的…...

第二十八周学习周报

目录 摘要Abstract1 GFPGAN1.1 总体结构1.2 实验研究1.3 代码分析 总结 摘要 本周主要的学习内容是GFPGAN模型。GFPGAN是一种基于生成对抗网络(GAN)的模型,其利用封装在预训练的人脸GAN中的丰富多样的先验进行人脸图像的修复。这种生成面部先验(GFP&…...

SurfaceFlinger MessageQueue原理

SurfaceFlinger MessageQueue 有2个作用: 处理SurfaceFlinger INVALIDATE、REFRESH事件管理SurfaceFlinger主线程挂起和恢复 SurfaceFlinger::run() { while (true) { mEventQueue->waitMessage(); } } waitMessage {do {IPCThreadState::self()->flushComm…...

component-动态控制 div width 的值 根据传入的变量决定width的值 vue

1.实现 根据参数的值&#xff0c;div显示不同的长度 <div class"node-line" :style"lineProgress"></div> <script>export default {name: "trainSummaryInfo",data(){return{linePercentage:200,}},computed:{lineProgress…...

C#中的常用集合

目录 一、动态数组ArrayList 二、List 三、栈&#xff08;Stack&#xff09; 四、队列&#xff08;Queue&#xff09; 五、字典&#xff08;Dictionary&#xff09;,int> 一、动态数组ArrayList ArrayList 是 C# 中提供的一种动态数组类&#xff0c;位于命名空间 Syste…...

插入实体自增主键太长,mybatis-plaus自增主键

1、问题 spring-boot整合mybtais执行insert语句时&#xff0c;主键id为长文本数据。 2、分析问题 1)数据库主键是否自增 2&#xff09;数据库主键的种子值设置的多少 3、解决问题 1&#xff09;数据库主键设置的时自增 3&#xff09;种子值是1 所以排查是数据库的问题 4、继…...

晨辉面试抽签和评分管理系统之一:考生信息管理和编排

晨辉面试抽签和评分管理系统&#xff08;下载地址:www.chenhuisoft.cn&#xff09;是公务员招录面试、教师资格考试面试、企业招录面试等各类面试通用的考生编排、考生入场抽签、候考室倒计时管理、面试考官抽签、面试评分记录和成绩核算的面试全流程信息化管理软件。提供了考生…...

【MySQL】MVCC详解, 图文并茂简单易懂

欢迎来到啊妮莫的学习小屋 祝读本文的朋友都天天开心呀 目录 MVCC简介快照读与当前读快照读当前读 隔离级别隐藏字段和Undo Log版本链✨MVCC原理--ReadView✨ReadView简介设计思路适用隔离级别重要内容 ReadView规则MVCC整体流程 不同隔离级别下的MVCC读已提交可重复读 总结 M…...

中国数字化发展的问题与机会

橙蜂智能公司致力于提供先进的人工智能和物联网解决方案,帮助企业优化运营并实现技术潜能。公司主要服务包括AI数字人、AI翻译、埃域知识库、大模型服务等。其核心价值观为创新、客户至上、质量、合作和可持续发展。 橙蜂智农的智慧农业产品涵盖了多方面的功能,如智能化推荐、…...

【ROS2】☆ launch之Python

☆重点 ROS1和ROS2其中一个很大区别之一就是launch的编写方式。在ROS1中采用xml格式编写launch&#xff0c;而ROS2保留了XML 格式launch&#xff0c;还另外引入了Python和YAML 编写方式。选择哪种编写取决于每位开发人员的爱好&#xff0c;但是ROS2官方推荐使用Python方式编写…...

如何稳定使用 O1 / O1 Pro,让“降智”现象不再困扰?

近期&#xff0c;不少朋友在使用 O1 或 O1 Pro 模型时&#xff0c;都会碰到“降智”或“忽高忽低”的智力波动&#xff0c;比如无法识图、无法生成图片、甚至回答准确度也不稳定。面对这些问题&#xff0c;你是不是也感到头疼呢&#xff1f; 为了找到更可靠的解决办法&#xf…...

zookeeper监听机制(Watcher机制)

文章目录 引言I zookeeper监听机制Watcher机制实现分布式的通知功能触发事件种类Watcher的三个过程II watch机制特点一次性触发事件封装event异步发送先注册再触发常见的通知状态和事件类型III 应用案例(Kafka)Kafka的消息模型Kafka在Zookeeper中保存的元数据Kafka 基于Contr…...

docker 启动 nacos 单机模式

docker 启动 nacos 单机模式 # 拉取镜像# 启动&#xff0c;如果不拉镜像会自动拉取最新的 image docker run --name standalong_nacos -p 8848:8848 -p 9848:9848 -p 9849:9849 -e MODEstandalone -d nacos/nacos-server# 状态查看外部访问验证 输入部署的 docker ip 地址以及…...

学习threejs,导入babylon格式的模型

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.BabylonLoader babyl…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

python如何将word的doc另存为docx

将 DOCX 文件另存为 DOCX 格式&#xff08;Python 实现&#xff09; 在 Python 中&#xff0c;你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是&#xff0c;.doc 是旧的 Word 格式&#xff0c;而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

Vite中定义@软链接

在webpack中可以直接通过符号表示src路径&#xff0c;但是vite中默认不可以。 如何实现&#xff1a; vite中提供了resolve.alias&#xff1a;通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...