操作系统导论课后作业-第十七章答案

课程作业-第十七章:

17.1首先以标志flag -n 10 -H 0 -p BEST -s 0运行程序来产生一些随机的分配和空闲。你能预测malloc()/free()会返回什么吗?你可以在每次请求后猜测空闲列表的状态吗?随着时间的推移,你对空闲列表有什么发现?

答:

使用以下命令./malloc.py -n 10 -H 0 -p BEST -s 0来模拟内存的随机分配和释放过程。模拟程序设定了一块大小为100的空间,其基地址为1000,头部大小为0,并采用了最优匹配的分配策略。

首先尝试分配一个大小为3的空间,模拟程序返回了起始地址1000,此时内存列表中剩余一个大小为97的空闲块。当释放这块空间后,模拟程序返回0表示释放成功,此时内存列表中包含两个空闲块,大小分别为3和97。

接下来,分配一个大小为5的空间,得到地址1003,此时内存列表更新为两个空闲块,大小分别为3和92。再次释放后,内存列表中出现了三个空闲块,大小分别为3、5和92。

然后,分配一个大小为8的空间,模拟程序返回地址1008,此时内存列表更新为三个空闲块,大小分别为3、5和84。释放后,内存列表中的空闲块数量增加到四个,大小分别为3、5、8和84。

在第四次分配时,尽管存在一个大小为8的空闲块,但模拟程序仍然返回了地址1008,这可能是由于模拟程序的设计或特定规则导致的。释放后,内存列表的状态保持不变。

第五次分配大小为2的空间时,模拟程序返回了地址1000,这意味着它从大小为3的空闲块中分割出了一部分。此时,内存列表更新为四个空闲块,大小分别为1、5、8和84。

最后,在第六次分配中,请求一个大小为7的空间,模拟程序返回了地址1008,并将之前大小为8的空闲块分割为两个块。此时,内存列表中的空闲块大小变为1、5、1和84。

如下图所示:

可以使用带有-c参数的命令./malloc.py -n 10 -H 0 -p BEST -s 0 -c来查看模拟的详细结果。结果显示,模拟过程与之前的分析是一致的。然而,模拟程序在空闲块的管理上并没有实现合并功能,可能会导致随着时间的推移,内存碎片逐渐增多。如下图所示:

17.3如果使用首次匹配(-p FIRST)会如何?使用首次匹配时,什么变快了?

答:

使用命令./malloc.py -n 10 -H 0 -p FIRST -s 0 -c,可以观察到首次分配策略的实际效果。如下图所示:

与BEST分配策略相比,FIRST分配策略在分配内存时,所需搜索的元素数量明显减少。这是因为首次分配策略仅需找到第一个满足需求的空闲块即可,无需像最优分配策略那样每次都要遍历所有空闲块。因此,使用FIRST分配策略时,查找空闲块所消耗的时间将大幅减少。

17.4对于上述问题,列表在保持有序时,可能会影响某些策略找到空闲位置所需的时间。使用不同的空闲列表排序(-l ADDRSORT,-l SIZESORT +,-l SIZESORT-)查看策略和列表排序如何相互影响。

答:

经过对比不同分配策略在不同空闲列表排序方式下的分配情况,发现以下规律:

①对于最优(BEST)和最差(WORST)这样的分配策略,空闲列表的排序方式并不会对其效率产生任何影响。无论空闲块如何排列,这两种分配策略在每次分配时都需要全面遍历所有的空闲块。

②但是对于首次(FIRST)分配策略来说,情况就有所不同。空闲列表的排序方式会直接影响其分配效率。这是因为首次分配策略的核心思路是找到首个足够大的空闲块,因此空闲块的排列顺序对于其分配效率至关重要。

综上所述,分配策略的效率与其具体的执行思路紧密相关,而空闲列表的排序方式则是对部分分配策略效率产生影响的因素之一。

具体的模拟结果如下图所示:

(1)BEST分配策略:

(2)FIRST分配策略:

(3)WORST分配策略:

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

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

相关文章

深度学习模型--残差网络(ResNet)

AI大模型学习 方向一:AI大模型学习的理论基础 提示:探讨AI大模型学习的数学基础、算法原理以及模型架构设计等。可以深入分析各种经典的深度学习模型,如卷积神经网络(CNN)、循环神经网络(RNN)以…

【gurobi】AttributeError: Index out of range for attribute ‘X‘

解释代码错误“ early_time[r,v] max(0 , (arrival_t[r,v].X - data.Early_time[r])) File "src\gurobipy\var.pxi", line 125, in gurobipy.Var.__getattr__ File "src\gurobipy\var.pxi", line 153, in gurobipy.Var.getAttr File "src\gurobipy\a…

c++20协程详解(三)

