操作系统存储器管理

上传人:大米 文档编号:486546623 上传时间:2023-12-06 格式:DOC 页数:8 大小:25.51KB
返回 下载 相关 举报
操作系统存储器管理_第1页
第1页 / 共8页
操作系统存储器管理_第2页
第2页 / 共8页
操作系统存储器管理_第3页
第3页 / 共8页
操作系统存储器管理_第4页
第4页 / 共8页
操作系统存储器管理_第5页
第5页 / 共8页
点击查看更多>>
资源描述

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

1、存储器管理(固定分区、可变分区与分页式分配算法)一、目的本课题实验的目的是,使学生实验存储器管理系统的设计方法;加深对所学各种存储器管理方案的了解;要求采用一些常用的存储器分配算法,设计一个存储器管理模拟系统并调试运行。二、实验内容模拟固定分区分内存的动态分配和回收,并编程实现。三、要求及提示(1) 建立相关的数据结构,作业控制块、已分配分区及未分配分区(2) 实现一个固定分区分配算法(实现多个分区只设置一个后备作业队列, 而每个分区设置一个后备作业队列 ,留给大家实现)(3) 实现一个分区回收算法(4)要求采用一种常用的存储器分配算法,设计一个存储器管理模拟系统。允许进行多次的分配和释放,并

2、可向用户反馈分配和释放情况及当前内存的情况;采用“命令菜单”选择和键盘命令输入的会话方式,根据输入请求调用分配模块,或回收模块,或内存查询模块,或最终退出系统。(5)编程实现。(6)工具:C语言或其它高级语言四、实验报告1、 列出调试通过程序的清单,并附上文档说明。2、 总结上机调试过程中所遇到的问题和解决方法及感想。五 参考代码:/ memdos.cpp : 定义控制台应用程序的入口点。/以下代码为4种分区,8K分区四块,16K分区3块,32分区2块, 64分区1块, 共10块#include stdafx.h#include #include /#include #define TRUE

3、1#define FALSE 0void InitCSolid( );void ExitSolid();int MallocArea(int nSize,char* sName);/申请一个分区函数int FreeArea(char *sName); /释放一个分区函数void ShowArea( );/显示所有分区状态函数struct Solid /每分区作业的数据结构 char *pmem; /每分区内存的起始地址 int size; / 每分区的大小 int useSize; /已使用大小,若为0 ,表示此分区尚未使用 char jobName20; /此分区的作业(进程)名;int n

4、Sizes4;/共4种分区,每种分区的大小为 8k,16k,32k,64k ,每K为1024字节char *pmems; /起始分区内存地址Solid *psolids; int snum; /定义总的内存分区数int main( ) int jobCount=1; /已申请的作业个数 char str100; char jobName14; int nSize; /申请的作业大小InitCSolid( ); /初始化数据while(1) ShowArea( ); /显示内存的分配与使用情况 printf( 固定分区内存管理n x退出 1申请内存 2释放内存n); scanf(%s,str);

5、 if(strlen(str)!=1) continue; if(str0=x | str0=X) break; /退出 if(str0=1) /申请内存 while(1) printf(请输入申请内存的大小 (按x退出,按0返回上一级): );scanf(%s,str);if(strlen(str)=1) if(str0=x | str0=X) goto exit; / 退出 if(str0=0)break; /返回上一级 nSize=atoi(str);/获取申请的内存大小 (atoi函数功能为字符串转换成数字类型) if(nSizesnum=sNum; int i,ntotalSize=

6、0; snum=10; /总共分成10分区 psolids=(Solid *)malloc(sizeof(Solid)*snum); /new Solidsnum;/申请堆内存 nSizes0=8192;nSizes1=16384;nSizes2=32768;nSizes3=65536; /nSizes4=165536; psolids0.size=nSizes0; psolids0.useSize=0; /其中8K分区4块 ,并设置其大小与使用标志为0, 表示未使用 psolids1.size=nSizes0; psolids1.useSize=0; psolids2.size=nSizes

7、0; psolids2.useSize=0; psolids3.size=nSizes0; psolids3.useSize=0; psolids4.size=nSizes1; psolids4.useSize=0; /其中16K分区3块 psolids5.size=nSizes1; psolids5.useSize=0; psolids6.size=nSizes1; psolids6.useSize=0; psolids7.size=nSizes2; psolids7.useSize=0;/其中32K分区2块 psolids8.size=nSizes2; psolids8.useSize=0

8、; psolids9.size=nSizes3; psolids9.useSize=0; /其中64K分区1块 for(i=0;isnum;i+) ntotalSize+=psolidsi.size; /获取总的内存大小 pmems=(char *)malloc(ntotalSize); psolids0.pmem=pmems; /设置每分区的起始地址 for(i=1;isnum;i+) psolidsi.pmem=psolidsi-1.pmem +psolidsi-1.size; void ExitSolid() /释放 / delete psolids; free(psolids);/释放

9、内存free(pmems); /申请内存函数 ,参数nrSize为要申请的内存大小 ,参数sName为申请的作业名称,申请成功返回TRUE, 否则返回FALSEint MallocArea(int nrSize,char *sName)int i;for(i=0;inSizesi) continue; /根据要申请的nrSize内存大小,判断落在哪个分区(8k,16k,32k,64k分区) break;if(i=4) return false; /申请的nrSize内存 太大,没有大内存分配int n=i; /记住要分配的分区 /循环查找可用分区for(i=0;isnum;i+) if(psolidsi.sizenSizesn) /找出分区位置 continue;if(psolidsi.useSize!=0) /此分区块已分配出去否? continue; /是,寻找下一分区块psolidsi.useSize=nrSize; /否,分配此块分区strcpy(psolidsi.jobName,sName);/保存作业名break;if(i=snum) return FALSE; /申请不成功 return TRUE;/申请成功/根据作业名释放内存,找到作业名并成功释放返回TRUE ,否则返回FALSEint FreeArea(char *sName)

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 建筑资料

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