操作系统复习4.1.0-文件管理结构
定义
一组有意义的信息的集合
属性
文件名、标识符、类型、位置、大小、创建时间、上次修改时间、文件所有者信息、保护信息
操作系统向上提供的功能
创建文件、删除文件、读文件、写文件、打开文件、关闭文件
这6个都是系统调用
创建文件
创建文件时调用Create系统调用
首先在外存中找到文件
先在外存找到所需的空间,通过空闲链表法、位示图、成组链接法等管理策略,找到空闲空间
然后在文件存放路径的信息找到该目录对应的目录文件,在目录中创建该文件对应的目录项
删除文件
根据文件存放路径找到相应的目录文件,从目录中找到文件名对应的目录项
根据目录项提供的外存地址,根据空闲表法、空闲链表法等回收文件占用的磁盘块
从目录表中删除文件对应的目录项
打开文件

删除文件

根据文件存放路径找到相应的目录文件,从目录中找到文件名对应的目录项,检查用户对文件的操作权限
将目标项复制到内存中的“打开文件表”中,并将对应表目的编号返回给用户,用户使用打开文件表的编号来指明要操作的文件
系统将读指针指向的外存中,将用户指定大小的数据读入用户指定的内存区域中
读文件
系统使用read系统调用完成写操作,需要指定哪个文件(打开文件表中的索引号)和读入多少数据,指明读入的数据要放在内存中的什么位置
系统从用户指定的内存区域中,将指定大小的数据写回写指针指向的外存
写文件
执行文件和写出数据大小,写回外存的数据放在内存的什么位置
文件存储
操作系统以块为单位分配存储空间,块等大,常包含2的整数幂个地址,外存也是由一个个存储单元组成,每个存储单元对应一个物理地址
逻辑结构
文件内组织结构:
无结构文件:如文本文件,由一些二进制或字符流组成,又称流式文件
有结构文件:如数据库表,由一组组相似的记录组成,又称记录式文件,记录是一组相关数据项的集合
根据记录长度又可分为定长记录和不定长记录
文件间组织结构:
目录、文件,目录内可以有目录和文件
根据有结构文件中的各条记录在逻辑上如何组织可以分为三类:顺序文件、索引文件、索引顺序文件
顺序文件
文件中的记录一个接一个顺序排列
又可细分为串结构和顺序结构,前者记录间顺序与关键字无关,后者则按关键字顺序排序
链式存储不支持随机存取
而顺序存储时,可变长记录则不支持随机存取,定长则可以
定长且顺序存储可实现随机存取,若再保证顺序结构,即可快速检索
索引文件
对于可变长记录文件,需要顺序查找
因此通过索引表,索引表本身是定长记录的顺序文件,可快速找到对应的索引项,
索引顺序文件
每个记录对应一个索引表项,因此索引表可能会很大,可能索引表比文件内容本身都大,因此改良为一个索引表项对应一组记录,但速率仍不够快
多级索引顺序文件就是最终改良,加入有10^6个组,以100个为1组,形成顶级索引表,次级索引表依次类推
文件目录实现
文件控制块FCB的有序集合称为文件目录,一个FCB就是一个文件目录项,FCB内包含了文件的基本信息、存取控制信息、使用信息,最主要为文件名和存放的物理地址
目录结构
单级目录结构、两级目录结构
多级目录结构(树型结构)
绝对路径为"/目录1/…/文件名",为避免每次都低效地从根目录开始查找,
因此引入当前目录和相对路径,即当前已经处于目录2,就代表目录2的结构表已经载入内存中,无需再从目录1开始寻找,文件的地址用根目录从目录2开始的相对路径
但多级目录结构不利于文件共享
无环图目录结构

