基本分页存储管理(共8页)

上传人:re****.1 文档编号:494844838 上传时间:2023-12-03 格式:DOCX 页数:8 大小:87.17KB
返回 下载 相关 举报
基本分页存储管理(共8页)_第1页
第1页 / 共8页
基本分页存储管理(共8页)_第2页
第2页 / 共8页
基本分页存储管理(共8页)_第3页
第3页 / 共8页
基本分页存储管理(共8页)_第4页
第4页 / 共8页
基本分页存储管理(共8页)_第5页
第5页 / 共8页
点击查看更多>>
资源描述

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

1、精选优质文档-倾情为你奉上操作系统课程实验报告 实验名称:基本分页储存管理实验五 基本分页存储管理实验目的:熟悉并掌握基本分页存储管理的思想。 熟悉并掌握基本分页存储管理的分配和回收方式,并能够模拟实现。实验内容:用高级语言模拟实现基本分页存储管理,要求:1、 内存空间的初始化可以由用户输入初始内存空间各个物理块情况。(用二维矩阵的方式按物理块号,逐行给出每个物理块的状态,1表示已分配,0表示未分配,并能够将行标、列标转换为对应的物理块号,以查看或修改每一个块的状态,要求:初始时部分物理块已分配)2、 基本分页的分配过程:由用户输入作业号和作业的大小(这里的大小是逻辑页面数),实现分配过程:空

2、间充足,分配,修改状态矩阵的相应位置的值(值由0转变为1),并用专门的数据记录下该作业占用的物理块的块号,以备删除作业时回收空间。3、 作业空间的的回收:用户输入作业号,实现分区回收(通过相应的数据结构找到该作业占有的物理块号,将块号转变成对应的行标、列标,将对应位置的值由1转变成0就完成了回收)4、 分区的显示:任何时刻,可以查看当前内存的情况(显示记录内存情况的矩阵的值)要求考虑:(1)内存空间不足的情况,要有相应的显示;(2)作业不能同名,但是删除后可以再用这个名字; (3)作业空间回收是输入作业名,回收相应的空间,如果这个作业名不存在,也要有相应的提示。三、实验代码#include #

3、include #define N 100 / 共有100个内存块int processNN+1; / 存放每个进程的页表int blockN; / 内存块状态标志数组,0:空闲,1:使用int blockCount; / 记录当前内存剩余空间int processCount; / 记录当前进程数bool flag = true;void init();void output();bool createProcess();bool endProcess();void init()int i, j;/ 初始化内存状态标志数组for (i=0; iN; i+)blocki = 0;for (i=0

4、; i20; i+)blockrand()%(N-1) = 1;blockCount = 0;for (i=0; iN; i+)if (blocki = 0)blockCount+;/ 初始化存放进程的数组for (i=0; iN; i+)processi0 = 0;for (j=1; jN; j+)processij = -1;processCount = 0;printf(初始化结果如下:);output();flag = false;void output()printf(n内存总量:%d 块, 已用空间:%d 块, 剩余空间:%d 块, 进程总数:%d 个n, N, N-blockCo

5、unt, blockCount, processCount);if (flag & blockCount N)printf(已使用的内存块(%d):n, N-blockCount);for (int k=0,count=0; k 0)printf(内存详细使用情况如下:n);for (int i=0; i 0)printf(进程号:%d n占用内存块(%2d):, i, processi0);for (int j=1,count=0; j 0)printf(空闲内存块(%d):n, blockCount);for (int k=0,count=0; k 99)printf(错误!进程号过大!n

6、);goto loop;if (pages blockCount)return false;blockCount -= pages;processpid0 = pages;for (int i=1; i=pages; i+) while (blockk=1 & k100)k+;processpidi = k;blockk = 1;k+;processCount+;return true;bool endProcess()int pid, pages;if (processCount 1)printf(当前内存没有进程!nn);return false;printf(当前内存中的进程有 %d 个

7、, 进程号为:, processCount);for (int i=0; i 0)printf(%2d , i);putchar(n);printf(请输入您要结束的进程号(小于%d):, N);scanf(%d, &pid);pages = processpid0;if (pages = 0)printf(对不起!该进程不存在!n);return false;for (int j=1; j 创建进程n 2 - 结束进程n 3 - 查看内存n 0 - 退出程序n);printf(请输入您要进行的操作:);scanf(%d, &choice);switch (choice)case 1: if

8、(createProcess() printf(创建新进程成功!nn);elseprintf(抱歉!内存空间不足,创建新进程失败!nn);break;case 2: if (endProcess()printf(进程已结束!nn);elseprintf(进程结束失败!nn);break;case 3: output();break;case 0: return ;default:printf(对不起!您的选择有误!请重新选择!nn);void main()init();menu();四、实验结果五、实验总结在中,连续分配方式会形成许多“碎片”,虽然可通过“紧凑”方法将许多碎片拼接成可用的大块空间,但须为之付出很大开销。如果允许将一个直接分散地装入到许多不相邻的分区中,则无须再进行“紧凑”。基于这一思想而产生了分配方式。如果离散分配的基本单位是页,则称为分页存储管理方式。在分页存储管理方式中,如果不具备功能,则称为基本分页存储管理方式,或称为纯分页存储管理方式,它不具有支持实现的功能,它要求把每个作业全部装入内存后方能运行。专心-专注-专业

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

当前位置:首页 > 办公文档 > 教学/培训

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