2022年操作系统内存管理模拟系统的实现 .pdf
《2022年操作系统内存管理模拟系统的实现 .pdf》由会员分享,可在线阅读,更多相关《2022年操作系统内存管理模拟系统的实现 .pdf(47页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、摘要操作系统的内存管理是指系统软件对其他应用程序使用内存时所作的管理,是一种统筹关系。本设计采用活动分区方案,但不采用紧凑算法。假设系统内存容量为 100KB 。能处理内存回收的时候上下邻合并的问题;对随机出现的进程 i 申请 jKB 内存,程序能判断是否能分配; 释放随机的首地址为Handle的内存块;同时输出内存使用情况和空闲情况。关键字 :内存资源;分配;存储管理;回收名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 47 页 - - - - - - - - - 目录
2、1 概述 . 51.1 设计任务 . 51.2 设计思想 . 51.3 基础知识 . 52 各模块伪码算法 . 62.1 主程序 . 72.2 创建进程模块 . 82.3 进程信息模块 . 92.4 进程申请模块 . 102.5 分区创建模块 . 112.6 内存分配模块 . 122.7 低级调度模块 . 143 函数关系调用图 . 154 测试结果 . 164.1 主界面调试结果 . 164.2 创建进程调试结果 . 174.3 进程信息调试结果 . 174.4 进程申请调试结果 . 184.5 分区创建调试结果 . 194.6 内存分配调试结果 . 204.7 内存回收调试结果 . 214
3、.8 打印分区调试结果 . 224.9 低级调度调试结果 . 235 源程序 . 246 总结. 45参考文献 . 46名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 47 页 - - - - - - - - - 致谢. 47名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 47 页 - - - - - - - - - 摘要操作系统的内存管理是指系统软
4、件对其他应用程序使用内存时所作的管理,是一种统筹关系。本设计采用活动分区方案,但不采用紧凑算法。假设系统内存容量为 100KB 。能处理内存回收的时候上下邻合并的问题;对随机出现的进程 i 申请 jKB 内存,程序能判断是否能分配; 释放随机的首地址为Handle的内存块;同时输出内存使用情况和空闲情况。关键字 :内存资源;分配;存储管理;回收名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 47 页 - - - - - - - - - 1 概述1.1 设计任务应用内存管理
5、实现内存管理的分配和回收。能处理内存回收的时候上下邻合并的问题以及输出内存使用情况和空闲情况。采用活动分区方案,但不采用紧凑算法。假设系统内存容量为100KB。要能处理内存回收的时候上下邻合并的问题;对随机出现的进程i 申请 jKB 内存,程序能判断是否能分配;释放随机的首地址为Handle的内存块;要求输出内存使用情况和空闲情况。根据给定的动态分区分配算法流程图,用熟悉的计算机编程语言编写一程序,该程序实现内存的合理分配后回收。1.2 设计思想通过本次课程设计,学习如何进行内存的分区管理,强化了对首次适应分配算法和分区回收算法的理解。此课设需要随机产生进程或者由用户输入进程相应信息,实现动态
6、内存管理:设计主界面以灵活选择某算法。主要实现的算法有:首次适应算法、最佳适应算法、最坏适应算法和循环适应算法。实现的主要功能有:创建进程,查看进程信息,进程申请,分区创建,内存分配,内存回收,打印分区,低级调度等。分析设计要求,根据老师给出的要求,我们需创建进程和分区,然后申请进程,然后再进行内存的分配与回收。1.3 基础知识内存是现代计算机系统运转的核心.内存由一大片连续的字或字节组成,每个字或字节都有自己的地址,CPU 根据程序计数器的值从内存中取出指令,而取出的指令可能引发额外的操作,例如读取或存储特定的内存地址.举个例子 ,一个典型的指令执行周期如下:首先从内存中读取一条指令,然后解
7、码这条指令 ,解码时可能会从内存中读取这条指令(例如间接地址运算 )的操作数 (operand),当这条指令完成对操作数的运算后,运算结果可能被存储到内存中. 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 47 页 - - - - - - - - - 2 各模块伪码算法图 2.1 总体结构流程图最先适应算法循环适应算法最佳适应算法最坏适应算法内存管理创建进程进程信息内存分配分区创建进程申请内存回收打印分区低级调度前后两分区都不是空闲分区前未空闲后空闲前空闲后未空闲前后两
8、分区都是空闲分区名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 47 页 - - - - - - - - - 图 2.1 为总体结构流程图2.1 主程序主函数既是程序的入口,又是程序的出口,通常我们还可以指定一个exit code再退出,以表明程序最后的结果是什么样的。由于主函数肩负着入口和出口的重任,所以最好不要把太多的细节方面的逻辑直接放在主函数内,这样不利于维护和扩展。主函数应该尽量简洁,具体的实现细节应该封装到被调用的子函数里面去。此主函数中包括很多功能模块,其中
9、各功能模块用菜单方式选择,为我们提供了九个功能选项。如图2.1 所示图 2.1 主程序流程图显示一系列功能模块输入数字,判断数字是否为 19 根据数字的值调用各功能模块函数开始结束N Y 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 47 页 - - - - - - - - - 2.2 创建进程模块进程的创建也就有两种方式:一是由操作系统创建,二是由父进程创建。在系统启动时,操作系统会创建一些进程,他们承担着管理和分配系统资源的任务,这些进程通常被称为系统进程。系统允许
10、一个进程创建新进程,新进程即为子进程,子进程还可以创建新的子进程,形成进程树结构。此创建进程模块可以输入自己想创建的进程数进而实现进程创建。如图2.2 所示图 2.2 创建进程流程图coutProcessNum; tapplyIndex=new inProcessNum;初始化进程申请队列assignPointer=new intProcessNum;/ 初始化进程分配队列maxApplyNum=ProcessNum; pro=randomCreatPro(ProcessNum); 创建成功开始输入创建进程的个数初始化进程申请队列初始化进程分配队列创建进程结束名师资料总结 - - -精品资料欢
11、迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 47 页 - - - - - - - - - 2.3 进程信息模块进程又称任务,是一个动态的使用系统资源、处于活动状态的应用程序。进程的管理由进程控制块PCB、进程调度、中断管理、任务队列等组成,它是linux 文件系统、存储管理、设备管理和驱动程序的基础。进程控制块PCB 中包含了进程的所有信息, 主要包括进程 PID、进程所占有的内存区域、 文件描述符和进程环境等信息。如图2.3 所示图 2.3 进程信息流程图Ifpro=NULL return ERRO
12、R Forint i=0;istatus=0 coutstatus=1/进程状态coutstatus=-1 else ifpro-status=2 coutstatus=-2 cout未就绪 开始进程是否创建输出该进程信息结束N Y 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 47 页 - - - - - - - - - coutnext cout.fill( ) Whilep!=NULL cout.width(3) cout 分区的大小p=p-next; retur
13、n 创建成功end 2.6 内存分配模块常见内存分配算法如下:首次适应算法,从空闲分区链首开始查找。循环适应算法,从上次找到的空闲分区开始查找。最佳适应算法,是最小的空闲分区分配给作业。最差适应算法,最差适应算法中,该算法按大小递减的顺序形成空闲区链,内存分配,第一次分配,从头结点开始,其他重上次分配的节点开始,然后从分配资源的进程开始分配,若分配的进程进已分配进程队列,则申请进程的偏移指针回首址,修改分配数。如图2.6 所示伪代码Node p=head-next 返回最大空闲结点计数 count if(p=NULL) 则cout 空闲链表不存在否则do if(p-status=0) 则名师资
14、料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 47 页 - - - - - - - - - Cout+ if(count=1) 则 p=q 否则 if(p-subarea.subareaSizeq-subarea.subareaSize) 图 2.6 内存分配模块流程图Y Y N N 该分区空闲吗?分区长 =SIZE? 将状态位置为正在使用返回分区号取下一表项开始选择所要的适应算法要求按 SIZE 大小分区取分区说明表第一项表结束吗?无法分配N Y 名师资料总结 - - -
15、精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 47 页 - - - - - - - - - 2.7 低级调度模块低级调度又称为进程调度、短程调度,它决定就绪队列中的哪个进程将获得处理机,然后由分派程序执行把处理机分配给该进程的操作。在批处理,分时,实时三类系统中,进程调度必须被配置,因而是一种最基本的调度。与中级调度交换,高级调度作业调度相对应。低级调度的功能:保存处理机的现场信息。按某种算法选取进程。把处理器分配给进程。如图2.7 所示图 2.7 低级调度模块流程图开始是否存在已分配好资源
16、的进程选择一个就绪进程进入CPU CPU 正在调度进程获得处理机 ,开始执行结束N Y 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 47 页 - - - - - - - - - 3 函数关系调用图如图 3.1 所示,为函数关系调用图,主函数main()调用其他九个模块,Cowattemper() 调用 Displyprocess(),Creatprocess()调用 Randomcreatpro()总体结构流程如下图所示。Applyforprocess() Cowa
17、ttemper() Menu() Displayprocess() Callbackmemory() Display() Assignmemory() Main() Createlinklist() Creatprocess() Randomcrearpro() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 47 页 - - - - - - - - - 4 测试结果所谓程序调试是指对程序的查错与排错。在编写完一个源程序之后,不要立即进行编译,而应对程序进行全面的人工检
18、查一遍,检查无误后可以开始进行程序调试。由编译系统进行检查、发现错误,根据编译系统提示的错误类型和警告及出现的位置,我们可以定位到错误地点进行修改,然后再编译,如此反复进行,直至不再出现错误位置,最后才进行程序的连接于运行调试完以后,下一步就是对程序进行测试,运行程序,向程序中输入数据,根据输出结果是否正确(是否符合自己的想法)来判断程序是否正确,如果不正确或不符合自己的目的,就需要对程序进行修改。然后再调试,再测试,直至结果无误或符合要求后,测试才算结束,此时,程序才算是满足题目要求的正确程序。4.1 主界面调试结果主界面调试结果是运行程序后出现的主界面,它包括了内存管理中的一系列应用,它主
19、要包括,创建进程,进程信息,进程申请,分区创建,内存分配,内存回收,打印分区,低级调度等应用,我们可以选择1-9 的数字进行相应的操作,如果写入除1-9 以外的数字,程序运行将自动退出,不再运行。图 4.1 主界面调试结果图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 47 页 - - - - - - - - - 4.2 创建进程调试结果创建进程运行结果, 我们可以根据主界面显示结果,选择数字1,进而进行创建进程,创建进程时,需要你先输入想要创建进程的数目,然后再创建
20、进程。其中创建的进程里面包括进程的大小和其运行状态。如果写入除1-9 以外的数字,程序运行将自动退出,不再运行。图 4.2 创建进程调试结果图4.3 进程信息调试结果进程信息调试结果。 我们可以根据主界面显示结果,选择数字2,进而可以查看进程的信息,进程的信息里面包括所创建进程的大小和进程的状态。如果我们选择 1 和 3-9 的数字则进行相应的操作,如果写入除1-9 以外的数字,程序运行将自动退出,不再运行。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 47 页 -
21、- - - - - - - - 图 4.3 进程信息调试结果图4.4 进程申请调试结果进程申请调试结果, 我们可以根据主界面显示结果,选择数字3,然后根据主界面的提示输入所要申请进程的数目,如果输入的申请进程的数目大于所创建进程的数目,则退出提示重新输入申请进程的数目。然后再根据申请数目输入所要申请的进程,申请成功之后退出到主界面。如果我们选择1,2 和 4-9 的数字则进行相应的操作,如果写入除1-9 以外的数字,程序运行将自动退出,不再运行。图 4.4 进程申请调试结果图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精
22、心整理 - - - - - - - 第 18 页,共 47 页 - - - - - - - - - 4.5 分区创建调试结果分区创建调试结果, 我们可以根据主界面显示结果,选择数字4,然后进程随机分配内存的大小,进而创建分区。如果我们选择1,2,3 和 5-9 的数字则进行相应的操作,如果写入除1-9 以外的数字,程序运行将自动退出,不再运行。图 4.5 分区创建调试结果图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 47 页 - - - - - - - - - 4.
23、6 内存分配调试结果内存分配调试结果, 我们可以根据主界面显示结果,选择数字5,然后根据程序中所输入的内存分配算法:首次适应算法,循环适应算法,最佳适应算法和最坏适应算法中选择其中一种分配算法,然后进行内存的分配。如果我们选择 1-4 和 6-9 的数字则进行相应的操作,如果写入除1-9 以外的数字,程序运行将自动退出,不再运行。图 4.6 内存分配调试结果图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 47 页 - - - - - - - - - 4.7 内存回收调
24、试结果内存回收调试结果, 我们可以根据主界面显示结果,选择数字6,然后调试结果就会显示正在执行的进程数,以及正在执行进程的大小和分配的分区号。然后程序会提示你是否结束进程,如果选择是,程序调试将会继续显示主界面,如果选择否,程序调试会直接退出。如果我们选择1-5 和 7-9 的数字则进行相应的操作,如果写入除1-9 以外的数字,程序运行将自动退出,不再运行。图 4.7 内存回收调试结果图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 21 页,共 47 页 - - - - - - -
25、 - - 4.8 打印分区调试结果打印分区调试结果, 我们可以根据主界面显示结果,选择数字7,然后程序调试就会显示分区的大小,分区的开始地址以及此分区是否空闲等信息。程序自动会进行分区的打印。如果我们选择1-6 和 8-9 的数字则进行相应的操作,如果写入除 1-9 以外的数字,程序运行将自动退出,不再运行。图 4.8 打印分区调试结果图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 22 页,共 47 页 - - - - - - - - - 4.9 低级调度调试结果低级调度调试结果
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年操作系统内存管理模拟系统的实现 2022 操作系统 内存 管理 模拟 系统 实现
限制150内