基本分页存储管理的模拟实现学院专业学号学生姓名指导教师姓名2014年03月18日淮北师范大学操作系统课程设计目录一、设计目的与内容二、各个功能模块三、主要功能模块流程图四、系统测试五、结论六、源程序及系统文件使用说明一、设计目的与内容淮北师范大学操作系统课程设计设计的目的:操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。1.进一步巩固和复习操作系统的基础知识。2.培养学生结构化程序、模块化程序设计的方法和能力。3.提高学生调试程序的技巧和软件设计的能力。4.提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。设计内容:根据设计要求实现对基本分页存储管理的模拟设计要求:1.选择恰当的数据结构表示页表2.进程名,进程所需页数,进程进行的操作(装入/退出)等操作可有键盘输入,也可从文件读出。3.每进行一次进程的装入或者退出操作,就显示出操作执行后内存中各页的分配情况。所采用的数据结构:typedefstructLNode{intf;//进程号charname[8];//进程名intsize;//进程大小intn;//进程页数intye[100];//页表,下标表示页号,内容表示进程各页所在物理块structLNode*next;}LNode,*LinkList;二、各个功能模块淮北师范大学操作系统课程设计三、主要功能模块流程图四、系统测试开始输入进程名判断是否存在是删除该进程结束否该进程不存在基本分页存储管理的模拟实现添加进程回收进程内存使用情况退出程序淮北师范大学操作系统课程设计主界面:(显示程序的各个功能块)1、选择1,运行界面如下:(选择1,输入进程名,显示内存物理块分配情况)2、选择2,运行界面如下:淮北师范大学操作系统课程设计(显示2回收进程,若进程名输入错误,则显示进程不存在,)3、选择3,运行界面如下:(显示进程r的内存使用情况,0表示未用)淮北师范大学操作系统课程设计五、结论在这次课程设计中,我清楚的认识理论到到实践的重要性,经过实际的动手操作不仅提高了我的动手能力还提高了我把理论转化成实践的能力。实验中对页表的定义如下(采用数组形式,数组下标表示页号,数组单元存放与数组下标(页号)相应的页面号):如ye[100]六、源程序及系统文件使用说明#includestdio.h#includestdlib.h#includestring.h#includeconio.h#includectime//#includestring//#definey0;charA[100];//内存物理块,0:未使用,intmax=99;//记录内存的物理块数,值为A[100]最大下标intcount=100;//记录内存未使用物理块数typedefstructLNode{charname;//进程名intn;//进程页数intye[100];/*进程各页所在物理块,页表实验中对页表的定义如下(采用数组形式,数组下标表示页号,数组单元存放与数组下标(页号)相应的页面号):*/structLNode*next;}LNode,*LinkList;//内存初始化voidCreatA(){inti=0;for(i=0;i=max;i++)A[i]=0;}//建立新进程voidNewNode(LinkList&L){charch;inti;intm;淮北师范大学操作系统课程设计LinkListp;LinkListnew_node;printf(\n*****输入进程名称:*****);ch=getche();p=L;while(p!=NULL)//查找进程名是否重复{if(p-name!=ch)p=p-next;else{printf(\n*****进程名%c已存在,请重新输入:*****,ch);ch=getche();p=L;//p重新指向头结点}}printf(\n*****输入进程%c的页数:*****,ch);scanf(%d,&i);while(i1){printf(\n*****请重新输入进程%c的页数:*****,ch);scanf(%d,&i);}if(icount){printf(\n*****内存物理块不足,新建进程%c失败!!!*****\n\n,ch);getch();}else{new_node=(LinkList)malloc(sizeof(LNode));new_node-name=ch;new_node-n=i;new_node-next=NULL;count-=i;m=0;for(i=0;i=max;i++)if(A[i]==0&&mnew_node-n){A[i]=new_node-name;淮北师范大学操作系统课程设计new_node-ye[m]=i;m++;}if(L==NULL)L=new_node;else{p=L;//查找最后一个节点while(p-next!=NULL){p=p-next;}p-next=new_node;}}}//回收进程,释放内存voidFreeNode(LinkList&L){LinkListp,q;charch;printf(*****请输入要删除的进程名称:*****);ch=getche();p=L;//查找进程ch;用p记录q=p;while(p!=NULL){if(p-name==ch)break;else{q=p;p=p-next;}}if(p==NULL){printf(\n*****进程%c不存在!!!*****\n,ch);getch();}else淮北师范大学操作系统课程设计{for(inti=0;ip-n;i++)A[p-ye[i]]=0;count+=p-n;if(p-name==q-name)//要删除的是头结点{L=p-next;}else{q-next=p-next;}}}//输出内存物理块分配情况voidPrintf(LinkListL){inti=0;printf(\n*****内存物理块分配情况:*****\n);LinkListp=L;printf(\n*****各进程信息:*****\n);printf(*****进程名称\t进程页数\t所用物理块*****\n);while(p!=NULL){printf(%c\t\t%d\t\t,p-name,p-n);for(i=0;ip-n;i++)printf(%d,,p-ye[i]);printf(\n);p=p-next;}}//显示内存块使用情况,不分进程voidshowit(){inti=0;printf(\n☆***☆***☆***☆***☆***☆***☆\n);printf(|☆◇☆内存物理块分配情况☆◇☆|\n);printf(\n☆***☆***☆***☆***☆***☆***☆\n);for(i=0;i=max;i++)淮北师范大学操作系统课程设计{if(A[i]!=0)printf(%c\t,A[i]);else{printf(%d\t,A[i]);}if(i%10==9)printf(\n);}}voidmain(){CreatA();printf(\n***☆***☆*基本分页存储管理的模拟实现*☆***☆***\n);LinkListL=NULL;inti=0;do{printf(\n☆***☆***☆***☆**菜单**☆***☆***☆***☆\n);printf(1添加进程\n);printf(2回收进程\n);printf(3内存使用情况\n);printf(4退出程序\n);printf(☆***☆***☆***☆***☆***☆***☆***☆***☆\n);printf(请输入你的选择(select):);scanf(%d,&i);switch(i){case1:{NewNode(L);//建立新的进程Printf(L);//输出内存物理块分配情况和各进程概况break;}case2:{FreeNode(L);//删除某进程Printf(L);//输出内存物理块分配情况和各进程概况break;}case3:{showit();//显示当前内存的使用情况break;}淮北师范大学操作系统课程设计case4:exit(4);break;}}while(i!=0);}