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

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

Linux 文件类型,目录与路径,文件与目录管理

文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...

基于服务器使用 apt 安装、配置 Nginx

🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

什么是VR全景技术

VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...

DiscuzX3.5发帖json api

参考文章:PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下,适配我自己的需求 有一个站点存在多个采集站,我想通过主站拿标题,采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...