【操作系统】24王道考研笔记——第四章 文件管理

news2024/12/23 21:00:30

第四章 文件管理

一、文件系统基础

1.基本概念

image.png

2.文件的逻辑结构

image.png

image.png

顺序文件:

image.png

索引文件:

image.png

索引顺序文件:

image.png

效率分析:

image.png

多级索引顺序文件:

image.png

总结:

image.png

3.文件目录

文件控制块(FCB)

image.png

目录的基本操作:

image.png

目录结构:

image.png

image.png

image.png

树形目录结构可以很方便地对文件进行分类,层次结构清晰,也能够更有效地进行文件的管理和保护。但是,树形结构不便于实现文件的共享。为此,提出了“无环图目录结构”。

image.png

索引结点:

image.png

总结:

image.png

4.文件的物理结构

(文件分配方式)

文件块、磁盘块:

image.png

连续分配:

  • 优点:支持顺序访问和直接访问(即随机访问);连续分配的文件在顺序访问时速度最快
  • 缺点:不方便文件拓展;存储空间利用率低,会产生磁盘碎片

image.png

链接分配:

链接分配采取离散分配的方式,可以为文件分配离散的磁盘块。分为隐式链接和显式链接两种。

隐式分配:

隐式链接——除文件的最后一个盘块之外,每个盘块中都存有指向下一个盘块的指针。文件目录包括文件第一块的指针和最后一块的指针。

  • 优点:很方便文件拓展,不会有碎片问题,外存利用率高。
  • 缺点:只支持顺序访问,不支持随机访问,查找效率低,指向下一个盘块的指针也需要耗费少量的存储空间

image.png

显式分配:

显式链接——把用于链接文件各物理块的指针显式地存放在一张表中,即 文件分配表(FAT,FileAllocation Table)。一个磁盘只会建立一张文件分配表。开机时文件分配表放入内存,并常驻内存。

  • 优点:很方便文件拓展,不会有碎片问题,外存利用率高,并且支持随机访问。相比于隐式链接来说,地址转换时不需要访问磁盘,因此文件的访问效率更高。
  • 缺点:文件分配表的需要占用一定的存储空间。

image.png

image.png

逻辑结构与物理结构对比总结:

image.png

5.文件存储空间管理

存储空间的划分:

image.png

空闲表法:

image.png

空闲链表法:

分为空闲盘块链以及空闲盘区链

image.png

image.png

位示图法:

image.png

  • 如何分配:若文件需要K个块,①顺序扫描位示图,找到K个相邻或不相邻的“0”;②根据字号、位号算出对应的盘块号,将相应盘块分配给文件;③将相应位设置为“1”。
  • 如何回收:①根据回收的盘块号计算出对应的字号、位号;②将相应二进制位设为“0”

成组链接法:

空闲表法、空闲链表法不适用于大型文件系统,因为空闲表或空闲链表可能过大。UNIX系统中采用了成组链接法对磁盘空闲块进行管理。

文件卷的目录区中专门用一个磁盘块作为“超级块”,当系统启动时需要将超级块读入内存。并且要保证内存与外存中的“超级块”数据一致

image.png

如何分配?

Eg :需要1个空闲块

①检查第一个分组的块数是否足够。1<100,因此是足够的。

②分配第一个分组中的1个空闲块,并修改相应数据

image.png

image.png

总结:

image.png

6.文件的基本操作

image.png

7.文件共享

注意:多个用户共享同一个文件,意味着系统中只有“一份”文件数据。并且只要某个用户修改了该文件的数据,其他用户也可以看到文件数据的变化。

如果是多个用户都“复制”了同一个文件,那么系统中会有“好几份”文件数据。其中一个用户修改了自己的那份文件数据,对其他用户的文件数据并没有影响。

硬链接:

image.png

软链接:

image.png

总结:

image.png

8.文件保护

口令保护:

image.png

加密保护:

image.png

访问控制:

image.png

总结:

image.png

二、文件系统

