1、typedef struct LNode int f; /进程号 char name8; /进程名 int size; /进程大小 int n; /进程页数 int ye100; /页表,下标表示页号,内容表示进程各页所在物理块 struct LNode *next;LNode,*LinkList;二、各个功能模块三、主要功能模块流程图四、系统测试主界面:(显示程序的各个功能块)1、选择1,运行界面如下:(选择1,输入进程名,显示内存物理块分配情况)2、选择2,运行界面如下:(显示2回收进程,若进程名输入错误,则显示进程不存在,)3、选择3,运行界面如下:(显示进程r的内存使用情况,0表示未用
2、)五、结论在这次课程设计中,我清楚的认识理论到到实践的重要性,经过实际的动手操作不仅提高了我的动手能力还提高了我把理论转化成实践的能力。实验中对页表的定义如下(采用数组形式,数组下标表示页号,数组单元存放与数组下标(页号)相应的页面号):如ye 100 六、源程序及系统文件使用说明#include stdio.hstdlib.hstring.hconio.h#include /#include /#define y 0;char A100; /内存物理块,0:未使用, int max = 99; /记录内存的物理块数,值为A100最大下标int count = 100; /记录内存未使用物理块
3、数 char name; /进程名int ye100; /*进程各页所在物理块,页表实验中对页表的定义如下(采用数组形式,数组下标表示页号,数组单元存放与数组下标(页号)相应的页面号): */内存初始化void CreatA() int i = 0; for(i = 0;i name != ch) p = p-next; else printf(n*进程名 %c 已存在,请重新输入:*,ch); ch = getche(); p = L;/p重新指向头结点 n*输入进程 %c 的页数: scanf(%d,&i); while(i count)n*内存物理块不足,新建进程 %c 失败*nn ge
4、tch(); else new_node = (LinkList)malloc(sizeof(LNode); new_node-name = ch;n = i;next = NULL; count -= i; m = 0; for(i = 0; i if(Ai = 0 & m n) Ai = new_node-name ; new_node-yem = i; m+; if(L = NULL) L = new_node; else p = L; /查找最后一个节点 while(p-next != NULL) p = p- p-next = new_node; /回收进程,释放内存void Fre
5、eNode(LinkList & LinkList p,q;*请输入要删除的进程名称:/查找进程 ch ;用p记录 q = p;name = ch) break; q = p; if(p = NULL)n*进程 %c 不存在*n for(int i = 0; p-n; i+) Ap-yei = 0; count += p-name = q-name)/要删除的是头结点 L = p- q-next = p-/输出内存物理块分配情况void Printf(LinkList L)n*内存物理块分配情况:*n LinkList p = L;n*各进程信息:*进程名称t进程页数t所用物理块*n %ctt
6、%dtt,p-name,p-n);%d,yei);n p = p-/显示内存块使用情况,不分进程void showit()n*n| 内存物理块分配情况 |n if(Ai!=0) %ct,Ai); elseprintf(%dt if(i%10 = 9)void main() CreatA();n* 基本分页存储管理的模拟实现*n LinkList L = NULL; don*菜单*n printf( 1 添加进程n 2 回收进程n 3 内存使用情况n 4 退出程序n*n请输入你的选择(select): switch(i) case 1: NewNode(L);/建立新的进程 Printf(L);/输出内存物理块分配情况和各进程概况 break; case 2: FreeNode(L); /删除某进程 Printf(L); /输出内存物理块分配情况和各进程概况 case 3: showit();/显示当前内存的使用情况 case 4:exit(4); while(i != 0);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1