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

【总结】【OS】成组链接法

特性说明
基本思想将空闲磁盘块分成若干组,每组内采用栈结构管理,组间通过链表链接。内存中常驻超级块,记录当前组的空闲块信息,以实现高效分配与回收。
数据结构(内存)超级块(Super Block)包含:
- 当前组空闲块数free_count
- 空闲块栈free_stack[],存储当前组可分配的空闲块号(栈顶块号可分配)
数据结构(磁盘)每组的第一块(索引块)存储:
- 下一组第一块的块号(链指针)
- 本组其余空闲块号(不含自身)
该索引块本身不存储文件数据,仅用于组织空闲块。
分配过程1. 若超级块中free_count > 1,则从栈顶取出块号分配,free_count--
2. 若free_count = 1,则栈顶块号指向下一组索引块。先将该块内容读入超级块(加载下一组信息),然后将该块分配出去(作为数据块使用)。
回收过程1. 若超级块栈未满,直接将回收块号压栈,free_count++
2. 若栈已满,则将当前超级块内容(free_countfree_stack)写入回收块,然后将超级块重置:free_count = 1,栈中唯一元素为回收块号(该块成为新组索引块)。
优点- 分配和回收多数情况只需访问内存超级块,减少磁盘 I/O。
- 分组结构缩短搜索链长度,提升管理效率。
- 适用于大规模磁盘空间管理。
缺点- 超级块在内存,系统崩溃可能导致信息丢失(需持久化机制)。
- 实现较复杂,需处理组间切换的边界条件。
应用经典应用于 UNIX 文件系统(如 UFS)的空闲块管理。
相关计算设磁盘块大小为B字节,块号用N字节表示,则每组最多可容纳空闲块数为:(B / N) - 1(其中一项存下一组块号)。超级块栈大小通常为此值。
注意事项- 超级块需定期写回磁盘以保证一致性。
- 分配和回收操作需互斥,防止竞态条件。
- 初始化时从磁盘读取超级块信息(通常位于固定位置)。
类别核心内容详情说明
基本定义大型文件系统的空闲磁盘块管理方法,结合空闲表法与空闲链表法优点,解决空闲表 / 链表过大问题,UNIX/Linux 系统采用核心思想:分组管理 + 链栈结合,平衡内存开销与分配速度
核心数据结构1. 空闲盘块号栈(内存)2. 组描述块(外存)3. 超级块(外存 + 内存)1. 栈记录当前组空闲块数 N 与块号,分配弹栈、回收压栈2. 每组首个块为组描述块,记录下一组块数与块号,最末组 S.free (0)=0(结束标志)3. 系统启动时读超级块入内存,同步内外存超级块数据
分配流程(k 块 / 组)1. 检查栈顶:栈非空则弹栈分配2. 栈空处理:读当前组描述块(原栈底块)的下一组信息入栈,释放原组描述块3. 重复 1-2 直到分配成功例:k=100,当前组分配完时,加载下一组 100 个块号入栈,原组描述块转为普通空闲块
回收流程(k 块 / 组)1. 压栈回收:将释放块号压入空闲栈2. 栈满处理:新建组,当前栈中 k 个块作为新组,原栈底块作为组描述块,记录下一组信息,新组信息写入超级块3. 同步超级块到外存例:k=100,栈满时,新组的组描述块记录旧组信息,新块号压入新栈
关键计算(k=100)1. 初始建树:每组最多 k 块,最末组 k-1 块2. 读写磁盘次数:仅组切换时读写外存,单次分配 / 回收通常仅内存操作分配 / 回收 N 块时,磁盘 I/O 次数≈N/k(组切换次数)
性能对比与空闲表法、空闲链表法对比1. 内存开销:小(仅存当前组栈 + 超级块)2. 分配速度:快(内存栈操作,组切换才读写磁盘)3. 适用场景:大型文件系统,解决空闲表 / 链表过大问题
408 高频易错点1. 栈空 / 栈满时的组切换逻辑2. 最末组结束标志(S.free (0)=0)3. 超级块同步机制(防止数据丢失)1. 栈空是加载下一组,栈满是创建新组2. 结束标志常作为选择题考点3. 超级块需保证内存与外存数据一致

某个系统采用成组链接法来管理磁盘的空闲空间,目前磁盘的状态如图所示。

(1) 该磁盘中目前还有多少个空闲盘块?

(2) 请简述磁盘块的分配过程。

(3) 在为某个文件分配3个盘块后,系统要删除另一文件,并回收它所占的5个盘块,它们的盘块号依次为700、711、703、788、701,请画出回收后的盘块链接情况

接下来分配301号盘块

从更新后的内存栈中取栈顶盘块号(即 301 号),分配给进程;栈内空闲盘块数更新为N=100-1=99

http://www.cnnetsun.cn/news/139441.html

相关文章:

  • 【总结】【数据结构】【OS】【计组】【计网】
  • 小程序毕设项目:基于springboot的智能学习小程序(源码+文档,讲解、调试运行,定制等)
  • 小程序毕设项目:基于springboot+微信小程序的大学生餐厅点餐系统小程序(源码+文档,讲解、调试运行,定制等)
  • Flutter 与 AI 深度集成:用 Gemini 打造智能应用的实战指南(2025 版)
  • 零基础IM开发入门:什么是IM聊天系统的端到端加密?
  • MyBatis批量插入从5分钟优化到3秒,我做了这3件事
  • AI搜索文献:高效精准的学术资源获取与研究支持工具
  • 2025 年主流网络安全威胁盘点:常见风险与对应防御方案全解析
  • 万字长文读懂跨站脚本攻击(XSS)全解析(附 Java 代码示例、漏洞分析及修复技巧)
  • 文献评阅期末作业写作指南与实践技巧探讨
  • 学术诚信文献考核:基于文献分析的学术诚信考核机制构建与实践路径研究
  • 【Leetcode】1786. Number of Restricted Paths From First to Last Node
  • 給自學者的覺醒:我後悔太晚擁抱類型註解,它讓我的Side Project完成速度快了3倍
  • 【康复效率提升300%的秘密】:深度解析医疗Agent自主调参机制
  • htop入门指南:5分钟掌握Linux系统监控
  • 【论文精读(六)】PointCNN:点云也能用卷积?揭秘神奇的 X-Transformation (NeurIPS 2018)
  • 传统热部署VS快马AI:效率提升300%的对比实验
  • 用htop源码快速构建自定义监控工具
  • YOLOv11 改进 - C2PSA | C2PSA融合CPIASA跨范式交互与对齐自注意力机制(ACM MM2025): 交互对齐机制破解特征融合难题,提升小目标与遮挡目标判别力
  • MySQL-MVCC协议(转载IT秀才的文章)
  • 用Groovy快速构建REST API原型:1小时搞定
  • 做 PPT 最难的不是内容,而是模板:10 个免费又好用的 PPT 模板网站整理
  • 需求波动剧烈怎么办?:用多Agent协同预测应对不确定性
  • SD模型实战:用快马平台5分钟搭建AI艺术生成器
  • 游戏 AI 训练资源稀缺预警:2024年最值得收藏的5个开源框架推荐
  • 【量子 Agent 算法优化终极指南】:揭秘下一代智能体高效决策核心机制
  • 医疗康复Agent方案调整实战手册(基于10万+病例数据验证)
  • 会话(Session)
  • AI编程助手如何帮你快速掌握Java基础
  • Alertmanager在生产环境中的5个最佳实践案例