通过添加共享计数器记录共享结点的数量,且由于都指向同一个文件,所有用户都可看到文件数据的变化
索引结点FCB瘦身
现在的PCB除了文件名和物理位置外有许多冗余信息,如存取权限等,而FCB主要是通过文件名匹配读出文件其他信息,因此可以通过索引结点机制为FCB瘦身,通过文件名匹配索引结点指针,指针指向文件名外的所有信息
物理结构
操作系统管理磁盘块涉及两类:非空磁盘块和空闲磁盘块
非空闲磁盘块
文件数据获得分配存储空间的方式有三种:连续分配、链接分配、索引分配
磁盘中的存储单元也会被分为一个个块/磁盘块/物理块,磁盘块与内存块、页面等大
内存与磁盘间的数据交换都是以块为单位进行的,每次读入写出都为一块
由于外存管理是以块为单位,因此文件的逻辑地址空间被分为一个个的文件块,与内存相似地,也可分为(逻辑块号、块内地址)
连续分配
每个文件在磁盘上占有一组连续的块用户通过逻辑地址操作文件
(逻辑块号、块内地址)—>(物理块号、块内地址)
物理块号 = 起始块号 + 逻辑块号
而文件目录中记录了文件名和起始块号和块数,因此可以随机访问
连续分配优势在连续读写时的速度快
但文件的拓展不方便,需要经常挪位,且会产生碎片
链接分配
为文件分配离散的磁盘块
隐式链接
目录中记录文件名、起始块号和结束块号
每个磁盘块会保存指向下一个盘块的指针,且对用户透明
隐式链接的文件只支持顺序访问,外存利用率高,不会有碎片问题
显式链接
目录中记录文件名和起始块号,另设置文件分配表FAT,用于记录文件各个物理块的指针,每个磁盘仅设置一张FAT,开机后将FAT读入内存,并常驻内存,由于FAT表项等大,因此同样隐含块号
逻辑块号转换成物理块号的过程不需要读磁盘操作,且显示链接支持随机访问和顺序访问,过程间不需访问磁盘,速度更快,且不产生外部碎片,文件拓展方便
索引分配

索引分配允许文件离散地分配在各个磁盘块中,系统会为每个文件建立一张索引表,索引表中记录了文件的各个逻辑块对应的物理块
区分:文件存放数据的磁盘块叫数据块,索引表存放的磁盘块叫索引块
逻辑块号—>物理块号
用户给出逻辑块号,系统查找对应的FCB,从FCB中可知索引表位置,再由索引表和逻辑块号得知物理块号,由此可知索引分配方式可以支持随机访问,文件拓展也容易实现,但索引表占用一定存储空间
但磁盘块大小有限,索引表放不下怎么办?
链接方案
一个文件比较大,需要多个索引块,那么将索引块间链接起来,但查询时效率低
多层索引

类同多级页表,磁盘块大小b/索引表项大小 = 每个磁盘块最多存放在的索引项数量a
文件最大长度:k层索引, a^k*b
k层索引,k+1磁盘读取操作
混合索引

两种模式混合,针对文件大小进行了方式的区分和选择,小文件就无需多次读取磁盘

空闲磁盘块
存储空间的划分和存储化
存储空间的划分:将物理磁盘划分为一个个文件卷(逻辑卷、逻辑盘)
磁盘分区:C、D、E盘
盘内分区为:目录区、文件区
目录区:存放文件目录信息FCB、用于磁盘存储空间管理的信息
文件区:用于存放文件数据
空闲表法
适用于连续分配方式,通过表记录第一个空闲盘块号和连续的空闲盘块号,当请求块时,使用首次适应算法,其他算法也可采用
回收时根据前后有无空闲区进行合并表项
空闲链表法

空闲盘块链
分配时,从链头开始一次摘下k个盘块分配,并修改空闲链的链头指针
回收时,回收的盘块依次挂到链尾,并修改链尾指针
空闲盘区链
分配时,采用首次适应、最佳适应等算法,从链头开始检索,若没有合适的连续空闲块,也可将不同盘区同时分配给一个文件
回收时,若回收区和某个空闲盘区相邻,则需要将回收区合并到空闲盘区,否则将回收区作为单独空闲盘区挂到链尾
位示图法

位示图法使用(字号i、位号j),盘块号b = ni+j
字号i = b / n,位号j = b%n
0为空闲,1为盘块已分配
分配时
顺序扫描位示图,找到k个相邻/不相邻的0
根据字号和位号算出对应的盘块号,将相应盘块分配给文件
将相应位设置为1
回收时
根据回收的盘块号计算出对应的字号、位号
将对应位设为0
成组链接法
空闲表法和空闲链表法不适用于大型文件系统,因为空闲表或空闲链表过大时,UNIX系统中采用了成组链接法对磁盘空闲块进行管理
文件卷的目录区中专门用一个磁盘块作为超级块,当系统启动时需要将超级块读入内存,并保证内存和外存中的超级块数据一致

