欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    完整word版操作系统课程设计模拟设计页式存储管理的分配与回收范文word文档良心出品.docx

    • 资源ID:15155623       资源大小:304.73KB        全文页数:28页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    完整word版操作系统课程设计模拟设计页式存储管理的分配与回收范文word文档良心出品.docx

    1、完整word版操作系统课程设计模拟设计页式存储管理的分配与回收范文word文档良心出品学 号: 28课 程 设 计题 目模拟设计页式存储管理的分配与回收学 院计算机科学与技术专 业计算机科学与技术班 级XX姓 名XX指导教师XXX2011年01月09日课程设计任务书学生姓名: XX 专业班级: 计算机0902班 指导教师: XXX 工作单位:计算机科学与技术学院 题 目: 模拟设计页式存储管理的分配与回收初始条件:1预备内容:阅读操作系统的内存管理章节内容,了解有关虚拟存储器、页式存储管理等概念,并体会页式管理内存的分配和回收过程。2实践准备:掌握一种计算机高级语言的使用。要求完成的主要任务:

    2、 (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1采用页式管理方案实施内存分配和回收。能够处理以下的情形 能够输入给定的内存页面数,页面大小,进程的个数及每个进程的页数。 要求当某进程提出申请空间的大小后,显示能否满足申请,以及为该进程分配资源后内存空间的使用情况(被进程占用的页面,空闲的页面)。2设计报告内容应说明: 课程设计目的与功能; 需求分析,数据结构或模块说明(功能与框图); 源程序的主要部分; 测试用例,运行结果与运行情况分析; 自我评价与总结:)你认为你完成的设计哪些地方做得比较好或比较出色;)什么地方做得不太好,以后如何改正;)从本设计得到的收获(在编写,调试,执

    3、行过程中的经验和教训);)完成本题是否有其他的其他方法(如果有,简要说明该方法);)对实验题的评价和改进意见,请你推荐设计题目。时间安排:设计安排一周:周1、周2:完成程序分析及设计。周2、周3:完成程序调试及测试。周4、周5:验收,撰写课程设计报告。(注意事项:严禁抄袭,一旦发现,抄与被抄的一律按0分记) 指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日模拟设计页式存储管理的分配与回收1需求分析页式管理是一种内存空间存储管理的技术,页式管理分为静态页式管理和动态页式管理。基本原理是将各进程的虚拟空间划分成若干个长度相等的页(page),页式管理把内存空间按页的大小划分成片或者

    4、页面(page frame),然后把页式虚拟地址与内存地址建立一一对应页表,并用相应的硬件地址变换机构,来解决离散地址变换问题。页式管理采用请求调页或预调页技术实现了内外存存储器的统一管理。 图1 页的划分图2 基本页表示例静态分页管理的第一步是为要求内存的作业或进程分配足够的页面。系统通过存储页面表、请求表以及页表来完成内存的分配工作。页表指的是内存中的一块固定存储区。页式管理时每个进程至少有一个页表。请求表指的是用来确定作业或进程的虚拟空间的各页在内存中的实际对应位置;另外整个系统有一个存储页面表,其描述了物理内存空间的分配使用状况。图3 请求表的示例存储页面表有两种构成方法:1、位示图法

    5、2、空闲页面链表法模拟设计页式存储管理的分配与回收要求能够满足如下的要求:(1) 输入给定的内存页面数,页面大小,进程的个数及每个进程的页数。(2) 要求当某进程提出申请空间的大小后,显示能否满足申请,以及为该进程分配资源后内存空间的使用情况(被进程占用的页面,空闲的页面)。2 功能设计2.1 算法分析首先,请求表给出进程或作业要求的页面数。然后,由存储页面表检查是否有足够的空闲页面,如果没有,则本次无法分配。如果有则首先分配设置页表,并请求表中的相应表项后,按一定的查找算法搜索出所要求的空闲页面,并将对应的页好填入页表中。 图4 分配页面的算法流程2.2 数据结构页式管理把内存空间按页的大小

    6、划分成片或者页面,再按照一定的规律建立起页表,并通过请求表将分配内容显示出来.将页表和请求表的内容使用结构体来定义是比较方便的. /页表项结构 typedef struct _pagetableitem pageid pagenum; /页号 blockid blocknum; /块号pgtabitem; /页表typedef pgtabitem * pagetable; /请求表结构typedef struct _reqtable unsigned pid; /进程号 unsigned reqpagenum; /请求页面数 pagetable pgtabadr; /页表始址 bool sta

    7、te; /状态 reqtabitem; 请求表还引入了支持快速插入和删除的list顺序容器来进行相关操作.list reqtable因为模拟设计的关系,页面的起始地址均应该为随机的数值,所以程序在设计过程中加入了随机数类的编写.class RandomNumberprivate: unsigned long randseed;public: RandomNumber(unsigned long s=0); unsigned short Random(unsigned long n); double fRandom(void);采用当前系统的时间值来生成伪随机数分配地址.定义随机数产生器:Ran

    8、domNumber random 定义内存页面数:int pagenum 定义页面大小:int pagesize定义进程个数:int pnum用整数数组模拟分配的内存页面数int * mempage=new intpagenum2.3模块说明2.3.1 主函数主函数依次运行了程序中所实现的关键函数. int main() InitSys(); /初始化系统 MainChoice();/输出系统菜单 Destroy(); /释放申请的动态内存 return 0;2.3.2 各个功能函数 初始化内存页面: void Init_Mempage(void)获取内存使用情况: int Get_Mempa

    9、genum(void)初始化默认的请求表: void Init_Reqtable(void)为默认的进程分配内存: void Init_DistMem(void)手动创建进程,并分配内存: void Dist_Mem(void)释放申请的动态内存: void Destroy(void)结束指定进程: void Kill(void) 2.3.3 打印函数 打印出进程请求表: void PrintReqtable(void) 打印出页表: void PrintPageTable(void) 打印出内存使用情况: void PrintMem(void) 打印出物理块的大小: void PrintBl

    10、ockSize(void)2.3.4 其他函数 初始化系统: void InitSys(void)输出主菜单: void MainMenu(void) 选择运行分支:void MainChoice() 3开发平台3.1开发平台(1) 使用系统:Windows 7(2) 使用语言:C+(3) 开发工具:Visual C+ 20084测试用例,运行结果与运行情况分析4.1测试方法 通过输入正常数据以及非正常数据对程序进行全方位测试4.2测试结果(1)程序主界面(2)输入进程号和页面数:(3)显示进程页表:(4)显示请求表(5)显示内存使用情况以及物理块大小(6)错误检验5源程序的主要部分#incl

    11、ude #include #include #include #include page.h#include Random.husing namespace std;list reqtable;RandomNumber random; /随机数产生器unsigned pagenum=random.Random(80)+21; /内存页面数21-100unsigned pagesize=random.Random(16)+5; /页面大小 5-20 unsigned pnum=random.Random(4)+5;/进程的个数5-8int * mempage=new intpagenum; /用

    12、整数数组模拟内存页面数/*初始化内存页面*/void Init_Mempage(void) int i=0; for(i=0;iint(pagenum);i+) mempagei=0; /数组全部赋初值/*获取内存的使用情况*/ int Get_Mempagenum(void) int sum=0; for(int i=0;iint(pagenum);i+) if(mempagei=0) sum+; return sum; /判断有多少内存页面已经被使用/*初始化默认的请求表*/void Init_Reqtable(void) int i; for(i=1;i=int(pnum);i+) re

    13、qtabitem preq; preq.pid=i; preq.reqpagenum=random.Random(4)+2;/进程请求的页面大小-5 preq.state=false; preq.pgtabadr=NULL; reqtable.push_back(preq); /依次压入容器 /*为默认的进程分配内存*/void Init_DistMem(void) int reqpnum; /进程请求页面数 int i; list:iterator pos=reqtable.begin(); for(;pos!=reqtable.end();pos+) reqpnum=(*pos).reqp

    14、agenum; if(reqpnumint(Get_Mempagenum() /判断请求的内存页面数目是否大于剩余的 cout没有足够的内存!endl; coutendl; else (*pos).state=true; pagetable temp = new pgtabitemreqpnum; /新建临时页表项数组 if(temp=NULL) cout内存分配失败!endl; exit(0); (*pos).pgtabadr=temp; for(i=0;ireqpnum;i+) tempi.pagenum=i; /页表的页号 int randnum=random.Random(pagenu

    15、m)+1;/随机产生一个块号 while(mempagerandnum=1) randnum=random.Random(pagenum)+1; tempi.blocknum=randnum;/页表的块号 mempagerandnum=1; /*手动创建进程,并分配内存*/void Dist_Mem(void) int i; reqtabitem preq; /新创建进程记录 int pid; /进程号 int reqpnum; /请求页面数 bool flag=false; do coutpid; for(list:iterator pos=reqtable.begin();pos!=req

    16、table.end();pos+) if(*pos).pid=pid) flag=true; cout该进程号已经存在,请重新输入endl; coutendl; break; while(flag=true); /循环直到输入的Pid满足条件 preq.pid=pid; coutreqpnum; preq.reqpagenum=reqpnum; preq.state=false; preq.pgtabadr=NULL; reqpnum=preq.reqpagenum; if(reqpnumGet_Mempagenum() cout没有足够的内存,进程创建失败!endl; coutendl; e

    17、lse preq.state=true; pagetable temp = new pgtabitemreqpnum; if(temp=NULL) cout内存分配失败!endl; exit(0); preq.pgtabadr=temp; for(i=0;iint(reqpnum);i+) tempi.pagenum=i; /页表的页号 int randnum=random.Random(pagenum)+1;/随机产生一个块号 while(mempagerandnum=1) randnum=random.Random(pagenum)+1; tempi.blocknum=randnum;/页

    18、表的块号 mempagerandnum=1; reqtable.push_back(preq); /将该进程的记录加入请求表/*程序结束时,释放申请的动态内存*/void Destroy(void) list:iterator pos=reqtable.begin(); for(pos=reqtable.begin();pos!=reqtable.end();pos+) if(*pos).state=true) delete (*pos).pgtabadr; reqtable.clear();/* 打印出进程请求表*/void PrintReqtable(void) coutendl; cou

    19、t|-|endl; cout| 进程请求表 |endl; cout|-|endl; cout|setw(8)进程号 setw(16)请求页面数 setw(16)页表起始地址 setw(16)页表长度 setw(16)状态 |endl; cout|-|endl; list:iterator pos=reqtable.begin(); for(pos=reqtable.begin();pos!=reqtable.end();pos+) cout|setw(8)(*pos).pid setw(16)(*pos).reqpagenum setw(16)(*pos).pgtabadr setw(16)(

    20、*pos).reqpagenum) * pagesize; if(*pos).state) coutsetw(4)已分配 |endl; else coutsetw(4)未分配 |endl; if(*pos).pid!=reqtable.back().pid) cout|-|endl; else cout|-|endl; /*打印页表*/void PrintPageTable(void) unsigned pid; int i; bool flag=false; coutpid; list:iterator pos=reqtable.begin(); for(pos=reqtable.begin

    21、();pos!=reqtable.end();pos+) if(*pos).pid=pid&(*pos).state=true) flag=true; cout|-|endl; cout| 此进程的页表 |endl; cout|-|endl; cout|setw(16)页号 setw(6)块号 |endl; cout|-|endl; int reqpagenum=(*pos).reqpagenum; for(i=0;ireqpagenum;i+) cout|setw(16)(*pos).pgtabadri.pagenum setw(6)(*pos).pgtabadri.blocknum |en

    22、dl; if(i!=reqpagenum-1) cout|-|endl; else cout|-|endl; if(flag=false) cout系统中不存在该进程或者该进程还没有被分配内存!n; coutendl;void PrintMem(void) cout内存总块数为pagenum,已经使用了pagenum-Get_Mempagenum()块!endl; cout现在还有Get_Mempagenum()块内存区域空闲!endl; coutendl;void PrintBlockSize(void) cout物理块大小为:pagesizeKBendl; coutendl;/*结束指定进

    23、程*/void Kill(void) bool flag; int i; reqtabitem temp; list:iterator pos=reqtable.begin(); int pid; do coutpid; for(pos=reqtable.begin();pos!=reqtable.end();pos+) if(*pos).pid=pid) flag=true; temp=*pos; break; if(flag=false) cout系统中不存在该进程!endl; coutendl; while(flag=false); for(i=0;iint(temp.reqpagenu

    24、m);i+) mempagetemp.pgtabadri.blocknum=0; reqtable.remove(temp); /重新为没有分配到内存的进程分配内存 for(pos=reqtable.begin();pos!=reqtable.end();pos+) if(*pos).state=false) int reqpnum; reqpnum=(*pos).reqpagenum; if(reqpnum=Get_Mempagenum() (*pos).state=true; pagetable temp = new pgtabitemreqpnum; if(temp=NULL) cout内存分配失败!endl; coutendl; exit(0); (*pos).pgtabadr=temp; for(i=0;iint(reqpnum);i+) tempi.pagenum=i; /页表的页号 int randnum=random.Random(pagenum)+1;/随机产生一个块号 while(mempagerandnum=1) randnum=random.Random(pagenum)+1; tempi.blocknum=randnum;/页


    注意事项

    本文(完整word版操作系统课程设计模拟设计页式存储管理的分配与回收范文word文档良心出品.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开