前言 前面两节我们已经能够实现一个可用的协程框架了。但我们一定还想更深入的了解协程,于是我们就想尝试下能不能co_await一个协程。下面会涉及到部分模板编程的知识,主要包括(模板偏特化,模板参数列表传值,模板函数…

谷歌(Google)技术面试——在线评估问题(三)

谷歌(Google)面试过程的第一步,你可能会收到一个在线评估链接。 评估有效期为 7 天,包含两个编码问题,需要在一小时内完成。 以下是一些供你练习的在线评估问题。 在本章结尾处,还提供了有关 Google 面试不…

进销存管理系统:食品批发零售迈向数字化未来-亿发

随着消费逐步复苏,食品批发零售行业也迎来了客流的回升,实体店重新焕发了生机。然而,随着数字化时代的来临,传统的食品批发零售企业面临着新的挑战和机遇。些企业正积极实施数字化转型,通过布局线上线下多业态的融合发…

设计模式:单例模式六种实现

单例模式有多种实现方式,每种方式都有其设计思想、优缺点以及适用的使用场景。以下是一些常见的单例实现方式: 1. 懒汉式(线程不安全) 设计思想 这种实现方式采用了类加载的懒加载机制来保证单例只在第一次使用时被创建。 实现代码 public class Singleton {private s…

分布式事务之Seata使用

分布式事务解决方案之Seata Seata的概念 Seata是阿里巴巴开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。 Seata官网给出的架构示例如下&#…

ruoyi-nbcio-plus基于vue3的flowable流程设计器主界面升级修改

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a…

C# 字节数组 byte[] 关于byte的小寄巧 以及Encoding和BitConverter

怎么读字节数组里面的内容 先是小错误 之 ToString然后是怎么办使用UTF-8编码使用ASCII编码使用其他编码未知编码注意 小demo下一个demo关于发送端的(发送新行)手搓bug编码之搓ascii encodeing评价为不如BitConverter一根 先是小错误 之 ToString 在C#中…

Docker客户端命令

一、在客户端输入 docker 命令,来查看 Docker 客户端的所有命令选项。 docker 使用 podman 模拟 Docker CLI 的功能,并创建 /etc/containers/nodocker 文件以静默消息。管理 pods、容器和镜像。 用法:podman [选项] [命令] 命令: attach 附加到一个正在运行的容器 auto-upd…

mysql故障排查

MySQL是目前企业最常见的数据库之一日常维护管理的过程中,会遇到很多故障汇总了常见的故障,MySQL默认配置无法满足高性能要求 一 MySQL逻辑架构图 客户端和连接服务核心服务功能存储擎层数据存储层 二 MySQL单实例常见故障 故障1 ERROR 2002 (HY000)…

深入理解npm常用命令

npm(Node Package Manager)是 Node.js 的包管理工具,用于管理 Node.js 应用程序的依赖包。除了安装、更新和卸载依赖包外,npm 还提供了许多其他功能,如初始化项目、运行脚本、查看依赖树等。本文将详细介绍一些常用的 …

RabbitMQ3.x之六_RabbitMQ使用场景

RabbitMQ3.x之六_RabbitMQ使用场景 文章目录 RabbitMQ3.x之六_RabbitMQ使用场景1. 为什么选择 RabbitMQ?1. 可互操作2. 灵活3. 可靠 2. 常见用户案例1. 服务解耦2. 远程过程调用3. 流处理4. 物联网 1. 为什么选择 RabbitMQ? RabbitMQ 是一个可靠且成熟的…

linux------jekins构建cicd

🎈个人主页:靓仔很忙i 💻B 站主页:👉B站👈 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:linux 🤝希望本文对您有所裨益,如有不足之处&#…

vue3+threejs新手从零开发卡牌游戏(二十四):添加p2战斗逻辑

用代码模拟p2战斗逻辑,按流程进行步骤拆分: 1.p2抽卡 2.p2召唤怪兽上场 3.p2战斗 其中战斗部分分为几种情况: 情况一:p2场上卡牌由大到小进行排序,按序轮询可以攻击的卡牌,然后攻击p1场上卡牌由大到小…

第19次修改了可删除可持久保存的前端html备忘录:换了一个特别的倒计时时钟

第19次修改了可删除可持久保存的前端html备忘录:换了一个特别的倒计时时钟 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><met…

android framework 学习笔记(1)

学习资料&#xff1a;《Android Framework 开发揭秘》_哔哩哔哩_bilibili 什么是android framework 看图说话&#xff0c;android框架从上至下分为&#xff1a; 应用层(Application)&#xff0c;Java framework(Application Framework),Native framework. 包括Libraries 和 A…

数据透视:将三特征数据集转为矩阵

本文记录利用 wps的excel软件 将包含三个变量的数据集转换成矩阵的表达形式。 1.三特征数据集 三特征数据集/三元数据集&#xff1a;原始数据集的一般表达形式。每一行代表一个样本&#xff0c;每一列代表一个变量&#xff0c;共有3个变量。 2.数据透视表 设置3个变量的行、列和…

CSS3新增的语法(四)

CSS3新增的语法&#xff08;四&#xff09;【布局】 14. 多列布局15.伸缩盒模型1. 伸缩盒模型简介2. 伸缩容器、伸缩项目3. 主轴与侧轴4. 主轴方向5. 主轴换行方式6. flex-flow7. 主轴对齐方式8. 侧轴对齐方式8.1 一行的情况8.2 多行的情况 9.flex 实现水平垂直居中10. 伸缩性1…

Maven依赖冲突解决

Maven项目运行过程中&#xff0c;如果报以下错误&#xff0c; 极有可能是依赖冲突造成的。 Caused by:java.lang.NoSuchMethodError Caused by: java.lang.ClassNotFoundException 依赖冲突原理 依赖冲突指的就是我们在引入不同的依赖时&#xff0c;不同的依赖又引入了相同…