超级块中存储下一组空闲盘块数和空闲块号
当需要分配内存块时,先检查第一个分组的块数是否充足,若充足则使用第一个分组里面取出需要数量的空闲块,若此时第一分组存放着下一组的信息,则需要将下一组的信息复制到超级块中

当第一组未满时,直接添加

第一组满了之后,将原本超级块信息复制到新回收块中,新回收块成为第一个分组
文件共享
基于索引结点的硬链接
索引结点有助于文件目录瘦身,因为文件检索只要文件名,其余信息放到索引结点,索引结点中设置链接计数变量count,用于表示链接到本索引结点上的用户目录项数,用户删除文件时count-1,count=0时系统删除文件
基于符号链的软链接

增添Link类型文件,存放指向目标文件的路径,类同快捷方式
当文件1被删除了,文件2仍存在,只是不能执行文件1
文件保护
口令保护
口令存放在文件对应的FCB或者索引结点,访问文件前需输入口令
口令空间开销小,验证也快
但口令放在系统内部,不够安全
加密保护
通过密码加密文件,加密后文件数据和原始数据不一样
保密性强,不需要存储密码
但编码和译码耗时
访问控制

每个文件的FCB中都有一个访问控制列表,记录各个用户可以对该文件执行哪些操作
文件系统层次结构