1.文件系统结构

image.png

image.png

2.文件系统布局

逻辑格式化

image.png

在外存中

image.png

在内存中

image.png

用open系统打开文件的过程

image.png

3.虚拟文件系统

普通的文件系统

image.png

虚拟文件系统

image.png

特点:

  • ①向上层用户进程提供统一标准的系统调用接口,屏蔽底层具体文件系统的实现差异
  • ②VFS要求下层的文件系统必须实现某些规定的函数功能,如:open/read/write。一个新的文件系统想要在某操作系统上被使用,就必须满足该操作系统VFS的要求
  • ③每打开一个文件,VFS就在主存中新建一个 vnode,用统一的 数据结构表示文件,无论该文件存储在哪个文件系统。
  • 注意:vnode 只存在于主存中,而 inode(索引结点) 既会被调入主存,也会在外存中存储

存在的问题:

image.png

实现函数的过程:

image.png

文件系统挂载

image.png

主要参考:王道考研课程
后续会持续更新考研408部分的学习笔记,欢迎关注。
github仓库(含所有相关源码):408数据结构笔记

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

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

相关文章

第三方软件测评报告怎么做?

第三方软件测试 总体来说&#xff0c;软件产品验收测试一般主要包括以下几个步骤&#xff1a; 1.制定测试计划&#xff0c;测试项&#xff0c;测试策略及验收通过准则&#xff0c;并经过客户参与的计划评审。 2.建立测试环境&#xff0c;设计测试用例&#xff0c;并经过评审…

华脉智联发布国标28181 Android SDK和DEMO

在目前很多行业项目中&#xff0c;客户使用的是海康、大华等监控平台的GB/28181平台&#xff0c;或者是其他的第三方的GB/28181平台。但是对于那些不具备GB/28181协议的单兵终端&#xff0c;如何接入GB/28181平台网络中呢&#xff1f; 首先&#xff0c;我们了解下GB/T28181&…

Vue中表单手机号验证与手机号归属地查询

下面是一篇关于Vue中如何进行表单手机号验证与手机号归属地查询的Markdown格式的文章&#xff0c;包含代码示例。 Vue中表单手机号验证与手机号归属地查询 手机号验证和归属地查询是许多Web应用程序中常见的功能之一。在Vue.js中&#xff0c;我们可以轻松地实现这两个功能。本…

好奇一下各个大模型对华为mate60系列的看法

目前华为Mate60系列手机已上市并获抢购&#xff0c;个人觉得很不错&#xff0c;很好奇各个AI大模型对此事的看法&#xff0c;于是对chatGPT、文心一言、讯飞星火进行了一下粗浅的测试。 题目一&#xff08;看看三个模型的综合分析能力&#xff09; “目前华为Mate60系列手机已…

CHS零壹视频恢复程序OCR使用方法

目前CHS零壹视频恢复程序监控版、专业版、高级版已经支持了OCR&#xff0c;OCR是一种光学识别系统&#xff0c;通俗说就和扫描仪带的OCR软件一样的原理&#xff1a; 分析照片->OCR获取字符串->整理字符串->输出 使用方法如下&#xff08;以CHS零壹视频恢复程序监控版…

最近

深圳近日经历了一场暴雨&#xff0c;周四夜晚&#xff0c;很多下晚班的同事因为雨水没法顺利打车回家。有个朋友&#xff0c;因为打车的等待时间太长&#xff0c;索性直接在公司过夜了。 早上因为磅礴的大雨我搁浅在家&#xff0c;也是因为下雨&#xff0c;本来要和龙哥一起去广…

html禁止用户复制内容方法

要禁止复制内容&#xff0c;可以使用以下几种方法&#xff1a; 使用CSS属性&#xff1a;可以通过设置user-select属性为none&#xff0c;这样用户就无法选中和复制内容。例如&#xff1a; body {-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user…

用栈实现队列,用队列实现栈(JAVA)

