您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 基本分页存储管理的模拟实现
基本分页存储管理的模拟实现学院:专业:学生姓名:学号:指导教师:2014年3月18日课设实验基本分页存储管理的模拟实现1目录一、设计内容.....................................2二、相关操作系统的知识介绍………………………………2三、课程设计的目的及要求.........................2四、程序功能说明……………………………………………3五、算法整体思想.................................3六、主要功能模块进程图...........................3七、实验结果.....................................4八、实验总结.....................................7九、程序代码………………………………………………7课设实验基本分页存储管理的模拟实现2一、设计内容根据设计要求实现对基本分页存储管理的模拟二、相关操作系统的知识介绍连续分配方式会形成许多“碎片”,虽然可通过“紧凑”方法将许多碎片拼接成可用的大块空间,但须为之付出很大的开销。如果允许将一个进程直接分散的装入到许多不相邻接的分区中,则无需在进行“紧凑”。基于这一思想而产生了离散分配方式。如果离散分配的基本单位是页,则称为分页存储管理方式;如果离散分配的基本单位是段,则称为分段存储管理方式。在分页存储管理方式中,如果不具备页面对换功能,则称为基本的分页存储管理方式,或称为纯分页存储管理方式,它不具有支持实现虚拟存储的功能,它要求把每个作业全部装入内存后方能运行。三、课程设计的目的及要求1、课程设计的目的操作系统课程设计是计算机专业重要的教学环节,它为我们提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。进一步巩固和复习操作系统的基础知识。培养我们结构化程序、模块化程序设计的方法和能力。提高我们调试程序的技巧和软件设计的能力。提高我们分析问题、解决问题以及综合利用C语言进行程序设计的能力。2、设计要求1.选择恰当的数据结构表示页表课设实验基本分页存储管理的模拟实现32.进程名,进程所需页数,进程进行的操作(装入/退出)等操作可有键盘输入,也可从文件读出。3.每进行一次进程的装入或者退出操作,就显示出操作执行后内存中各页的分配情况。四、程序功能说明函数各模块部分功能voidCreatA()//创建内存新函数voidNewNode(LinkList&L)//建立新进程voidFreeNode(LinkList&L)//回收进程,释放内存voidPrintf(LinkListL)//显示所有进程所占物理块信息voidlook(LinkListL)//查看进程信息voidshowit()//显示内存块使用信息函数的整体功能这个程序是为了实现离散分配方式,以消减内存的外零头,提高内存的利用率,由系统把逻辑地址划分为页号和页内地址两部分。通过这个程序实现了将进程分页处理,划分物理块。五、算法整体思想先定义A[100]来记录内存物理块;max=99来记录内存物理块数;count=100来记录未使用的物理块数。首先通过CreatA()函数初始化内存而后通过NewNode(LinkList&L)建立新的进程,输入进程号,进程名,进程大小,计算出所需要的进程页数以及分配物理块。通过FreeNode(LinkList&L)来删除所选择的进程信息,释放内存。通过Printf(LinkListL)显示以上两个函数所产生的进程信息。而后通过look(LinkListL)查看进程信息。通过showit()显示内存物理块的分布情况。当输入进程号new_node-f,然后通过j=0至j3时终止,如若p-f=newnode-f当是时进程存在,重新输入,当不是时p=p-next;如若非此情况则输入进程名称和进程大小,然后通过进程页数n=size/1024,若页内地址k!=0,n=n+1显示所需页数,比较页数与物理块的大小,如果页数大于物理块数则内存物理块不足,新建进程失败;如果小于则分配内存物理块。六、主要功能模块进程图课设实验基本分页存储管理的模拟实现4YNYN七、实验结果添加进程开始输入进程号new_node-fp-f=newnode-f输入进程名称、大小p=p-next输入进程号次数j=0(j3,终止)进程页数n=size/1024,若页内地址k!=0,n=n+1显示所需页数页数n物理块数分配内存物理块内存物理块分配不足,新建进程失败课设实验基本分页存储管理的模拟实现5删除进程内存使用情况课设实验基本分页存储管理的模拟实现6查看进程课设实验基本分页存储管理的模拟实现7八、实验总结通过本次操作系统课设,本次课设为我们提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。进一步巩固和复习操作系统的基础知识。培养我们结构化程序、模块化程序设计的方法和能力。提高我们调试程序的技巧和软件设计的能力。提高我们分析问题、解决问题以及综合利用C语言进行程序设计的能力。本次课设掌握了如何创建一个进程,添加进程和删除进程。通过本次课设,我也发现我的好多不足之处,首先在源程序的录入上就遇到了很大的麻烦,由于英文录入的速度比较慢,在源程序代码的录入上就花费了很多的功夫,还有就是C语言的基本功还不够扎实,出现了很多不该出现的毛病,还好在设计过程,让我深深体会到老师在课堂上讲的内容和要注意的地方的重要性,也正是老师在课堂上提前给我们做了提醒和学习,我在设计时才没花费太多的时间去更正这些问题。在以后的学习中,我一定要注意基本功的学习。谢谢老师对我的指导与教诲,在今后的学习中一定会用心再用心,不辜负老师对学生的教诲!九、程序代码#includestdio.h#includestdlib.h#includestring.hintA[100];//内存物理块,0:未使用,非0:已使用intmax=99;//记录内存的物理块数,值为A[100]最大下标intcount=100;//记录内存未使用物理块数typedefstructLNode{intf;//进程号charname[8];//进程名intsize;//进程大小intn;//进程页数intye[100];//页表,下标表示页号,内容表示进程各页所在物理块structLNode*next;}LNode,*LinkList;//内存初始化voidCreatA(){inti=0;for(i=0;i=max;i++)A[i]=0;}//建立新进程voidNewNode(LinkList&L){inti,j;intm,k;LinkListp;LinkListnew_node;new_node=(LinkList)malloc(sizeof(LNode));课设实验基本分页存储管理的模拟实现8p=L;printf(输入进程号:);scanf(%d,&new_node-f);j=0;while(p!=NULL&&j3)//查找进程号是否重复{if(p-f!=new_node-f)p=p-next;else{printf(\n该进程已存在,重新输入:);scanf(%d,&new_node-f);p=L;//p重新指向头结点j++;}}if(j3){printf(输入进程名称:);scanf(%s,new_node-name);printf(输入进程的大小:);scanf(%d,&new_node-size);new_node-n=new_node-size/1024;k=new_node-size%1024;if(k!=0)new_node-n=new_node-n+1;printf(所需要的页数为:);printf(%d\n,new_node-n);if(new_node-ncount){printf(\n内存物理块不足,新建进程失败!!!\n\n);}else{count-=new_node-n;m=0;for(i=0;i=max;i++)if(A[i]==0&&mnew_node-n){A[i]=new_node-f;new_node-ye[m]=i;m++;}if(L==NULL)L=new_node;课设实验基本分页存储管理的模拟实现9else{p=L;//查找最后一个节点while(p-next!=NULL){p=p-next;}p-next=new_node;}new_node-next=NULL;}}else{printf(\n错误次数过多,返回主菜单:);}}//回收进程,释放内存voidFreeNode(LinkList&L){LinkListp,q;intz;printf(请输入要删除的进程号:);scanf(%d,&z);p=L;//查找进程;用p记录q=p;while(p!=NULL){if(p-f==z){printf(该进程已删除);break;}else{q=p;p=p-next;}}if(p==NULL){printf(\n该进程不存在!!!\n);}else{for(inti=0;ip-n;i++)课设实验基本分页存储管理的模拟实现10A[p-ye[i]]=0;count+=p-n;if(p-f==q-f)//要删除的是头结点{L=p-next;}else{q-next=p-next;}}}//显示所有进程占用的物理块voidPrintf(LinkListL){inti=0;printf(\n内存物理块分配情况:\n);LinkListp=L;printf(该进程信息:\n);printf(进程号\t\t进程名称\t进程页数\t所用物理块\n);while(p!=NULL){printf(%d\t\t,p-f);printf(%s\t\t,p-name);printf(%d\t\t,p-n);inti;for(i=0;ip-n;i++)printf(%d,,p-ye[i]);printf(\n);p=p-next;}}//查看进程voidlook(LinkListL){intz;printf(输入要查询的进程号);scanf(%d,&z);LinkListp=L;while(p!=NULL){if(p-f==z){printf(进程号\t\t进程名称\t进程页数\t所用物理块\n);printf(%d\t\t,p-f);printf(%s\t\t,p-name);课设实验基本分页存储管理的模拟实现11printf(%d\t\t,p-n);inti;for(i=0;ip-n;i++)printf(%d,,p-ye[i]);printf(\n);break;}elsep=p-next;}if(p==NULL)printf(要查询的进程不存在\n);}//显示内存块使用情况,不分进程voidshowit(){inti=0;printf(内存物理块分配情况\n);for(i=0;i=max;i++){printf(%d\t,A[i]);if(i%10==9)printf(\n);}}voidmain(){CreatA();LinkListL=NULL;inti=0;do{printf(\t\t基本分页存储管理算法\n);printf(\t\t******************************\n);printf(\t\t*1.添加进程2.删除进程*\n);printf(\t\t*3.内存使用情况4.查看进程*\n);printf(\t\t******************************\n);printf(请选择(select):);scanf(%d,&i);switch(i){case1:NewNode(L);Printf(L);break;case2:
本文标题:基本分页存储管理的模拟实现
链接地址:https://www.777doc.com/doc-1740049 .html