基本分页存储管理(共8页)_第1页
基本分页存储管理(共8页)_第2页
基本分页存储管理(共8页)_第3页
基本分页存储管理(共8页)_第4页
基本分页存储管理(共8页)_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

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

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

3、lt;stdio.h>#include <windows.h>#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

4、(i=0; i<N; i+)blocki = 0;for (i=0; i<20; i+)blockrand()%(N-1) = 1;blockCount = 0;for (i=0; i<N; i+)if (blocki = 0)blockCount+;/ 初始化存放进程的数组for (i=0; i<N; i+)processi0 = 0;for (j=1; j<N; j+)processij = -1;processCount = 0;printf("初始化结果如下:");output();flag = false;void output()p

5、rintf("n内存总量:%d 块, 已用空间:%d 块, 剩余空间:%d 块, 进程总数:%d 个n", N, N-blockCount, blockCount, processCount);if (flag && blockCount < N)printf("已使用的内存块(%d):n", N-blockCount);for (int k=0,count=0; k<N; k+)if (blockk = 1)printf("%2d ", k, +count);if (count = 15)putchar(

6、'n');count = 0;putchar('n');/ 输出各进程占用内存详细情况if (processCount > 0)printf("内存详细使用情况如下:n");for (int i=0; i<N; i+)if (processi0 > 0)printf("进程号:%d n占用内存块(%2d):", i, processi0);for (int j=1,count=0; j<=processi0; j+)printf("%2d ", processij, count+

7、);if (count = 15)putchar('n');printf(" ");count = 0;putchar('n');elseprintf("当前内存无进程!n");/*/ 输出空闲内存块if (blockCount > 0)printf("空闲内存块(%d):n", blockCount);for (int k=0,count=0; k<N; k+)if (blockk = 0)printf("%2d ", k, +count);if (count = 15

8、)putchar('n');count = 0;putchar('n');*/putchar('n');bool createProcess()int pid, pages, k = 0;loop:printf("请输入进程号(小于%d)和所需页面数:", N);scanf("%d%d", &pid, &pages);if (pid > 99)printf("错误!进程号过大!n");goto loop;if (pages > blockCount)retur

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

10、 个, 进程号为:", processCount);for (int i=0; i<N; i+)if (processi0 > 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<p

11、ages; j+)blockprocesspidj = 0;processpidj = -1;processpid0 = 0;processCount-;blockCount += pages;return true;void menu()int choice;while (true)printf("操作菜单:n");printf(" 1 -> 创建进程n 2 -> 结束进程n 3 -> 查看内存n 0 -> 退出程序n");printf("请输入您要进行的操作:");scanf("%d",

12、 &choice);switch (choice)case 1: if (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();四、实验结果五、实验总结在中,连续分配方式会形成许多“碎片”,虽然可通过“紧凑”方法将许

温馨提示

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

评论

0/150

提交评论