- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
模拟操作系统内存管理实验实验名称:模拟操作系统内存管理。班级:软件1101班姓名:谭小兵一、实验目的:通过实验了解操作系统内存管理最先适应法的主要技术,帮助了解在不同的存储管理方式下,应怎样实现主存空间的分配和回收。 二、实验内容:设计一个按照最先适应法实现操作系统内存管理的程序,模拟主存储器空间的分配和回收。三、基本设计:采用最先适应法模拟主存中内存的分配和回收。数据结构分析:采用双向链表表示内存存储,每个节点包含的主要信息为:进程名、进程大小、存储起始地址、结束地址。头节点是操作系统本身占用的内存,依次往下是表示进程占用的内存,最后一个节点表示的进程的结束存储地址不能比主存空间大。每次加入内存即是从链表表头开始往下搜索合适位置插入表示进程的节点。每次进程结束删除相应节点即可。由此便完成了整个模拟内存管理。基本流程:源代码:#includeiostream#includestring#include process.husing 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;};//定义挂起队列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 = temp)//如果第一个进程前面有足够空间,cut in before p1{p-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 = temp)//搜索到了合适位置,cut in after p1{p-next= p1-next;p1-next-befor = p;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) = MAX)//内存足够大,允许进程插入到内存末尾,此时p1指向最后一个节点{p-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;//生成进程cout请输入进程名:;cinp-name;cout请输入进程大小:\n;long int kb,bb;cout多少KB?;cinkb;cout多少B?;cinbb;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); return;}//kill进程void kill(Head *head){cout请输入要kill的进程名:;string nam;cinnam;process *p = head-next;while(p){if(p-name == nam)break;p = p
文档评论(0)