OS复习笔记ch12-2

辅存管理

文件分配问题

image.png

  1. 创建文件一次性分配最大空间吗?
  2. 分配连续的分区空间,分区多大?
  3. 用什么数据结构记录?
    (1)分配方式
    image.png
    类似于#ch8-3调页机制,文件分配也有预分配和动态分配的形式。
    一般拷贝/备份文件的时候,我们明确得知文件的大小,可以采用预分配,其他基本都是动态分配。

(2)分区大小
portion size 分区/簇大小(连续分区)
image.png
如果采用固定分区,存在两个极端

  • 分配可以容纳全部文件大小的分区(内碎片很多,浪费严重)
  • 一次分配一块(跟文件大小无关,管理开销很大)
    实际上,辅存分配与内存分配类似
  • 分区较大:提高I/O访问性能,减小管理开销;但分区内碎片浪费问题较严重;
  • 分区较小:分区内的碎片浪费较小,特别是大量小文件时有利;但管理开销大(如FAT12、16、32);

如果采用动态分区,I/O访问的性能确实较好,不过管理开销随之也更大了。

文件的存储/物理结构

image.png
文件的物理结构和文件存储的组织形式和存储介质有关。文件分配一般有以下三种分配方式

连续分配

连续分配方式要求每个文件在磁盘上占有一组连续的块(文件分配表中只一个表项)。

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

链接分配

image.png

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

(1)隐式链接:除文件的最后一个盘块之外,每个盘块中都存有指向下一个盘块的指针。文件目录包括文件第一块的指针和最后一块的指针,一般用于顺序文件。

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

一般考试题中遇到未指明隐式/显式的“链接分配”,默认指的是隐式链接的链接分配

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

举个🌰,早期的DOS中采用FAT32,就是一种显示链接分配(用4个字节存放盘块号,启动之后在内存中),现在的DOS一般采用NTFS。

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

索引分配

image.png
目前常见的主流的文件分配形式——索引分配。

索引分配允许文件离散地分配在各个磁盘块中,系统会为每个文件建立一张索引表,索引表中记录了文件的各个逻辑块对应的物理块(类似于内存管理中的页表→建立逻辑页面到物理页之间的映射关系)。

索引表存放的磁盘块称为索引块。文件数据存放的盘块称为数据块。
image.png

若文件太大,索引表项太多,可以采取以下三种方法解决:

  1. 链接方案:如果索引表太大,一个索引块装不下,那么可以将多个索引块链接起来存放。缺点:若文件很大,索引表很长,就需要将很多个索引块链接起来。想要找到i号索引块,必须先依次读入0~i-1号索引块,这就导致磁盘I/O次数过多,查找效率低下。
  2. 多层索引:建立多层索引(原理类似于多级页表)。使第一层索引块指向第二层的索引块。还可根据文件大小的要求再建立第三层、第四层索引块。采用K层索引结构,且顶级索引表未调入内存,则访问一个数据块只需要K+1次读磁盘操作。缺点:即使是小文件,访问一个数据块依然需要K+1次读磁盘。
  3. 混合索引:多种索引分配方式的结合。例如,一个文件的顶级索引表中,既包含直接地址索引(直接指向数据块),又包含一级间接索引(指向单层索引表)、还包含两级间接索引(指向两层索引表)。优点: 对于小文件来说,访问一个数据块所需的读磁盘次数更少。

举个🌰,在Linux类操作系统中文件系统ext2会使用混合索引的模式
image.png
一般来说,像hello.c这种小文件是direct访问(无需建立索引),而single indirect是一级索引,往往存放的是音频文件,double indirect是二级索引,往往是视频文件。

重要考点:
(1)要会根据多层索引、混合索引的结构计算出文件的最大长度(Key:各级索引表最大不能超过一个块)
(2)要能自己分析访问某个数据块所需要的读磁盘次数(Key:FCB中会存有指向顶级索引块的指针,因此可以根据FCB读入顶级索引块。每次读入下一级的索引块都需要一次读磁盘操作。另外,要注意题目条件–顶级索引块是否已调入内存)

