操作系统原理第9章 磁盘存储器管理 重点内容
目录
(一)外存的组织方式种类
(二)FAT 系统(计算)
(三)文件存储空间的管理方式
(一)外存的组织方式种类
- 连续组织方式
- 原理:在磁盘等外存上,为文件分配一组连续的物理块。比如一个文件需要 5 个物理块存储,就会在磁盘上找连续的 5 个空闲块。
- 优点:文件读取速度快,因为磁头移动距离短,可顺序读取。实现简单,管理方便,只需记录文件起始块号和块数。
- 缺点:易产生外部碎片,磁盘空间利用率低。新文件分配空间时,可能因找不到连续大块空闲区而无法存储,即便磁盘有足够零散空闲空间 。
- 链接组织方式
- 原理:为文件分配不连续的物理块,通过指针将这些块链接起来。分为隐式链接和显式链接 。隐式链接是每个物理块中含指向下一块的指针,文件目录记录起始块号;显式链接是把所有块间链接指针集中存放在一张表(如文件分配表 FAT )中 。
- 优点:有效利用磁盘零散空间,减少外部碎片。新文件分配空间灵活,只要有空闲块就能分配 。
- 缺点:隐式链接查找效率低,需逐个块读指针找后续块;显式链接虽查找效率有提升,但 FAT 表需占用一定内存空间 。
- 索引组织方式
- 原理:为每个文件建立一个索引表,表中记录文件各逻辑块对应的物理块号,索引表存于外存,文件目录记录索引表地址 。
- 优点:文件存储灵活,可分配不连续物理块,空间利用率高。查找速度快,通过索引表可直接定位物理块 。
- 缺点:索引表占用额外存储空间,大文件索引表可能很大,需多级索引,增加管理复杂度 。
(二)FAT 系统(计算)
- FAT(文件分配表)概念:FAT 是一种记录磁盘上文件存储位置和空闲空间信息的数据结构。它以表格形式记录每个簇(磁盘存储的基本分配单位 )的使用情况,通过簇号来标识。
- 计算相关要点
- 簇号计算:知道文件起始簇号,根据文件大小和每个簇容量,可计算文件占用簇数及后续簇号。如文件大小 10KB,簇大小 4KB,起始簇号为 5 ,则占用簇数约为 3(10KB÷4KB 向上取整 ),后续簇号可通过 FAT 表中指针查找 。
- 空间计算:根据 FAT 表项大小和磁盘总簇数,可计算 FAT 表占用空间。比如 FAT16(表项 16 位 ),磁盘有 n 个簇,FAT 表占用空间为 n×2 字节(16 位 = 2 字节 ) 。
- 文件定位计算:给定文件逻辑块号,通过文件目录找到索引节点(含 FAT 表指针 ),再在 FAT 表中查找对应簇号,换算出物理块号,实现文件定位 。
(三)文件存储空间的管理方式
- 空闲表法
- 原理:将外存上所有空闲区视为一个文件,用一张空闲表记录各空闲区起始块号和块数。分配空间时,找合适空闲区分配;回收时,更新空闲表 。
- 优点:简单直观,类似内存动态分区分配。
- 缺点:适合连续分配,不适合大量小文件频繁分配回收,易产生外部碎片 。
- 空闲链表法
- 原理:把空闲块或空闲区链接成链表。有单块链表(每个空闲块含指向下一空闲块指针 )和成组链表(将若干空闲块成组,每组首块记录下组位置及本组块数 ) 。分配时从链表取块,回收时插入链表 。
- 优点:灵活管理空闲空间,适合非连续分配。成组链表结合连续和链接优点,提高查找和分配效率 。
- 缺点:单块链表查找效率低;成组链表管理稍复杂 。
- 位示图法
- 原理:用一个二进制位对应一个物理块,位值 0 表示空闲,1 表示已分配。通过位示图可快速判断块状态,进行分配回收操作 。分配时找 0 位,回收时将对应位清 0 。
- 优点:空间管理紧凑,分配回收速度快,可通过位运算实现 。
- 缺点:位示图需占用一定内存空间,大规模磁盘管理时,位示图可能较大 。
- 成组链接法
- 原理:将空闲块分组,每组第一个块记录下一组空闲块信息(如块数、块号 ),最后一组空闲块的第一个块无后续组信息。超级块记录第一组空闲块信息 。分配时从第一组取块,不足时从后续组移块补充;回收时先加入当前组,满组后创建新组 。
- 优点:结合多种方法优点,高效管理大量空闲块,UNIX 系统常用 。
- 缺点:实现相对复杂,需维护组间链接和空闲块信息 。
相关文章:
操作系统原理第9章 磁盘存储器管理 重点内容
目录 (一)外存的组织方式种类 (二)FAT 系统(计算) (三)文件存储空间的管理方式 (一)外存的组织方式种类 连续组织方式 原理:在磁盘等外存上&…...

一文速通Python并行计算:11 Python多进程编程-进程之间的数据安全传输-基于队列和管道
一文速通 Python 并行计算:11 Python 多进程编程-进程之间的数据安全传输-基于队列和管道 摘要: Python 多进程中,Queue 和 Pipe 提供进程间安全通信。Queue 依赖锁和缓冲区,保障数据原子性和有序性;Pipe 实现点对点单…...

