首页 内存的分配与回收实验报告(最先适应法)

 内存的分配与回收实验报告(最先适应法)

开通vip
举报

爱问共享资料内存的分配与回收实验报告(最先适应法)文档免费下载,数万用户每天上传大量最新资料,数量累计超一个亿 ,《操作系统》实验说明 内存的分配与回收实验报告 实验环境WindowsXPVisualC任务分配 实验目的1.加深了解有关内存的分配与回收2.掌握为实现多道程序并发执行操作系统是如何通过作业调度选择作业进入内存3.强化编程能力和水平实验内容用C语言模拟出内存的分配与回收算法思想为了合理地分配和使用这些存储空间当用户提出申请主存储器空间时存储管理必须根据申请者的要求按一定的策略分析主存空间和使用情况找出足够的空闲区域给申请者本模拟实验使用的是最先适应算法当作业撤离归还主存资源时则存储管理要收回占用的主存空间主存的分配和回收的实现...

内存的分配与回收实验报告(最先适应法)

《操作系统》实验说明 内存的分配与回收实验报告 实验环境WindowsXPVisualC任务分配 实验目的1.加深了解有关内存的分配与回收2.掌握为实现多道程序并发执行操作系统是如何通过作业调度选择作业进入内存3.强化编程能力和水平实验内容用C语言模拟出内存的分配与回收算法思想为了合理地分配和使用这些存储空间当用户提出申请主存储器空间时存储管理必须根据申请者的要求按一定的策略分析主存空间和使用情况找出足够的空闲区域给申请者本模拟实验使用的是最先适应算法当作业撤离归还主存资源时则存储管理要收回占用的主存空间主存的分配和回收的实现是与主存储器的管理方式有关的通过本实验帮助我们理解在不同的存储管理方式下应怎样实现主存空间的分配和回收最先实验算法是将空闲区按其在存储空间中的起始地址递增的顺序排列为作业分配存储空间时从空闲区链的始端开始查找选择第一个满足要求的空闲区而不管它究竟有多大内存分为两种状态使用和未使用的分别链接成双向链表每次分配或回收后修改相应的链表 内存的分配与回收算法 流程 快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计 图否是否 代码实现如下includestdiohincludemallochincludestdlibhdefinen64定义内存的大小inta[n]count0数组a用来保存内存使用状况1为已分配0为未分配count用来记name数组中元素个数charname[n]已分配内存的名称字符类型typedefstructlinknodecharpidintstartintlengthstructlinknodeleftrightde_node进程节点结构体定义head1表示未分配内存队列头指针

内存的分配与回收实验报告(最先适应法)1

head2便是已分配进程队列头指针de_nodehead1head2NULLstructlinknodecreat创建一个进程节点intlenflag11用于表示进程是否可以创建charidstructlinknodeppde_nodemallocsizeofde_node试图在系统内存中开辟空间创建一个进程ifpNULLp为空说明系统没有可用内存用于创建此模拟进程printf"系统没有足够的内存可供使用n"输出returnNULL返回空指针printf"请输入进程id字符类型和长度"为进程输入id和分配的长度scanf"cd"idlenfflushstdin清除输入缓存ifidaidzidAidZlen0forinti0icounti判断输入的进程名如果已使用返回空指针并释放p指针ifname[i]idprintf"此名称进程已存在"flag10标志位为0表示下面对p指向内容不做修改freepreturnNULLiflen0如果输入要分配的进程长度为0释放p返回空指针printf"输入长度为0n"freepreturnNULLifflag1标志位1可以对p指向内容进行修改p-pidididp-start0初始开始内存位置在以后会修改p-lengthlen长度p-leftNULL左指针p-rightNULL右指针name[count]id将id存入数组count自加returnp返回创建的进程的地址elseprintf"输入进程格式有误n"freepreturnNULL分配内存空间voiddistributede_nodepde_nodeqhead1tempi

内存的分配与回收实验报告(最先适应法)2

ntflag0dodo_while循法判断当前指向的内存空间的长度是否满足p所申请的长度大于就分配ifq-lengthp-lengthp-startq-start把进程的内存开始地址指向内存的可用开始地址处q-startp-length可用地址起始改变q-length-p-length可用内存长度修改forintip-startip-startp-lengthi将已分配的内存空间全部置1a[i]1flag1表示内存可分配队列不止一个进程第一个满足条件并且刚好分配完修改指针指向ifq-length0q-rightqifqhead1如果第一个满足修改头指针指向head1q-rightq-left-rightq-rightq-right-leftq-leftfreeq把这个已分配完的空间指针释放ifflag1已做完处理直接跳出循环breakifflag0当前指向的内存不满足指向下一个继续判断是否满足qq-rightwhileqhead1搜索一遍可用内存序列ifflag0没有可用的内存printf"没有满足的内存n"count--由于创建时加1但在分配内存时失败把1又减掉freep把这个未分配到内存的进程释放ifflag1表示上面已分配好内存并已修改内存链表下面修改已分配内存的进程队列temphead2把已分配内存的进程队列赋值给临时指针iftempNULL如果还还没有存在的任何的进程说明当前是第一个head2p让头指针指向第一个进程p-leftp双向队列第一个左右指针都指向自己p-rightp双向队列第一个左右指针都指向自己elseiftempNULL已存在队列把当

