基本分页管理

上传人:ji****72 文档编号:37689616 上传时间:2018-04-21 格式:DOCX 页数:12 大小:264.32KB
返回 下载 相关 举报
基本分页管理_第1页
第1页 / 共12页
基本分页管理_第2页
第2页 / 共12页
基本分页管理_第3页
第3页 / 共12页
基本分页管理_第4页
第4页 / 共12页
基本分页管理_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《基本分页管理》由会员分享,可在线阅读,更多相关《基本分页管理(12页珍藏版)》请在金锄头文库上搜索。

1、操作系统操作系统课程课程实验报告实验报告实验名称:基本分页存储管理姓 名: 许晓民 学 号: 541107010148 地 点: 实验楼 指导老师: 张旭 专业班级: 计算机科学与技术 11-01 一、实验目的:1:熟悉并掌握基本分页存储管理的思想。 2:熟悉并掌握基本分页存储管理的分配和回收方式,并能够模拟实现。二、实验内容:用高级语言模拟实现基本分页存储管理,要求:1、 内存空间的初始化可以由用户输入初始内存空间各个物理块情况。 (用 二维矩阵的方式按物理块号,逐行给出每个物理块的状态,1表示已分 配,0表示未分配,并能够将行标、列标转换为对应的物理块号,以查 看或修改每一个块的状态,要求

2、:初始时部分物理块已分配) 2、 基本分页的分配过程:由用户输入作业号和作业的大小(这里的大小是逻 辑页面数) ,实现分配过程:空间充足,分配,修改状态矩阵的相应位置的 值(值由 0 转变为 1) ,并用专门的数据记录下该作业占用的物理块的块号, 以备删除作业时回收空间。 3、 作业空间的的回收:用户输入作业号,实现分区回收(通过相应的数据结 构找到该作业占有的物理块号,将块号转变成对应的行标、列标,将对应 位置的值由 1 转变成 0 就完成了回收) 4、 分区的显示:任何时刻,可以查看当前内存的情况(显示记录内存情况的 矩阵的值) 5、 要求考虑:(1)内存空间不足的情况,要有相应的显示;(

3、2)作业不能同名,但是删除后可以再用这个名字;(3)作业空间回收是输入作业名,回收相应的空间,如果这个 作业名不存在,也要有相应的提示。三、实验代码#include #include #include int *state; int flag1020; int memory_size,page_size,block_number;void initMemoryBlock() int i; state = (int *)malloc(block_number * sizeof(int); for(i=0;i= 0 else return 0; void intoMemoryChangeState

4、(int jobNo,int num) int i,j=0; for(i=0;i 0) statei = 1; flagjobNoj = i; j+; num-; printf(“n * 作业:%d,进入内存!n“,jobNo); void newJob() int job_number,job_size,page_number; printf(“n * 请输入作业信息(其中作业号为 0-9 的数字,作业大小单位 为 KB):n“); printf(“n 作业号:“); scanf(“%d“, while(job_number 9) printf(“n * 作业号输入不合法,请重新输入!n“)

5、; printf(“n 作业号:“); scanf(“%d“, printf(“n 作业大小:“); scanf(“%d“, if(job_size%page_size = 0) page_number = job_size/page_size; printf(“n 页面个数:%dn“,page_number); else page_number = job_size/page_size + 1; printf(“n 页面个数:%dn“,page_number); if(canIntoMemory(page_number) intoMemoryChangeState(job_number,pa

6、ge_number); else printf(“n * 内存不足,作业:%d,不能进入内存中! n“,job_number); void freeMemory() int i,j,k;printf(“n * 请输入数字(0-9 释放相应作业,其它释放内存中所有作业) :“); scanf(“%d“, if(k = 0 j20;j+) if(flagkj != -1) stateflagkj = 0; flagkj = -1; printf(“n * 作业:%d,已被释放!n“,k); else printf(“n * 内存中没有作业:%d!n“,k); else for(i=0;i10;i+

7、) for(j=0;j20;j+) if(flagij != -1) stateflagij = 0; flagij = -1; printf(“n * 所有作业已被释放!n“); void menu() printf(“n“);printf(“ *n“); printf(“ n“); printf(“* 0、显示菜单;*n“); printf(“ n“); printf(“* 1、初始化内存;*n“); printf(“ n“); printf(“* 2、内存使用情况;*n“); printf(“ n“); printf(“* 3、释放内存;*n“); printf(“ n“); print

8、f(“* 4、新增作业;*n“); printf(“ n“); printf(“* 5、作业占用内存情况;*n“);printf(“ n“); printf(“* #、结束。 *n“);printf(“*n“);printf(“n“); void main() char result10; menu(); do printf(“n“); printf(“ 请选择菜单里相应功能的符号:“); scanf(“%s“, if(!strcmp(result,“0“) printf(“n * 当前操作为:%s、显示菜单:n“,result); menu(); else if(!strcmp(result

9、,“1“) printf(“n * 当前操作为:%s、初始化内存:n“,result); init(); else if(!strcmp(result,“2“) printf(“n * 当前操作为:%s、内存使用情况:n“,result); memoryBlockState(-1);else if(!strcmp(result,“3“) printf(“n * 当前操作为:%s、释放内存:n“,result); freeMemory(); else if(!strcmp(result,“4“) printf(“n * 当前操作为:%s、新增作业:n“,result); newJob(); el

10、se if(!strcmp(result,“5“) printf(“n * 当前操作为:%s、作业占用内存情况:n“,result); jobHaveBlock(); else if(!strcmp(result,“#“) printf(“n * 当前操作为:%s、结束:n“,result); printf(“n * 程序运行结束,欢迎下次使用!nn“); else printf(“n * 输入不合法,请重新输入!n“); while(strcmp(result,“#“);四、实验结果四、实验结果1、选择操作界面2、选择操作分配内存第一个作业:第二个作业:第三个作业:3、查看内存分配情况4、释放内存释放作业 2 后内存使用情况:五、实验总结五、实验总结基本分页的思想是比较简单的,二期实验前老师已经给出了一种可行的数据结构来存储程序中需要用到的数据,一次这个实验在构思上是没有多少难度的。由于程序主要使用的是数组,操作起来比较方便。在这次实验过程中,遇到了许多问题,经过老师和同学的帮助完成了实验。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号