LangChain-Tool和Agent结合智谱AI大模型应用实例2
1.Tool(工具) 定义与功能 单一功能模块:Tool是完成特定任务的独立工具,每个工具专注于一项具体的操作,例如:搜索、计算、API调用等 无决策能力:工具本身不决定何时被调用,仅在被触发时执行预设操作 输入输出明确:每个工具需明确定义输入、输出参数及格式 2.Agent(…...
HTML、XML、JSON 是什么?有什么区别?又是做什么的?
在学习前端开发或者理解互联网工作原理的过程中,我们经常会遇到三个非常重要的概念:HTML、XML 和 JSON。它们看起来有点像,但其实干的事情完全不同。 🏁 一、他们是谁?什么时候诞生的? 名称全称诞生时间谁…...
C++中IO文件输入输出知识详解和注意事项
以下内容将从文件流类体系、打开模式、文本与二进制 I/O、随机访问、错误处理、性能优化等方面,详解 C 中文件输入输出的使用要点,并配以示例。 一、文件流类体系 C 标准库提供三种文件流类型,均定义在 <fstream> 中: std…...

centos7.6阿里云镜像各个版本介绍
(水一期) Index of /centos-vault/centos/7.6.1810/isos/x86_64/ File NameFile SizeDateParent directory/--0_README.txt2.4 KB2018-12-01 21:21CentOS-7-x86_64-DVD-1810.iso4.3 GB2018-11-26 07:55CentOS-7-x86_64-DVD-1810.torrent86.0 KB2018-12-…...

InnoDB引擎逻辑存储结构及架构
简化理解版 想象 InnoDB 是一个高效运转的仓库: 核心内存区 (大脑 & 高速缓存 - 干活超快的地方) 缓冲池 Buffer Pool (最最核心!): 作用: 相当于仓库的“高频货架”。把最常用的数据(表数据、索引)从…...
KVM——CPU独占
文章目录 机器现况信息配置CPU独占(pin)启用 CPU 独占(隔离)验证 机器现况信息 [rootkvm-server ~]# virsh list --allId 名称 状态 --------------------------- CULinux-VM 关闭- ubuntu20.04 关闭- ubuntu24.04 关闭[roo…...

第4讲、Odoo 18 模块系统源码全解与架构深度剖析【modules】
引言 Odoo 是一款强大的开源企业资源规划(ERP)与客户关系管理(CRM)系统,其核心竞争力之一在于高度模块化的架构设计。模块系统不仅是 Odoo 框架的基石,更是实现功能灵活扩展与定制的关键。本文将结合 Odoo…...

pytorch简单线性回归模型
模型五步走 1、获取数据 1. 数据预处理 2.归一化 3.转换为张量 2、定义模型 3、定义损失函数和优化器 4、模型训练 5、模型评估和调优 调优方法 6、可视化(可选) 示例代码 import torch import torch.nn as nn import numpy as np import matplot…...
在 HTML 文件中添加图片的常用方法
本文详解HTML图片插入方法:1)通过<img>标签实现,必须含src和alt属性;2)路径支持绝对/相对引用;3)建议设置width/height保持比例;4)响应式方案用srcset适配不同设备…...

四、web安全-行业术语
1. 肉鸡 所谓“肉鸡”是一种很形象的比喻,比喻那些可以随意被我们控制的电脑,对方可以是WINDOWS系统,也可以是UNIX/LINUX系统,可以是普通的个人电脑,也可以是大型的服务器,我们可以象操作自己的电脑那样来…...
Kafka核心技术解析与最佳实践指南
Apache Kafka作为分布式流处理平台的核心组件,以其高吞吐、低延迟和可扩展性成为现代数据架构的基石。本文基于Kafka官方文档,深度解析其核心技术原理,并结合实践经验总结关键技巧与最佳实践。 Kafka的高性能源于其精巧的架构设计࿰…...

Unity基础学习(十二)Unity 物理系统之范围检测
目录 一、关于范围检测的主要API: 1. 盒状范围检测 Physics.OverlapBox 2. 球形范围检测 Physics.OverlapSphere 3. 胶囊范围检测 Physics.OverlapCapsule 4. 盒状检测 NonAlloc 版 5. 球形检测 NonAlloc 版 6. 胶囊检测 NonAlloc 版 二、关于API中的两个重…...

