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

课程作业-第十七章:

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,一经查实,立即删除!

相关文章

c++20协程详解(三)

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

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

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

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

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

分布式事务之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…

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…

【leetcode C++】滑动窗口

1. LCR 008. 长度最小的子数组 题目 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回 0 。 题目…

“梦该醒了,少年”

顺序表 1、数据结构相关概念2、顺序表2.1、顺序表的概念及结构2.2、顺序表分类2.3、动态顺序表的实现 3、ps:源码 1、数据结构相关概念 数据结构是由“数据”和“结构”两词组合⽽来。 什么是数据&#xff1f; 常⻅的数值1、2、3、4…、教务系统⾥保存的⽤⼾信息&#xff08…

将 Elasticsearch 向量数据库引入到数据上的 Azure OpenAI 服务(预览)

作者&#xff1a;来自 Elastic Aditya Tripathi Microsoft 和 Elastic 很高兴地宣布&#xff0c;全球下载次数最多的向量数据库 Elasticsearch 是公共预览版中 Azure OpenAI Service On Your Data 官方支持的向量存储和检索增强搜索技术。 这项突破性的功能使你能够利用 GPT-4 …

docker-compose运行springinitializr用来创建springboot2

前言 spring initializr官方的地址是: https://start.spring.io/ &#xff0c;这是一个用来创建springboot脚手架的一个工具&#xff0c;但是目前这个工具已经更新到springboot3&#xff0c;而我还没学springboot3&#xff0c;目前还想继续创建springboot2&#xff0c;我就想能…

vue处理后端返回的日志

vue处理后端返回的日志&#xff0c;并保持日志内容最新&#xff08;滚动到最新内容&#xff09; 1、后端返回的日志格式如下所示&#xff0c;该如何处理成正常的文本换行 2、在获取日志的接口中做如下处理&#xff0c;把返回的/n替换成换行标签&#xff0c;并根据任务状态判断…

在Windows的Docker上部署Mysql服务

在我们做一些和数据库相关的测试时&#xff0c;往往需要快速部署一个数据库作为数据源。如果开发环境是Windows&#xff0c;且开发的代码不依赖于系统&#xff0c;即不用在linux上做开发&#xff0c;则可以将全套环境都部署在Windows上。 本地安装数据库会污染操作系统环境&…