举个🌰,若盘块大小为1KB,一个盘块号需4个字节存放。那么一级、二级索引方式各支持的最大文件是多大?

  • 一级索引方式:
    在一级索引方式中,每个文件的索引项占用一个盘块(1KB),其中每个索引项存储一个盘块号。因此,一级索引可以直接引用的盘块数为1KB / 4B = 256个。由于每个盘块大小为1KB,所以一级索引支持的最大文件大小为256 * 1KB = 256KB。
  • 二级索引方式:
    在二级索引方式中,除了使用一级索引外,还使用了一个二级索引表。每个文件的索引项仍占用一个盘块(1KB),其中每个索引项存储一个盘块号,指向二级索引表。二级索引表中的每个索引项也占用一个盘块(1KB),其中每个索引项存储一个盘块号,指向文件的数据块。因此,二级索引可以引用的盘块数为256(一级索引) * 256(二级索引表) = 65,536个。由于每个盘块大小为1KB,所以二级索引支持的最大文件大小为65,536 * 1KB = 65,536KB = 64MB。

知识点总结
image.png

空闲空间的管理

(1)Bit Tables 位图(内存空间+磁盘空间)
image.png
位示图:每个二进制位对应一个盘块。在本例中,“0”代表盘块空闲,“1”代表盘块已分配。位示图一般用连续的“字”来表示,如本例中一个字的字长是16位,字中的每一位对应一个盘块。因此可以用(字号,位号)对应一个盘块号。
(2)空闲区链
每个空闲区有指针、长度,通过指针链接。每次分配一个块,需要读取指针等信息并写入新首块后才能写数据到此块。分配/回收多个块时,需多次指针修改。
优点:适用于所有的文件分配方法,少量的空间开销
缺点:产生碎片,且多次修改指针不方便。
(3)空闲块表
image.png
可以用栈/对于队列去存一部分空闲盘块作为空心啊盘块表,然后读进内存用于分配和回收,适用于连续分配的方式

知识总结:
image.png

文件系统的全局结构

在文件系统中,对于OS和进程都有一个文件表,便于各自的管理:

  • 全局打开文件表:包含所有打开文件的信息,每个条目指向一个具体的FCB。全局文件表跟踪哪些文件当前被打开,以及它们被打开的模式和状态。
  • 进程文件表:每个进程有自己的文件表,文件表中的每个条目包含一个指向全局打开文件表的指针和一个引用计数。

image.png

这张图详细描述了在文件管理系统中打开(open)和读取(read)文件的过程。图中的步骤与数据流程图配合,展示了从用户命令到文件系统操作的详细步骤。以下是各个步骤的详细解释:

(1)打开文件

  • 用户执行open命令:用户通过输入一个文件路径和打开模式(如只读、读写等),请求打开一个文件。例如 open(/.../M/A, R)
  • 检索FCB(文件控制块):系统首先检索文件控制块FCB,它包含了文件的元数据,如文件名、类型、权限、大小、修改时间等。在这个例子中,文件A的FCB被检索出来,复制到系统全局的打开文件表。
  • 分配文件描述符:系统为打开的文件分配一个文件描述符(fd),文件描述符是一个索引,指向进程文件表中的一个条目,该条目链接到系统打开文件表。

(2)读取文件

  • 用户执行read命令:用户通过read(fd, buffer, size)命令请求读取文件,其中fd是文件描述符,buffer是数据存储的内存地址,size是请求读取的字节数。
  • 定位文件数据:系统使用文件描述符定位全局打开文件表中的条目,从而获取FCB。FCB中包含文件数据的位置信息,系统利用这些信息找到文件数据的实际物理位置。(对应从fd出发的红色箭头指向)
  • 数据传输:系统将数据从存储设备读入到指定的内存缓冲区。

更为具体的🌰,在Linux0.1x中打开文件的流程图示:
image.png
这张图展示了Linux 0.1X版本中文件管理系统的核心组件与其工作方式。
图中的左部是文件描述符表,对应上述进程文件表,中部文件表对应全局文件表。下面是对这些组件和它们之间联系的详细解释:

(1)进程的描述符表
每个运行的进程在其进程控制块中有一个文件描述符表,该表存储了一个指向文件表条目的指针数组。每个进程都有一个唯一的文件描述符表,用于追踪该进程打开的所有文件。文件描述符是一个非负整数,用作索引来访问这个数组。图中显示的0, 1, 2通常分别代表标准输入、标准输出和标准错误输出。

