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

目录

用户和磁盘视角的文件

文件控制块(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)中,提高检索速度,支持随机访问。
索引分配
  • 每个文件有一个索引块,包含指向文件各块的指针,支持随机存取。

后面补

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

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

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

相关文章

springboot项目部署至linux

1.修改pom.xml 确认是否有以下代码&#xff0c;没有请进行添加&#xff0c;mainClass改成你的启动类 <plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.ve…

STM32+WIFI获取网络时间+8位数码管显示+0.96OLED显

资料下载地址&#xff1a;STM32WIFI获取网络时间8位数码管显示0.96OLED 1、项目介绍 主控芯片STM32C8T6 接线&#xff1a;串口1&#xff1a;PA9 PA10 OELD &#xff1a;PB6 PB7 数码管使用&#xff1a;MAX7219 8位数码管 Max7219_pinCLK PAout(5) Max7219_pinC…

1688平台商品关键词搜索的多样性与Python爬虫应用实践

在当今这个信息化、数字化飞速发展的时代&#xff0c;电子商务平台已经成为人们日常生活中不可或缺的一部分。而1688作为国内知名的B2B电商平台&#xff0c;凭借其庞大的商品种类和丰富的供应链资源&#xff0c;为无数商家和消费者提供了便捷的交易渠道。除了广受关注的女装品类…

记录将springboot的jar包和lib分离,使用docker-compose部署

本文讲诉如何把jar里的lib依赖包独立出来&#xff0c;方便更新服务时&#xff0c;缩小jar的体积&#xff0c;下面以若依的system服务为例&#xff0c;配置中的路径请酌情修改&#xff0c;主要提供大致配置逻辑 第一步&#xff1a;修改项目的pom.xml&#xff0c;调整build的配…

数据库(3)--针对列的CRUD操作

1.Create 新增 语法&#xff1a; insert into 表名 &#xff08;列名&#xff09;values &#xff08;列&#xff09;... 创建一个学生表用于演示&#xff1a; create table if not exists student( id bigint comment 编号, name varchar(20) comment 姓名 ); 1.1直接增加…

【设计模式-1】软件设计模式概述

1. 软件设计模式的产生背景 “设计模式”这个术语最初并不是出现在软件设计中&#xff0c;而是被用于建筑领域的设计中。 1977 年&#xff0c;美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫亚历山大&#xff08;Christopher Alexander&#xff09;在…

Python爬虫基础——认识网页结构(各种标签的使用)

1、添加<div>标签的代码定义了两个区块的宽度和高度均为100px&#xff0c;边框的格式也相同&#xff0c;只是区块中显示的内容不同&#xff1b; 2、添加<ul>和<ol>标签分别用于定义无序列表和有序列表。<il>标签位于<ul>标签或<ol>标签之…

Spring boot接入xxl-job

Spring boot接入xxl-job 导入maven包加入配置增加配置类创建执行器类&#xff08;写job的业务逻辑&#xff09;去控制台中配置job 导入maven包 <dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>…

去掉el-table中自带的边框线

1.问题:el-table中自带的边框线 2.解决后的效果: 3.分析:明明在el-table中没有添加border,但是会出现边框线. 可能的原因: 由 Element UI 的默认样式或者表格的某些内置样式引起的。比如,<el-table> 会通过 border-collapse 或 border-spacing 等属性影响边框的显示。 4…

空间不足导致Oracle集群内存使用率暴增

一、现象 操作系统内存使用率告警&#xff0c;已达到98%,&#xff0c;告警内容如下&#xff1a; 【全景监控&#xff1a;Oracle主机内存使用监控】 【主机名】&#xff1a;XXXXX11 【主机IP】主机IP&#xff1a;*.126.15 【告警内容】当前内存使用率为98.9%&#xff0c;超警…

spark汇总

目录 描述运行模式1. Windows模式代码示例 2. Local模式3. Standalone模式 RDD描述特性RDD创建代码示例&#xff08;并行化创建&#xff09;代码示例&#xff08;读取外部数据&#xff09;代码示例&#xff08;读取目录下的所有文件&#xff09; 算子DAGSparkSQLSparkStreaming…

React中的合成事件

合成事件与原生事件 区别&#xff1a; 1. 命名不一样&#xff0c;原生用纯小写方式&#xff0c;react用小驼峰的方式 原生&#xff1a;onclick React的&#xff1a;onClick 2. 事件处理函数的写法不一样 原生的是传入一个字符串&#xff0c;react写法传入一个回调函数 3.…

CSS——26. 伪元素2(“::before ,::after”)

::before伪类 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>伪元素</title><style type"text/css">div::before{content: "我最棒";}}</style></head><body><!--…

Openssl1.1.1s rpm包构建与升级

rpmbuild入门知识 openssh/ssl二进制升级 文章目录 前言一、资源准备1.下载openssh、openssl二进制包2.安装rpmbuild工具3.拷贝源码包到SOURCES目录下4.系统开启telnet&#xff0c;防止意外导致shh无法连接5.编译工具安装6.补充说明 二、制作 OpenSSL RPM 包1.编写 SPEC 文件2.…

patchwork++地面分割学习笔记

参考资料&#xff1a;古月居 - ROS机器人知识分享社区 https://zhuanlan.zhihu.com/p/644297447 patchwork算法一共包含四部分内容&#xff1a;提出了以下四个部分&#xff1a;RNR、RVPF、A-GLE 和 TGR。 1&#xff09;基于 3D LiDAR 反射模型的反射噪声消除 (RNR)&#xff…

基于Spring Boot的海滨体育馆管理系统的设计与实现

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的海滨体育馆管理系统的设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 宠物医院…

通过Android Studio修改第三方jar包并重新生成jar包

最近接手了来自公司其他同事的一个Unity项目,里面有一个封装的jar包要改动一下,无奈关于这个jar包的原工程文件丢失了,于是自己动手来修改下jar包,并做下记录。 一、导入第三方jar包 1、新建项目EditJarDemo(项目名随便取) 2、新建libs文件夹,把你要修改的third.jar 复制…

计算机网络之---物理层设备

什么是物理层设备 物理层设备是指负责数据在物理媒介上传输的硬件设备&#xff0c;它们主要处理数据的转换、信号的传输与接收&#xff0c;而不涉及数据的内容或意义。常见的物理层设备包括网卡、集线器、光纤收发器、调制解调器等。 物理层设备有哪些 1、网卡&#xff08;N…

flink的EventTime和Watermark

时间机制 Flink中的时间机制主要用在判断是否触发时间窗口window的计算。 在Flink中有三种时间概念&#xff1a;ProcessTime、IngestionTime、EventTime。 ProcessTime&#xff1a;是在数据抵达算子产生的时间&#xff08;Flink默认使用ProcessTime&#xff09; IngestionT…

Ubuntu 下测试 NVME SSD 的读写速度

在 Ubuntu 系统下&#xff0c;测试 NVME SSD 的读写速度&#xff0c;有好多种方法&#xff0c;常用的有如下几种&#xff1a; 1. Gnome-disks Gnome-disks&#xff08;也称为“Disks”&#xff09;是 GNOME 桌面环境中的磁盘管理工具&#xff0c;有图形界面&#xff0c;是测试…