内存的分配与回收实验报告(最先适应法)3

前直接链到第一个与上面的区别是指针指向head2p让头指针指向p指向的进程p-lefttemp-leftp进程左边为原来第一个的左边p-righttempp进程右边指向第一个temp-left-rightp原来第一个的左边为ptemp-leftp原来第一个的左边的进程为p对进程的回收voidreclaimcharidintflag0de_nodeqhead2phead1ifhead2NULL表示当前没有进程printf"已没有进程n"else已分配内存队列如果不为空printf"输入要回收的进程id"输入要回收进程的idscanf"c"idfflushstdinforinti0icounti双重循环把要回收的进程找出来并把 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 的id去掉ifname[i]id判断当前的进程是否满足要求forintjijcountjname[j]name[j1]向前覆盖name[j1]NULL置空count--减一判断是否总共只有一个进程且是够刚好也满足条件ifq-pididq-rightqhead2qhead2NULL把已分配队列直接置空flag1表示找到满足条件的进程ifflag0上面的都没找到doifq-pidid如果找到ifqhead2head2q-rightq-left-rightq-right修改指针指向q-right-leftq-leftflag1breakelseqq-rightwhileqhead2如果找到或是遍历一遍结束ifflag0printf"没有此进程号n"没有找到满足的进程ifflag1表示找到了forintiq-startiq-startq-leng

内存的分配与回收实验报告(最先适应法)4

thi释放占有的内存a[i]0接下来修改可用内存的队列whileq-startp-startp-righthead1从第一个开始找到回收回来的内存开始地址大的那个队列pp-rightifphead1表示比第一个的开始还小那么就要修改头地址head1q其他情况不用修改头地址只需找到应该的位置把此进程插进去q-leftp-left修改指针的指向q-rightpp-left-rightqp-leftqifq-startq-lengthp-start可以与后面合并的情况q-lengthp-length修改指针的指向p-right-leftqq-rightp-rightfreepifq-left-startq-left-lengthq-start可以与前面合并的情况q-left-lengthq-length修改指针的指向q-left-rightq-rightq-right-leftq-leftfreeq打印输出voidprintde_nodeqhead2phead1ifcount0printf"没有进程占有内存n"elseprintf"输出进程id号n"forinti0icountiprintf"ct"name[i]printf"n"printf"输出内存当前使用情况n"forintj0jnjprintf"ddt"ja[j]printf"n"printf"内存初始名称为i回收后可能会变可以查看回收来自那个进程n"do输出可用内存序列ifpNULLprintf"进程idc开始地址d长度dn"p-pidp-startp-lengthpp-rightwhilephead1pr

内存的分配与回收实验报告(最先适应法)5

intf"n"printf"已分配进程队列n"do已分配进程队列ifqNULLprintf"进程idc开始地址d长度dn"q-pidq-startq-lengthqq-rightwhileqhead2主函数voidmainintxde_nodepointp1创建内存的初始状态pointstructlinknodemallocsizeofstructlinknodehead1pointpoint-pidipoint-start0point-lengthnhead1-leftpointhead1-rightpointprintwhile1printf"------MENU-------n"printf"1----distribute分配n"printf"2----reclaim回收n"printf"3----view浏览n"printf"4----exit退出n"printf"请输入上面的选项1--4n"scanf"d"xfflushstdinswitchxcase1p1creatifp1NULLprintf"创建进程失败n"elsedistributep1x0breakcase2reclaimx0breakcase3printx0breakcase4printf"ThanksBye-bye"exit0x0breakdefaultprintf"输入有误请重新输入n"测试用例运行时屏幕显示 实验结果1成功实现了内存的分配与回收实现了最先适应算法2更好的掌握了双向链表与指针的应用3代码具有比较好的健壮性能处理非法输入4回收时可以将可用的相邻内存区合并起来减少碎片  

本文档为【内存的分配与回收实验报告(最先适应法)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。

[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

下载免费 ,已有0人下载

最新资料

热门推荐

推荐专题

普通用户 is_348501

暂无简介