基本分页存储管理的模拟实现(共13页)

上传人:6**** 文档编号:47706859 上传时间:2021-12-25 格式:DOC 页数:13 大小:295.50KB
收藏 版权申诉 举报 下载
基本分页存储管理的模拟实现(共13页)_第1页
第1页 / 共13页
基本分页存储管理的模拟实现(共13页)_第2页
第2页 / 共13页
基本分页存储管理的模拟实现(共13页)_第3页
第3页 / 共13页
资源描述:

《基本分页存储管理的模拟实现(共13页)》由会员分享,可在线阅读,更多相关《基本分页存储管理的模拟实现(共13页)(13页珍藏版)》请在装配图网上搜索。

1、精选优质文档-倾情为你奉上 基本分页存储管理的模拟实现 学 院: 专 业: 学 生 姓 名: 学 号: 指 导 教 师: 2014年3月 18 日 目录22、 相关操作系统的知识介绍22四、程序功能说明33六347九、程序代码7一、设计内容 根据设计要求实现对基本分页存储管理的模拟二、 相关操作系统的知识介绍 连续分配方式会形成许多“碎片”,虽然可通过“紧凑”方法将许多碎片拼接成可用的大块空间,但须为之付出很大的开销。如果允许将一个进程直接分散的装入到许多不相邻接的分区中,则无需在进行“紧凑”。基于这一思想而产生了离散分配方式。如果离散分配的 基本单位是页,则称为分页存储管理方式;如果离散分配

2、的基本单位是段,则称为分段存储管理方式。 在分页存储管理方式中,如果不具备页面对换功能,则称为基本的分页存储管理方式,或称为纯分页存储管理方式,它不具有支持实现虚拟存储的功能,它要求把每个作业全部装入内存后方能运行。3、 课程设计的目的及要求 1、课程设计的目的操作系统课程设计是计算机专业重要的教学环节,它为我们提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。 l 进一步巩固和复习操作系统的基础知识。 l 培养我们结构化程序、模块化程序设计的方法和能力。 l 提高我们调试程序的技巧和软件设计的能力。l 提高我们分析问题、解决问题以及综合利用 C 语

3、言进行程序设计的 能力。2、设计要求1. 选择恰当的数据结构表示页表2. 进程名,进程所需页数,进程进行的操作(装入/退出)等操作可有键盘输入,也可从文件读出。3. 每进行一次进程的装入或者退出操作,就显示出操作执行后内存中各页的分配情况。四、程序功能说明函数各模块部分功能void CreatA()/创建内存新函数void NewNode(LinkList &L)/建立新进程void FreeNode(LinkList &L)/回收进程,释放内存void Printf(LinkList L)/显示所有进程所占物理块信息void look(LinkList L)/查看进程信息vo

4、id showit()/显示内存块使用信息函数的整体功能 这个程序是为了实现离散分配方式,以消减内存的外零头,提高内存的利用率,由系统把逻辑地址划分为页号和页内地址两部分。通过这个程序实现了将进程分页处理,划分物理块。五、算法整体思想 先定义A100来记录内存物理块; max = 99来记录内存物理块数;count = 100来记录未使用的物理块数。首先通过CreatA()函数初始化内存而后通过NewNode(LinkList &L)建立新的进程,输入进程号,进程名,进程大小,计算出所需要的进程页数以及分配物理块。通过FreeNode(LinkList &L)来删除所选择的进程

5、信息,释放内存。通过Printf(LinkList L)显示以上两个函数所产生的进程信息。而后通过look(LinkList L)查看进程信息。通过showit()显示内存物理块的分布情况。 当输入进程号new_node->f,然后通过j=0至j>3时终止,如若p->f=new node->f当是时进程存在,重新输入,当不是时p=p->next;如若非此情况则输入进程名称和进程大小,然后通过进程页数n=size/1024,若页内地址k!=0,n=n+1显示所需页数,比较页数与物理块的大小,如果页数大于物理块数则内存物理块不足,新建进程失败;如果小于则分配内存物理块

6、。六、主要功能模块进程图开始输入进程号new_node->f输入进程号次数j=0(j>3,终止)Y输入进程名称、大小p->f=new node->f进程页数n=size/1024,若页内地址k!=0,n=n+1显示所需页数p=p->next N页数n>物理块数 Y内存物理块分配不足,新建进程失败 N分配内存物理块七、实验结果添加进程 删除进程内存使用情况查看进程八、实验总结通过本次操作系统课设,本次课设为我们提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。进一步巩固和复习操作系统的基础知识。 培养我们结构化程序、

