基本分页存储管理.docx_第1页
基本分页存储管理.docx_第2页
基本分页存储管理.docx_第3页
基本分页存储管理.docx_第4页
基本分页存储管理.docx_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

操作系统课程实验报告实验名称:基本分页存储管理班 级: * 学 号: * 姓 名:* 指导老师: * 成 绩: 一、 实验目的:1.熟悉并掌握基本分页存储管理的思想。2.熟悉并掌握基本分页存储管理的分配和回收方式,并能够模拟实现。二、实验内容:用高级语言模拟实现动态分区存储管理,要求:1、 内存空间的初始化可以由用户输入初始内存空间各个物理块情况。(用二维矩阵的方式按物理块号,逐行给出每个物理块的状态,1表示已分配,0表示未分配,并能够将行标、列标转换为对应的物理块号,以查看或修改每一个块的状态,要求:初始时部分物理块已分配)2、 基本分页的分配过程:由用户输入作业号和作业的大小(这里的大小是逻辑页面数),实现分配过程:空间充足,分配,修改状态矩阵的相应位置的值(值由0转变为1),并用专门的数据记录下该作业占用的物理块的块号,以备删除作业时回收空间。3、 作业空间的的回收:用户输入作业号,实现分区回收(通过相应的数据结构找到该作业占有的物理块号,将块号转变成对应的行标、列标,将对应位置的值由1转变成0就完成了回收)4、 分区的显示:任何时刻,可以查看当前内存的情况(显示记录内存情况的矩阵的值)三、实验代码#include stdio.h #include stdlib.h #include string.h int A100; /内存物理块0未使用非0已使用int max = 99; /记录内存的物理块数,值为A100最大下标int count = 100; /记录内存未使用物理块数typedefstructLNode int f; /进程号 char name8; /进程名int size; /进程大小int n; /进程页数int ye100; /页表,下标表示页号内容表示进程各页所在物理块structLNode *next; LNode,*LinkList; /内存初始化voidCreatA() int i = 0; for(i = 0;i f); j=0; while(p != NULL&jf!=new_node-f) p = p-next; else printf(n该进程已存在,重新输入:); scanf(%d,&new_node-f); p = L;/p重新指向头结点j+; if(jname); printf(n输入进程的大小:); 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-n count) printf(n内存物理块不足新建进程失败!nn); else count -=new_node-n; m = 0; for(i= 0; i= max; i+) if(Ai = 0 & m 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-next = new_node; new_node-next = NULL; else printf(n错误次数过多,返回主菜单:); /回收进程释放内存voidFreeNode(LinkList&L) LinkListp,q; int z; 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(int i = 0; i n; i+) Ap-yei = 0; count += p-n; if(p-f= q-f)/要删除的是头结点 L = p-next; else q-next = p-next; /显示所有进程占用的物理块voidPrintf(LinkList L) int i = 0; printf(n内存物理块分配情况:n); LinkList p = L; printf(n各进程信息: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 n; i+) printf(%d,p-yei); printf(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(%dtt,p-n); int i; for(i = 0;i n; i+) printf(%d,p-yei); printf(n); break; else p=p-next; if(p=NULL) printf(要查询的进程不存在n); /显示内存块使用情况不分进程voidshowit() int i = 0; printf(n*n); printf(| 内存物理块分配情况 |n); printf(*n); for(i = 0; i = max; i+) printf(%dt,Ai); if(i%10 = 9) printf(n); void main() CreatA(); printf(n* 基本分页算法 *n);printf(n* 51 *杨霖*n);LinkList L = NULL; int i = 0; do printf(n*菜单*n); printf( 1 进程装入n); printf( 2 进程退出n); printf( 3 内存使用情况n); printf( 4 进程查看n); printf( 5 退出程序n); printf( *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; case 5: printf(谢谢使用nn); exit(0); break; while(i != 0); 四、实验结果1、

温馨提示

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

最新文档

评论

0/150

提交评论