(2)文件表(file_table)
文件表是一个全局的数据结构,包含了系统中所有打开文件的信息。每个条目都包含:

  • f_count:引用计数,表示有多少文件描述符指向这个文件表项。
  • f_inode:指向对应inode的指针。
  • f_pos:文件的当前读写位置。

文件表中的每个条目可以被多个进程共享,这在执行例如管道或文件重定向操作时非常常见。

(3)inode表(inode_table)
inode表也是一个全局的数据结构,它存储了文件的元数据。每个inode条目包括:

  • 文件类型(普通文件、目录等)。
  • 文件的访问权限(读、写、执行)。
  • 文件大小。
  • 指向文件实际数据块的指针等信息。

每个文件或目录在文件系统中有一个唯一的inode,它包含了文件的几乎所有信息。

进程通过文件描述符与文件表项进行交互,而文件表项又通过inode链接到文件的具体数据和属性。这种设计允许系统高效地处理文件操作,支持多进程访问同一文件,并维护文件状态的一致性。这也是现代Unix/Linux系统文件管理的基础,虽然随着时间的推移,这些结构和API已经发展和扩展,但基本原则仍然相同。

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

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

相关文章

手撕RPC——实现简单的RPC调用

手撕RPC——实现简单的RPC调用 一、场景设计二、设计思路2.1 客户端的设计2.2 服务端的设计2.3 通信设计 三、代码实现3.1 定义用户信息3.2 用户服务接口3.3 用户服务接口实现3.4 定义消息格式3.5 实现动态代理类3.6 封装信息传输类3.7 定义服务端Server接口3.8 实现RpcServer接…

代码随想录-Day37

56. 合并区间 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。 示例 1: 输入:in…

安装react之nvm版本低引起的问题

1.背景 准备搭建一个react,然后看官网文档 创建项目,使用命令行 npx create-next-applatest 创建项目的流程都是正常的。当我准备运行项目的时候,报错了 原先的报错没有了,从网上找了一个类似的 重要的内容是:当前…

网络技术原理需要解决的5个问题

解决世界上任意两台设备时如何通讯的?? 第一个问题,pc1和pc3是怎么通讯的? 这俩属于同一个网段,那么同网段的是怎么通讯的? pc1和pc2属于不同的网段,第二个问题,不同网段的设备是…

【5】apollo编写python节点步骤及实例

在workspace/modules下新建包buildtool create --template component modules/test_one 编译包 buildtool build -p modules/test_two/ 增加自己的proto消息 在刚才自动生成的proto文件里面添加自己定义的消息,记得重新编译. syntax "proto2";package apollo;…

UltraEditUEStudio软件安装包下载及安装教程

​根据软件大数据显示提供预定义的或使用者创建的编辑“环境”,能记住 UltraEdit 的所有可停靠窗口、工具栏等的状态。实际上我们可以这样讲HTML 工具栏,对常用的 HTML 功能作了预配置;文件加密/解密;多字节和集成的 IME。根据使用者情况表明Git Editor&…

vue3项目使用Electron打包成exe的方法与打包报错解决

将vue3项目打包成exe文件方法 一、安装 1.安装electron npm install electron --save-devnpm install electron-builder --save-dev 2.在vue项目根目录新建文件index.js // index.js// Modules to control application life and create native browser window const { app…

font-spider按需生成字体文件

font-spider可以全局安装,也可以单个项目内安装,使用npm run xxxx的形式 npm i font-spider "dev": "font-spider ./*.html" <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name&…

什么是APP分发-了解APP分发的核心概念

APP分发的定义和意义 大家有没有过这样的经历&#xff1a;辛辛苦苦开发了一款APP&#xff0c;却不知道该怎么让更多人知道和使用&#xff1f;APP分发的重要性就凸显出来了。APP分发就是将你的应用推送到不同的应用市场和平台&#xff0c;让更多用户能够下载和使用。 小猪app封…

[机器学习算法]支持向量机

支持向量机&#xff08;SVM&#xff09;是一种用于分类和回归分析的监督学习模型。SVM通过找到一个超平面来将数据点分开&#xff0c;从而实现分类。 1. 理解基本概念和理论&#xff1a; 超平面&#xff08;Hyperplane&#xff09;&#xff1a;在高维空间中&#xff0c;将数据…

