2022年C++模拟操作系统实验内存管理 .pdf
-
资源ID:39702129
资源大小:243.51KB
全文页数:10页
- 资源格式: PDF
下载积分:4.3金币
快捷下载
![游客一键下载](/images/hot.gif)
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
2022年C++模拟操作系统实验内存管理 .pdf
模拟操作系统内存管理实验实验名称:模拟操作系统内存管理。班级:软件 1101班姓名:谭小兵一、实验目的:通过实验了解操作系统内存管理最先适应法的主要技术,帮助了解在不同的存储管理方式下,应怎样实现主存空间的分配和回收。二、实验内容:设计一个按照最先适应法实现操作系统内存管理的程序,模拟主存储器空间的分配和回收。三、基本设计:采用最先适应法模拟主存中内存的分配和回收。数据结构分析:采用双向链表表示内存存储,每个节点包含的主要信息为:进程名、进程大小、存储起始地址、结束地址。头节点是操作系统本身占用的内存,依次往下是表示进程占用的内存,最后一个节点表示的进程的结束存储地址不能比主存空间大。每次加入内存即是从链表表头开始往下搜索合适位置插入表示进程的节点。每次进程结束删除相应节点即可。由此便完成了整个模拟内存管理。基本流程:名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 10 页 -源代码:#include#include#include using namespace std;#define MAX 1048576/定义数据结构/进程所占内存class process public:string name;long int size;long int start;long int end;/bool state;process*next;process*befor;/链表表头,存储进程数class Head public:long int count;process*next;名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 10 页 -/定义挂起队列class Out public:long int count;process*next;/从内存空间由上往下搜索合适的空间并装入内存long int add_pro(Head*head,process*p)/返回 1,表示插入成功;返回0 表示插入失败 process*p1=head-next;/搜索插入位置if(0=p1)/内存为空 head-next=p;p-start=10*1024;p-end=p-size+10240;p-befor=0;p-next=0;return 1;else/如果内存中有进程 long int temp=p1-start-10240;if(p-size next=head-next;head-next-befor=p;p-befor=0;head-next=p;p-start=10240;p-end=p-size+10240;return 1;else/在两个进程间寻找合适位置while(p1-next!=0)/当 p1 不是指向最后一个进程 temp=p1-next-start-p1-end;/以下有重复代码,可优化if(p-size next=p1-next;p1-next-befor=p;名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 10 页 -p1-next=p;p-befor=p1;p-start=p1-end;p-end=p-start+p-size;return 1;p1=p1-next;/都没找到可插入的位置if(p1-end+p-size)next=0;p-befor=p1;p1-next=p;p-start=p1-end;p-end=p-start+p-size;return 1;else return 0;/返回 0,表示插入失败 /add 进程void in_pro(Head*head)process*p=new process;/生成进程coutp-name;cout请输入进程大小:n;long int kb,bb;coutkb;coutbb;p-size=1024*kb+bb;p-next=0;p-befor=0;kb=add_pro(head,p);if(kb=0)cout 进程添加失败!n;else cout进程添加成功!n;system(pause);system(cls);名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 10 页 -return;/kill 进程void kill(Head*head)coutnam;process*p=head-next;while(p)if(p-name=nam)break;p=p-next;if(0=p)cout 未找到进程:nam!next=p)/p 是第一个节点 head-next=p-next;if(0!=p-next)p-next-befor=0;else if(p-next=0)/p 是最后一个节点 p-befor-next=0;p-befor=0;else/中间节点 p-next-befor=p-befor;p-befor-next=p-next;delete p;cout成功删除进程:nam!endl;system(pause);名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 10 页 -system(cls);/挂起进程void out_pro(Head*head,Out*out)coutnam;process*p=head-next;/指向移动源head 链表process*p1=out-next;/指向移动目的out 链表while(p!=0)/搜索要挂起的进程 if(p-name=nam)break;p=p-next;if(0=p)/无相关进程 cout 找不到进程:nam!next=p)/要挂起的进程在第一个 head-next=p-next;if(0!=p-next)/有至少两个链表p-next-befor=0;else if(p-next=0)/要挂起的进程在最后一个 p-befor-next=0;p-befor=0;else/要挂起的进程在中间 p-befor-next=p-next;p-next-befor=p-befor;/done/处理挂起序列,p 指向要插入挂起队列的节点,p1 指向挂起队列第一个节点if(0=p1)/挂起链表为空 名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 10 页 -out-next=p;p-befor=0;else while(0!=p1-next)/p1 指向挂起进程链表的末尾p1=p1-next;p1-next=p;p-befor=p1;p-next=0;/done system(cls);/解挂进程void rein_pro(Head*head,Out*out)coutnam;/process*p1=head-next;/指向移动源链表process*p=out-next;/指向移动源out 链表while(0!=p)if(p-name=nam)break;p=p-next;if(0=p)/无相关进程 cout 找不到进程:nam!next=p)/要删除的进程在第一个 out-next=p-next;if(0!=p-next)/如果 p 后面还有节点p-next-befor=0;else if(p-next=0)/要删除的进程在最后一个 名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 10 页 -p-befor-next=0;else/要挂起的进程在中间 p-befor-next=p-next;p-next-befor=p-befor;/done add_pro(head,p);cout 成功解挂进程:namnext=0;head-count=0;Out*out=new Out;/定义挂起进程头节点out-next=0;long int temp=0;process*p=head-next;process*p1=out-next;while(1)cout 操作系统内存管理模拟实验!内存大小1Mnendl;cout 内存进程存储状态:endl;coutt 操作系统占用:10KBnext;while(0!=p)coutt进程名:namet大小:size)/1024Ksize)%1024Bt起始地址:start结束地址:endnext;p=head-next;cout 内存剩余空间段:n;if(0=p)/无进程名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 10 页 -couttstart-10240)!=0)couttstart-10240)next)/仅有一个进程时couttend)next!=0 temp=p-next-start-p-end;if(temp)coutttempnext;if(0=p-next)/p 指向最后一个节点时 couttend)endl;break;coutn 挂起队列:next;while(p1)coutt进程名:namet大小:size)/1024Ksize)%1024Bnext;coutn1、加入进程 n2、挂起 n3、解挂 n4、kill 进程 n5、退出 endl;coutchose;switch(chose)case 1:in_pro(head);break;case 2:out_pro(head,out);break;case 3:rein_pro(head,out);break;case 4:kill(head);break;case 5:return 0;名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 10 页 -实验结果截图:名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 10 页 -