版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统实验报告姓名:卢一一 学号:201607010209 学校:清华大学 专业:计算机科学与技术 班级:2008级2班基本分页存储管理实验目的连续内存分配方式会形成许多“碎片”,虽然可以通过“紧凑”方法将许多碎片拼接成可用的大块空间,但须为之付出很大开销。如果允许将一个进程直接分散地装入到许多不相邻接的分区中,则无需再进行“紧凑”。基于这一思想而产生了离散分配方式。如果离散分配的基本单位是页,则称为分页存储管理方式;如果离散分配的基本单位是段,则称为分段存储管理方式。在分页存储管理方式中,如果不具备页面兑换功能,则称为基本的分页存储管理方式,或称为纯分页存储管理方式,它不具备支持虚拟存储器
2、的功能,它要求把每个作业全部装入内存后方能运行。本实验通过程序模拟操作系统的基本分页存储管理方式,进一步理解这一内存分配方式的原理和特点,加深对理论知识的掌握。实验要求1、用C语言或Java语言编写程序模拟操作系统对内存的基本分页存储管理方式2、程序要能正确对“内存”进行“分配”和“回收”,能接受用户的输入,显示内存的分配情况,并有一定的容错能力。3、每个人独立按时完成实验内容。实验内容本实验假定内存空间已经按块划分,目标程序无需关心内存块大小等底层细节,只需按算法对内存块进行分配即可。程序应该实现以下功能:1、内存初始化。假定内存块共有N个,初始化后的内存空间应该有一部分已经被使用,这可以用
3、随机数或程序内部的其他算法完成。2、程序应该能接受用户输入的进程信息,并为之分配内存,返回分配结果(成功或失败),注意,此处应该考虑到不合法的输入并进行相应处理。3、程序能回收用户指定的进程所占用的内存空间,因此,程序可能需要为每个进程分配一个唯一的进程号并给出详细的提示信息。4、能直观合理地显示内存分配情况。5、程序界面友好,便于操作和查看运行结果。实验结果实验总结基本分页的思想是比较简单的,而且实验前老师已经给出了一种可行的数据结构来存储程序中需要用到的数据,因此这个实验在构思上是没有多少难度的。由于程序中主要使用的是数组,操作起来比较方便,不像前两个实验需要用到大量的链表操作。在这次试验
4、中,我主要遇到了以下一些问题:1、程序刚写完时,记录“内存”中的进程数的变量和当前剩余总内存的变量的值不正确,经检查后发现是在结束进程时没有同时更新这些数据。2、内存使用情况应该以哪种形式输出以及输出哪些信息。最终我选择了尽可能详细地输出有用信息,通过空格、空行、对齐等手段尽力使输出格式简洁美观。比如,在输出每个进程的内存使用情况时,首先输出该进程占用的总内存,然后以统一的对齐方式依次输出各个内存块编号。当然,对于不同的模块输出的信息也应该不一样,比如,内存初始化结束后应该输出哪个内存块被占用了,否则无法判断后续的内存分配是否正确,但在以后查看内存使用情况时则不必把所有已占用的内存块输出,因为
5、每个进程都会单独把自己占用的内存块显示出来。为了达到这种效果,我使用了一个全局变量作为判断依据,详细情况见附录中代码。3、程序的容错性。这是一个容易被忽略的问题。这个程序起初基本没考虑这个问题,但在后来的调试过程中,逐渐加上了一些基本的容错功能,比如用户在结束某进程时,其输入的进程号可能根本不存在,这时应该给出用户出错提示,并要求用户重新输入,但这里用了一个编程中不太推荐的方式:goto 语句。总体而言,这次实验还是比较顺利的,没有遇到什么特别难解决的问题。通过自己编程模拟内存分配,我不仅加深了对这种内存管理方式的理解,也增强了C语言的编程能力。通过这几次的实验,我感觉手工写一个几百行的程序不
6、像以前那么困难了。附录#include <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
7、, j;/ 初始化内存状态标志数组for (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 =
8、 false;void output()printf("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
9、 (count = 15)putchar('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 &quo
10、t;, processij, count+);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, +
11、count);if (count = 15)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
12、> blockCount)return 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;prin
13、tf("当前内存中的进程有 %d 个, 进程号为:", 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
14、;for (int j=1; j<pages; 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", &choice);switch (choice)case 1: if (createProcess() printf("创建新进程成功!nn");elseprintf("抱歉!内存空间不足,创
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度外聘保安人员安全教育与培训合同
- 2025年科技园区建设尾款支付及设施移交合同3篇
- 2025年度贴砖劳务分包合同风险评估与管理
- 2025年个人教育设备租赁服务合同4篇
- 2025年度智能门禁系统租赁及维护服务合同3篇
- 二零二五年度仓储设施租赁与仓储信息化服务合同3篇
- 2025年度高速公路养护管理服务合同范本4篇
- 2025年度大型空飘球活动租赁及现场布置合同2篇
- 二零二五年度挖机设备租赁合同售后服务追加协议
- 2025版空运出口货物运输代理服务合同范本3篇
- 《电力用直流电源系统蓄电池组远程充放电技术规范》
- 《哪吒之魔童降世》中的哪吒形象分析
- 信息化运维服务信息化运维方案
- 汽车修理厂员工守则
- 六年级上册数学应用题100题
- 个人代卖协议
- 公安交通管理行政处罚决定书式样
- 10.《运动技能学习与控制》李强
- 冀教版数学七年级下册综合训练100题含答案
- 1神经外科分级护理制度
- 场馆恶劣天气处置应急预案
评论
0/150
提交评论