【Python机器学习】k均值聚类——k均值的失败案例

k均值可能不总能找到“正确”的簇个数&#xff0c;每个簇仅由其中心定义&#xff0c;这意味着每个簇都是凸形。因此&#xff0c;k均值只能找到相对简单的形状。k均值还假设所有簇在某种程度上具有相同的“直径”&#xff0c;它总是将簇之间的边界刚好画在簇中心的之间位置。有时…

python使用pywebview打造一个现代化的可视化GUI界面

&#x1f308;所属专栏&#xff1a;【python】✨作者主页&#xff1a; Mr.Zwq✔️个人简介&#xff1a;一个正在努力学技术的Python领域创作者&#xff0c;擅长爬虫&#xff0c;逆向&#xff0c;全栈方向&#xff0c;专注基础和实战分享&#xff0c;欢迎咨询&#xff01; 您的…

海洋生物识别系统+图像识别+Python+人工智能课设+深度学习+卷积神经网络算法+TensorFlow

一、介绍 海洋生物识别系统。以Python作为主要编程语言&#xff0c;通过TensorFlow搭建ResNet50卷积神经网络算法&#xff0c;通过对22种常见的海洋生物&#xff08;‘蛤蜊’, ‘珊瑚’, ‘螃蟹’, ‘海豚’, ‘鳗鱼’, ‘水母’, ‘龙虾’, ‘海蛞蝓’, ‘章鱼’, ‘水獭’, …

Linux配置中文环境

文章目录 前言中文语言包中文输入法中文字体 前言 在Linux系统中修改为中文环境&#xff0c;通常涉及以下几个步骤&#xff1a; 中文语言包 更新源列表&#xff1a; 更新系统的软件源列表和语言环境设置&#xff0c;确保可以安装所需的语言包。 sudo apt update sudo apt ins…

《计算机英语》 Unit 3 Software Engineering 软件工程

Section A Software Engineering Methodologies 软件工程方法论 Software development is an engineering process. 软件开发是一个工程过程。 The goal of researchers in software engineering is to find principles that guide the software development process and lea…

如何选择服务器?快解析能搭建私人服务器吗?

随着网络的发展&#xff0c;搭建私人服务器逐渐成为网络达人们的热门选择&#xff0c;比如建立私人性质的博客、论坛、FTP、个人网站、服务器集群等。通过源搭建私人服务器&#xff0c;就可以将很多资源分享到网络上进行信息共享。随之而来的是服务器市场不断扩大&#xff0c;在…

网络安全:Web 安全 面试题.(XSS)

网络安全&#xff1a;Web 安全 面试题.&#xff08;XSS&#xff09; 网络安全面试是指在招聘过程中,面试官会针对应聘者的网络安全相关知识和技能进行评估和考察。这种面试通常包括以下几个方面&#xff1a; &#xff08;1&#xff09;基础知识:包括网络基础知识、操作系统知…

# Kafka_深入探秘者(1):初识 kafka

Kafka_深入探秘者&#xff08;1&#xff09;&#xff1a;初识 kafka 一、kafka 特性 1、Kafka &#xff1a;最初是由 Linkedln 公司采用 Scala 语言开发的一个多分区、多副本并且基于 ZooKeeper 协调的分布式消息系统&#xff0c;现在已经捐献给了 Apache 基金会。目前 Kafka…

CentOS系统查看版本的各个命令

cat /etc/centos-release 查看CentOS版本 uname -a 命令的结果分别代表&#xff1a;当前系统的内核名称、主机名、内核发型版本、节点名、系统时间、硬件名称、硬件平台、处理器类型以及操作系统名称 cat /proc/version 命令用于查看Linux内核的版本信息。执行该命令后&#xf…

【Linux基础】SSH登录

SSH简介 安全外壳协议&#xff08;Secure Shell Protocol&#xff0c;简称SSH&#xff09;是一种加密的网络传输协议&#xff0c;可在不安全的网络中为网络服务提供安全的传输环境。 SSH通过在网络中建立安全隧道来实现SSH客户端与服务器之间的连接。 SSH最常见的用途是远程登…