7、模块化程序设计的方法和能力。提高我们调试程序的技巧和软件设计的能力。 提高我们分析问题、解决问题以及综合利用 C 语言进行程序设计的能力。本次课设掌握了如何创建一个进程,添加进程和删除进程。通过本次课设,我也发现我的好多不足之处,首先在源程序的录入上就遇到了很大的麻烦,由于英文录入的速度比较慢,在源程序代码的录入上就花费了很多的功夫,还有就是C语言的基本功还不够扎实,出现了很多不该出现的毛病,还好在设计过程,让我深深体会到老师在课堂上讲的内容和要注意的地方的重要性,也正是老师在课堂上提前给我们做了提醒和学习,我在设计时才没花费太多的时间去更正这些问题。在以后的学习中,我一定要注意基本功的学习。

8、谢谢老师对我的指导与教诲,在今后的学习中一定会用心再用心,不辜负老师对学生的教诲!九、程序代码#include "stdio.h" #include "stdlib.h"#include "string.h" int A100; /内存物理块,0:未使用,非0:已使用 int max = 99; /记录内存的物理块数,值为A100最大下标 int count = 100; /记录内存未使用物理块数 typedef struct LNode int f; /进程号 char name8; /进程名 int size; /进程大小 int

9、 n; /进程页数 int ye100; /页表,下标表示页号,内容表示进程各页所在物理块 struct LNode *next; LNode,*LinkList; /内存初始化 void CreatA() int i = 0; for(i = 0;i <= max; i+) Ai = 0; /建立新进程 void NewNode(LinkList &L) int i,j; int m,k; LinkList p; LinkList new_node; new_node= (LinkList)malloc(sizeof(LNode); p = L; printf("输入

10、进程号:"); scanf("%d",&new_node->f); j=0; while(p != NULL&&j<3) /查找进程号是否重复 if(p->f!=new_node->f) p = p->next; else printf("n该进程已存在,重新输入:"); scanf("%d",&new_node->f); p = L;/p重新指向头结点 j+; if(j<3) printf("输入进程名称:"); scanf(&q

11、uot;%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("%dn",new_node->n); if(new_node->

12、;n> count) printf("n内存物理块不足,新建进程失败!nn"); else count -=new_node->n; m = 0; for(i= 0; i<= max; i+) if(Ai = 0 && m < new_node->n) Ai=new_node->f; new_node->yem = i; m+; if(L = NULL) L = new_node; else p = L; /查找最后一个节点 while(p->next != NULL) p = p->next; p-&g

13、t;next = new_node; new_node->next = NULL; else printf("n错误次数过多,返回主菜单:"); /回收进程,释放内存 void FreeNode(LinkList &L) LinkList p,q; int z; printf("请输入要删除的进程号:"); scanf("%d",&z); p = L;/查找进程;用p记录 q = p; while(p != NULL) if(p->f=z) printf("该进程已删除"); break

14、; else q = p; p = p->next; if(p = NULL) printf("n该进程不存在!n"); else for(int i = 0; i < p->n; i+) Ap->yei = 0; count += p->n; if(p->f= q->f)/要删除的是头结点 L = p->next; else q->next = p->next; /显示所有进程占用的物理块 void Printf(LinkList L) int i = 0; printf("n内存物理块分配情况:n&q

15、uot;); LinkList p = L; printf("该进程信息:n"); printf("进程号tt进程名称t进程页数t所用物理块n"); while(p != NULL) printf("%dtt",p->f); printf("%stt",p->name); printf("%dtt",p->n); int i; for(i = 0;i < p->n; i+) printf("%d,",p->yei); printf(&quo

16、t;n"); p = p->next; / 查看进程 void look(LinkList L) int z; printf("输入要查询的进程号"); scanf("%d",&z); LinkList p = L; while (p!=NULL) if(p->f =z) printf("进程号tt进程名称t进程页数t所用物理块n"); printf("%dtt",p->f); printf("%stt",p->name); printf("%

17、dtt",p->n); int i; for(i = 0;i < p->n; i+) printf("%d,",p->yei); printf("n"); break; else p=p->next; if(p=NULL) printf("要查询的进程不存在n"); /显示内存块使用情况,不分进程 void showit() int i = 0; printf("内存物理块分配情况n"); for(i = 0; i <= max; i+) printf("%d

18、t",Ai); if(i%10 = 9) printf("n"); void main()CreatA();LinkList L=NULL;int i=0;do printf("tt 基本分页存储管理算法n"); printf("tt*n");printf("tt*1.添加进程 2.删除进程*n"); printf("tt*3.内存使用情况 4.查看进程*n"); printf("tt*n");printf("请选择(select):");scanf("%d",&i);switch(i)case 1:NewNode(L);Printf(L);break;case 2: FreeNode(L); Printf(L); break;case 3:showit();break;case 4:look(L);break;while(i!=0);专心-专注-专业

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!