用两个栈实现队列 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 class CQueue {Stack<Integer>innew Stack<>();Stack<Integer>outnew Stack<>();public CQueue() {Stack<Integer>innew Stack<>();Stack<…

SpringBoot集成Apache RocketMQ详解

文章目录 0. 前言1. Spring Boot 集成Apache RocketMQ详细步骤1.1.添加依赖1.2.配置RocketMQ1.3.创建消息生产者&#xff08;Producer&#xff09;1.4.创建消息消费者&#xff08;Consumer&#xff09; 2. 测试验证3. 常见报错4. 参考文档5. 源码地址 0. 前言 上个章节我们学习…

下载Ubantu镜像文件、创建虚拟机以及ubantu安装详细教程

目录 前言 Ubantu是什么&#xff1f;它有什么作用&#xff1f; 一、Ubantu镜像文件下载步骤 1.第一步安装VMware Workstation 2.第二步下载Ubuntu的镜像文件 镜像文件下载官网网址入下&#xff1a; 二、创建虚拟机和安装Ubantu的步骤 1.打开VMware Workstation并点击创…

反射与注解

【今日】 人生只有一次 不妨大胆一点 目录 一 反射 1.访问构造方法 1.Constructor的使用 2.反射一个类中的所有构造方法 3.用Constructor创建并返回实列对象 2.访问成员变量 1Field的使用方法 2.反射一个类中的所有成员变量 3.获取修改成员变量的值 3.访问成员方…

javaee springMVC model的使用

项目结构图 pom依赖 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org…

【LeetCode75】第五十一题 最大子序列的分数

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们两个长度一样的数组&#xff0c;让我们再num1中找出一个长度为k的子序列&#xff0c;然后把这个子序列累加的和乘上在nums2中对…

74 QML ProgressBar显示进度数字

1 引言 由于目前使用的是qt.5.14版本&#xff0c;Qt Quick Controls 已经从1.0版本 变为2.0版本了&#xff0c;如果继续使用的Qt Quick Controls 1 的style:方式&#xff0c;改变进度条的样式已经不行了&#xff0c;其会报错&#xff1a;Invalid property name "style&quo…

Langchain的一些问题和替代选择

Langchain因其简化大型语言模型(llm)的交互方面的到关注。凭借其高级的API可以简化将llm集成到各种应用程序中的过程。 但是Langchain乍一看似乎是一个方便的工具&#xff0c;但是它有时候否更像是一个语言迷宫&#xff0c;而不是一个直截了当的解决方案。在本文中&#xff0c…

mysql 增量备份与恢复使用详解

目录 一、前言 二、数据备份策略 2.1 全备 2.2 增量备份 2.3 差异备份 三、mysql 增量备份概述 3.1 增量备份实现原理 3.1.1 基于日志的增量备份 3.1.2 基于时间戳的增量备份 3.2 增量备份常用实现方式 3.2.1 基于mysqldump增量备份 3.2.2 基于第三方备份工具进行增…

安装 Gin 框架

首先需要在目录下初始化一下 go 项目 go init可以看到生成了一个go.mod文件&#xff0c;然后使用以下命令安装 gin 框架 go get -u github.com/gin-gonic/gin养成一个好习惯&#xff0c;在写项目之前先初始化项目 go mod init go mod tidy如果不初始化项目的话没有第三方库补…

Tampermonkey实践:安装引导及开发一个网页背景色更改插件

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师…

基于SpringBoot的火车订票管理系统

基于SpringBootVue的火车订票管理系统&#xff0c;前后端分离 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 【主要功能】 角色&#xff1a;管理员、会员 会员&…

java_日期时间API

文章目录 一、JDK8之前的日期时间API1.1 System类的currentTimeMillis()1.2 两个Date类1.2.1 java.util.Date包下的1.2.2 java.sql.Date包下的 一、JDK8之前的日期时间API 1.1 System类的currentTimeMillis() 获取当前时间对应的毫秒数&#xff0c;long类型 当前时间与1970年1…