相关文章:
操作系统复习4.1.0-文件管理结构
定义 一组有意义的信息的集合 属性 文件名、标识符、类型、位置、大小、创建时间、上次修改时间、文件所有者信息、保护信息 操作系统向上提供的功能 创建文件、删除文件、读文件、写文件、打开文件、关闭文件 这6个都是系统调用 创建文件 创建文件时调用Create系统调用…...
【嵌入式烧录/刷写文件】-2.6-剪切/保留Intel Hex文件中指定地址范围内的数据
案例背景: 有如下一段HEX文件,保留地址范围0x9140-0x91BF内的数据,删除地址范围0x9140-0x91BF外的数据。 :2091000058595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F70717273747576775F :2091200078797A7B7C7D7E7F808182838485868788898A…...
JavaScript表单事件(下篇)
目录 八、keydown: 当用户按下键盘上的任意键时触发。 九、keyup: 当用户释放键盘上的键时触发。 十、keypress: 当用户按下键盘上的字符键时触发。 十一、focusin: 当表单元素或其子元素获得焦点时触发。 十二、focusout: 当表单元素或其子元素失去焦点时触发。 十三、c…...
机器学习 | SVD奇异值分解
本文整理自哔哩哔哩视频:什么是奇异值分解SVD–SVD如何分解时空矩阵 📚奇异值分解是什么? M是原始矩阵,它可以是任意的矩阵,奇异值分解就是将它分解为三个矩阵相乘。U和V是方阵,∑是不规则矩阵,…...
chatgpt赋能python:Python取值:介绍
Python取值:介绍 Python是一种非常流行的高级编程语言,适用于各种任务,包括数据科学、机器学习、Web开发和自动化。它被广泛使用,因为它易于学习、易于使用、易于阅读和易于维护。Python中的取值对于程序员来说是一个极其有用的工…...
广播风暴的成因以及如何判断、解决
广播风暴(broadcast storm)简单的讲是指当广播数据充斥网络无法处理,并占用大量网络带宽,导致正常业务不能运行,甚至彻底瘫痪,这就发生了“广播风暴”。一个数据帧或包被传输到本地网段 (由广播…...
Loki 日志收集系统
一.系统架构 二.组成部分 Loki 的日志堆栈由 3 个组件组成: promtail:用于采集日志、并给每条日志流打标签,每个节点部署,k8s部署模式下使用daemonset管理。 loki:用于存储采集的日志, 并根据标签查询日志流…...
uCOSii信号量的作用
uCOSii中信号量的作用: 在创建信号量时,Sem_EventOSSemCreate(1)用于分时复用共享资源; Sem_EventOSSemCreate(0)用于中断和任务间同步或任务之间的同步。 具体在使用时,需要灵活运用。在访问共享资源时,我喜欢用互…...
Android 13 版本变更总览
Android 13 总览 https://developer.android.google.cn/about/versions/13?hlzh-cn 文章基于官方资料上提取 Android 13 功能和变更列表 https://developer.android.google.cn/about/versions/13/summary?hlzh-cn 行为变更:所有应用 https://developer.andr…...
QT 设计ROS GUI界面订阅和发布话题
QT 设计ROS GUI界面订阅和发布话题 主要参考下面的博客 ROS项目开发实战(三)——使用QT进行ROS的GUI界面设计(详细教程附代码!!!) Qt ROS 相关配置请看上一篇博客 首先建立工作空间和功能包&a…...
pandas数据预处理
pandas数据预处理 pandas及其数据结构pandas简介Series数据结构及其创建DataFrame数据结构及其创建 利用pandas导入导出数据导入外部数据导入数据文件 导出外部数据导出数据文件 数据概览及预处理数据概览分析利用DataFrame的常用属性利用DataFrame的常用方法 数据清洗缺失值处…...
Jupyter Notebook如何导入导出文件
目录 0.系统:windows 1.打开 Jupyter Notebook 2.Jupyter Notebook导入文件 3.Jupyter Notebook导出文件 0.系统:windows 1.打开 Jupyter Notebook 1)下载【Anaconda】后,直接点击【Jupyter Notebook】即可在网页打开 Jupyte…...
Linux:/dev/tty、/dev/tty0 和 /dev/console 之间的区别
在Linux操作系统中,/dev/tty、/dev/tty0和/dev/console是三个特殊的设备文件,它们在终端控制和输入/输出过程中扮演着重要的角色。尽管它们看起来很相似,但实际上它们之间存在一些重要的区别。本文将详细介绍这三个设备文件之间的区别以及它们…...
Linux 上安装 PostgreSQL——Ubuntu
打开 PostgreSQL 官网 PostgreSQL: The worlds most advanced open source database,点击菜单栏上的 Download ,可以看到这里包含了很多平台的安装包,包括 Linux、Windows、Mac OS等 。 Linux 我们可以看到支持 Ubuntu 和 Red Hat 等各个平台…...
合并两个有序链表(java)
leetcode 21题:合并两个有序链表 题目描述解题思路:链表的其它题型。 题目描述 leetcode21题:合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例: 输入&…...
KEYSIGHT是德DSOX4034A 示波器 350 MHz
KEYSIGHT是德DSOX4034A 示波器 350 MHz,是德4000 X 系列拥有一系列引以为傲的配置,包括采用了电容触摸屏技术的 12.1 英寸显示屏、InfiniiScan 区域触摸触发、100 万波形/秒捕获率、MegaZoom IV 智能存储器技术和标配分段存储器。 是德DSO-X4034A 主要特…...
局域网技术
共享信道的分配技术是局域网的核心技术,而这一技术又与网络的拓扑结构和传输介质有关。 拓扑结构: 1.总线型拓扑: 总线一种多点广播介质,所有的站点通过接口硬件连接到总线上。 传输介质主要是同轴电缆(基带和宽带…...
Pixhawk无人机-ArduPilot 软件SITL仿真模拟飞行(SITL+MAVProxy)
1 引言 本人是先看了多个博客实现了:在ubuntu下建立完整的ardupilot开发环境。 该文是基于搭建完编译环境后,也就是搭建好ardupilot的仿真环境实现的。 在文章: 《Pixhawk无人机扩展教程(5)—SITL仿真模拟飞行:开发环境搭建》.中指出&#…...
vue实现深拷贝的方法
在 vue中,深拷贝是一个很有用的功能,在不改变原来对象状态的情况下,进行对象的复制。 但要实现深拷贝,需要两个对象具有相同的属性。如果两个对象不同,深拷贝也不能实现。 1.我们将变量A的属性赋给变量B,但…...
LAMP架构
文章目录 LAMP架构一.简述各组件的主要作用如下: 二.过程展示1.编译安装Apache httpd服务(1)关闭防火墙,将安装Apache所需软件包传到/opt目录下(2)安装环境依赖包(3)配置软件模块(4)编译及安装(5)优化配置文件路径,并把httpd服务的可执行程序…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
