操作系统内存管理模拟系统的实现.docx
《操作系统内存管理模拟系统的实现.docx》由会员分享,可在线阅读,更多相关《操作系统内存管理模拟系统的实现.docx(11页珍藏版)》请在冰点文库上搜索。
操作系统内存管理模拟系统的实现
JennywascompiledinJanuary2021
操作系统内存管理模拟系统的实现
摘要
操作系统的内存管理是指系统软件对其他应用程序使用内存时所作的管理,是一种统筹关系。
本设计采用活动分区方案,但不采用紧凑算法。
假设系统内存容量为100KB。
能处理内存回收的时候上下邻合并的问题;对随机出现的进程i申请jKB内存,程序能判断是否能分配;释放随机的首地址为Handle的内存块;同时输出内存使用情况和空闲情况。
关键字:
内存资源;分配;存储管理;回收
摘要
操作系统的内存管理是指系统软件对其他应用程序使用内存时所作的管理,是一种统筹关系。
本设计采用活动分区方案,但不采用紧凑算法。
假设系统内存容量为100KB。
能处理内存回收的时候上下邻合并的问题;对随机出现的进程i申请jKB内存,程序能判断是否能分配;释放随机的首地址为Handle的内存块;同时输出内存使用情况和空闲情况。
关键字:
内存资源;分配;存储管理;回收
1概述
设计任务
应用内存管理实现内存管理的分配和回收。
能处理内存回收的时候上下邻合并的问题以及输出内存使用情况和空闲情况。
采用活动分区方案,但不采用紧凑算法。
假设系统内存容量为100KB。
要能处理内存回收的时候上下邻合并的问题;对随机出现的进程i申请jKB内存,程序能判断是否能分配;释放随机的首地址为Handle的内存块;要求输出内存使用情况和空闲情况。
根据给定的动态分区分配算法流程图,用熟悉的计算机编程语言编写一程序,该程序实现内存的合理分配后回收。
设计思想
通过本次课程设计,学习如何进行内存的分区管理,强化了对首次适应分配算法和分区回收算法的理解。
此课设需要随机产生进程或者由用户输入进程相应信息,实现动态内存管理:
设计主界面以灵活选择某算法。
主要实现的算法有:
首次适应算法、最佳适应算法、最坏适应算法和循环适应算法。
实现的主要功能有:
创建进程,查看进程信息,进程申请,分区创建,内存分配,内存回收,打印分区,低级调度等。
分析设计要求,根据老师给出的要求,我们需创建进程和分区,然后申请进程,然后再进行内存的分配与回收。
基础知识
内存是现代计算机系统运转的核心.内存由一大片连续的字或字节组成,每个字或字节都有自己的地址,CPU根据程序计数器的值从内存中取出指令,而取出的指令可能引发额外的操作,例如读取或存储特定的内存地址.举个例子,一个典型的指令执行周期如下:
首先从内存中读取一条指令,然后解码这条指令,解码时可能会从内存中读取这条指令(例如间接地址运算)的操作数(operand),当这条指令完成对操作数的运算后,运算结果可能被存储到内存中.
2各模块伪码算法
图总体结构流程图
图为总体结构流程图
主程序
主函数既是程序的入口,又是程序的出口,通常我们还可以指定一个exitcode再退出,以表明程序最后的结果是什么样的。
由于主函数肩负着入口和出口的重任,所以最好不要把太多的细节方面的逻辑直接放在主函数内,这样不利于维护和扩展。
主函数应该尽量简洁,具体的实现细节应该封装到被调用的子函数里面去。
此主函数中包括很多功能模块,其中各功能模块用菜单方式选择,为我们提供了九个功能选项。
如图所示
图主程序流程图
创建进程模块
进程的创建也就有两种方式:
一是由操作系统创建,二是由父进程创建。
在系统启动时,操作系统会创建一些进程,他们承担着管理和分配系统资源的任务,这些进程通常被称为系统进程。
系统允许一个进程创建新进程,新进程即为子进程,子进程还可以创建新的子进程,形成进程树结构。
此创建进程模块可以输入自己想创建的进程数进而实现进程创建。
如图所示
图创建进程流程图
cout<<"输入进程数目:
";cin>>ProcessNum;
tapplyIndex=newin[ProcessNum];初始化进程申请队列
assignPointer=newint[ProcessNum];..."<returnERROR;
}
do{
cout<<"**********内存分配**********"<cout<cout<cout<cout<cout<<"**************************"<cout<<"请选择:
";
cin>>n;
}while(n<1||n>4);
intcount=0;.."<cout<<"进程大小为"<processSize<<"分配的分区号"<<(pro+index)->subareaIndex<do{
cout<<"是否结束进程Y/N请输入(y/n)";
cin>>n;
cout<}while(n!
='y'&n!
='Y'&n!
='n'&n!
='N');
if(n=='y'||n=='Y'){
findSubarea(head,(pro+index)->subareaIndex);
if(subareaNode[2]!
=NULL){
if(subareaNode[0]->status==1&&subareaNode[2]->status==1){
subareaNode[0]->status=0;
}else{
amendNodedata(subareaNode[0],subareaNode[2]);
}
}elseif(subareaNode[0]==NULL){
if(subareaNode[0]->status==0){
subareaNode[0]->+=subareaNode[1]->;
subareaNode[0]->next=subareaNode[2];
}else{
subareaNode[0]->status=0;
}
}
returnSUCCESS;
}else{
cout<<"您没结束进程,进程不释放,分区不回收"<returnERROR;
}
}
intlowAttemper(int*excursionPointer){
cout<<"-------------低级调度--------------"<if(*excursionPointer<0)
{
cout<<"没有已分配好资源的进程";
returnERROR;
}
else{
intn;
displayProcess();
do{
cout<<"请选择一个就绪进程进入CPU";
cin>>n;
cout<}while(n<1||n>ProcessNum||(pro+n-1)->status!
=2);
(pro+n-1)->status=1;.."<cout<!
!
!
!
"<returnSUCCESS;
}
}
intmenu(){
intn;
do{
cout<<"*********************计算机内存管理****************"<cout<cout<cout<cout<cout<cout<cout<cout<cout<cout<<"***************************************************"<cout<<"请选择:
";
cin>>n;
}while(n<1||n>9);
returnn;
}
intcreatProcess(){
cout<<"-------------创建进程--------------"<cout<<"输入进程数目:
";
cin>>ProcessNum;
applyIndex=newint[ProcessNum];...."<returnSUCCESS;
}
Process*randomCreatPro(intn){
Process*process=newProcess[n];
srand((unsigned)time(NULL));rocessSize=1+rand()%128;tatus=0;ubareaIndex=-1;算机操作系统[M].西安电子科技大学学出版社.2014
[2]王万森.计算机操作系统原理[M].高等教育出版社2001
[3]周长林,左万历.计算机[M].高等教育出版社1994
[4]黄廷辉,王宇英.[M].清华大学出版社2007
[5]殷兆麟.计算机操作系统[M].清华大学出版社2007
[6]张尧学,史美林,张高.计算机操作系统教程[M].清华大学出版社1993
[7]凤羽.操作系统[M].电子工业出版社2004
[8]马季兰、冯秀芳等.操作系统原理与Linux[M].人民邮电出版社2000
[9]孟静.操作系统原理教程[M].清华大学出版社2000
[10]周苏、金海溶.操作系统原理实验[M].科学出版社2000
[11]孟庆昌.操作系统教程[M].电子工业出版社2004
致谢
首先我要感谢贾老师在课程设计上给予我的指导、提供给我的支持和帮助,这是我能顺利完成这次报告的主要原因,更重要的是贾老师帮我解决了许多技术上的难题,让我能把系统做得更加完善。
在此期间,我不仅学到了许多新的知识,而且也开阔了视野,提高了自己的设计能力。
其次,我要感谢帮助过我的同学,他们也为我解决了不少我不太明白的设计商的难题。
同时也感谢学院为我提供良好的做毕业设计的环境。
最后再一次感谢所有在设计中曾经帮助过我的良师益友和同学