JVM 的垃圾回收机制 GC
C/C 这样的编程语言中,申请内存的时候,是需要用完了,进行手动释放的 C 申请内存 1)局部变量(不需要手动释放) 2)全局变量(不需要手动释放) 3)动态申请 malloc(通过 free 进行释放的) C 申请内存 1)局部变量 2)全局变量/静态变量 3)动态申请 new 通过 delete 进行释放 …...
TypeScript 针对 iOS 不支持 JIT 的优化策略总结
# **TypeScript 针对 iOS 不支持 JIT 的优化策略总结** 由于 iOS 的 **JavaScriptCore (JSC)** 引擎 **禁用 JIT(Just-In-Time 编译)**,JavaScript 在 iOS 上的执行性能较差,尤其是涉及动态代码时。 **TypeScript(T…...
00 QEMU源码中文注释与架构讲解
QEMU源码中文注释与架构讲解 先占坑:等后续完善后再更新此文章 注释作者将狼才鲸创建日期2025-05-30更新日期NULL CSDN阅读地址:00 QEMU源码中文注释与架构讲解Gitee源码仓库地址:才鲸嵌入式/qemu 一、前言 参考网址 QEMU 源码目录简介qe…...
ansible template 文件中如果包含{{}} 等非ansible 变量处理
在 Ansible 模板中,如果你的 Python 脚本里有大量 {}、f""、或者其他 Jinja 会误解析的语法,就需要用 {% raw %}…{% endraw %} 把它们包起来,只在需要替换变量的那一行单独“放行”。例如: {% raw %} #!/usr/bin/env …...
Screen 连接远程服务器(Ubuntu)
连接 1. 安装screen 默认预安装,可以通过命令查看: screen --version 若未安装: # Ubuntu/Debian sudo apt-get install screen 2. 本机连接远程服务器 ssh root192.168.x.x 在远程服务器中打开screen: screen -S <nam…...

路由器、网关和光猫三种设备有啥区别?
无论是家中Wi-Fi信号的覆盖,还是企业网络的高效运行,路由器、网关和光猫这些设备都扮演着不可或缺的角色。然而,对于大多数人来说,这三者的功能和区别却像一团迷雾,似懂非懂。你是否曾疑惑,为什么家里需要光…...

vscode实时预览编辑markdown
vscode实时预览编辑markdown 点击vsode界面,实现快捷键如下: 按下快捷键 CtrlShiftV(Windows/Linux)或 CommandShiftV(Mac)即可在侧边栏打开 Markdown 预览。 效果如下:...

2505软考高项第一、二批真题终极汇总
第一批2025.05综合题(75道选择题) 1、2025 年中央一号文件对进一步深化农村改革的各项任务作出全面部署。“推进农业科技力量协同攻关”的相关措施不包括()。 A.强化农业科研资源力量统筹,培育农业科技领军企业 B.发挥农业科研平台作用&…...

云原生安全基础:Linux 文件权限管理详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 在云原生环境中,Linux 文件权限管理是保障系统安全的核心技能之一。无论是容器化应用、微服务架构还是基础设施即代码(IaC…...
A类地址中最小网络号(0.x.x.x) 默认路由 / 无效/未指定地址
A类地址中最小网络号(0.x.x.x)为何不指派? 在IPv4的A类地址中,网络号范围为 0.0.0.0 ~ 127.0.0.0,但网络号0(即0.x.x.x) 通常不被指派给任何网络,原因如下: 1. 0.x.x.x …...

[嵌入式实验]实验二:LED控制
一、实验目的 1.熟悉开发环境 2.控制LED灯 二、实验环境 硬件:STM32开发板、CMSIS-DAP调试工具 软件:ARM的IDE:Keil C51 三、实验内容 1.实验原理 (1)LED灯原理与点亮 LED即发光二极管,有电流通过…...

6.4.2_3最短路径问题_Floyd算法
Floyd弗洛伊德 膜拜大佬,给大佬鞠躬鞠躬鞠躬。。。。。。。。。 Floyd算法 ----解决顶点间的最短路径: 过程: 如下: 初始化(没有中转点):2个邻接矩阵A和path,第一个是没有中转点的2个顶点之间的最短路径…...

<PLC><socket><西门子>基于西门子S7-1200PLC,实现手机与PLC通讯(通过websocket转接)
前言 本系列是关于PLC相关的博文,包括PLC编程、PLC与上位机通讯、PLC与下位驱动、仪器仪表等通讯、PLC指令解析等相关内容。 PLC品牌包括但不限于西门子、三菱等国外品牌,汇川、信捷等国内品牌。 除了PLC为主要内容外,PLC相关元器件如触摸屏(HMI)、交换机等工控产品,如…...
day 33 python打卡
作业:今日的代码,要做到能够手敲。这已经是最简单最基础的版本了。 import torch print(torch.__version__) print(torch.version.cuda) print(torch.cuda.is_available()) import torch# 检查CUDA是否可用 if torch.cuda.is_available():print("CU…...
开发时如何通过Service暴露应用?ClusterIP、NodePort和LoadBalancer类型的使用场景分别是什么?
一、Service核心概念 Service通过标签选择器(Label Selector)关联Pod,为动态变化的Pod集合提供稳定的虚拟IP和DNS名称,主要解决: 服务发现负载均衡流量路由 二、Service类型详解 1. ClusterIP(默认类型…...
【机械视觉】Halcon—【六、交集并集差集和仿射变换】
【机械视觉】Halcon—【六、交集并集差集和仿射变换】 目录 【机械视觉】Halcon—【六、交集并集差集和仿射变换】 介绍 交集并集差集介绍: 1. 交集(Intersection) 2. 并集(Union) 3. 差集(Differenceÿ…...