操作系统复习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服务的可执行程序…...

业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...

css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...

在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...

Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...

基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...