欢迎来到天天文库
浏览记录
ID:50436861
大小:43.50 KB
页数:12页
时间:2020-03-09
《页式存储中的内存分配和管理.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、题目二:模拟页式存储管理中内存的分配和管理一.设计思想说明模拟页式存储管理,首先假定内存被分为2048块(块和页大小一致),利用位式图中该位的状态表示状况,判断它内存的块是否被占用,0表示内存块为空闲状态,新作业可申请该块;1表示内存被占用,新的作业不能占用该块。该位示图使用32字长的字表示,故需要64个这样的字。位示图存放在文件中,每行表示32字长的字,共64行。块和页的大小为512字节。程序中使用结构体node来存放作业的相关信息(加入内存的进程名,新作业的申请内存的大小(单位为字节),分配的块数,分配块在内存中的位置,最后块的碎片的大小(单
2、位为字节));使用sum来记录当前的空闲的内存块数。该程序在显示完内存的分配之后,使用switch—case来为用户提供可供是实现的功能。用户选择不同的功能之后,程序会自动进入到不同的实现模块中,用户再依次根据程序的提示进行操作。模拟页式存储中内存的分配和管理这个程序划分为了以下几个模块:显示当前的内存分配的位示图,添加新的作业,完成作业(将原来分配给用户的内存空间回收),显示作业的内存分配的页表等功能。在添加新的作业的这个功能中,当用户申请的作业的存放空间大于当前内存拥有的最大的内存空间,则该程序不给予分配。在完成作业的功能中,程序将原来分配给
3、作业的内存空间按照存放在结构体中的内存空间的链表回收。显示位示图的功能就是将现在的位示图显示到屏幕上。显示作业的相关信息就是将存放该作业的节点中包括的所有内容显示出来。二.相关数据结构的说明用来保存用户作业的相关信息的结构体的定义:typedefstructnode{charjobname[20];//申请内存空间的进程名intnum;//申请空间的大小(字节数)intblock;//分配的块数intnums[PAGES];//保存分配的块号intslice;//保存碎片大小structnode*next;}jobs;用来存放用户作业链表的头节点
4、的结构体指针:jobs*head;用来存放当前的内存中剩余的空间数:intsum;一.各个模块的算法流程1.从文件中读取位示图的模块:readdata()开始进入到inf.txt,strings,intiagetline(in,s)!=NULLGetline(in,s)!=NULListringstreamsin(s)b.push_back(ia)a.push_back(b)是结束否是否1.用户选择功能模块:choose()开始输入需要操作功能的代表数字添加作业模块完成作业模块显示作业信息模块显示位示图模块退出系统其他数字124301.添加作业模
5、块:add()开始输入要添加的作业的进程名输入该作业需要的内存空间大小numnum%PAGESIZE==0是block=num/PAGESIZE否Block=num/PAGESIZE+1block<=sum是为这个作业申请一个节点,将作业的进程名,申请的字节数,占用的内存空的块数,这些块在内存中的位置,以及碎片的大小sum=sum-block将这个节点插在链表的最后一个位置上否进入到choose()模块中结束1.完成作业模块:finish()开始输入要回收的作业的进程名p=head,q=p->nextp->next!=NULL否strcmp(q-
6、>jobname,name)==0是回收为作业分配的内存空间,即将原来分配的空间的对应的位示图的标志由1改为0,将原来的链表链接好sum=sum+q->block删除这个节点否结束p=p->next1.显示位示图的模块:tableview()开始i=0inextp!=NULL输出该节点指向作业名,存放空间等相关信息是结束否一.程序清单五.简单的使用说明1.作业的进程名作为唯一识别进程
7、的主码。
此文档下载收益归作者所有