操作系统存储器管理

操作系统存储器管理

ID:36607959

大小:71.50 KB

页数:8页

时间:2019-05-12

操作系统存储器管理_第1页
操作系统存储器管理_第2页
操作系统存储器管理_第3页
操作系统存储器管理_第4页
操作系统存储器管理_第5页
资源描述:

《操作系统存储器管理》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

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/

3、/#include#defineTRUE1#defineFALSE0voidInitCSolid();voidExitSolid();intMallocArea(intnSize,char*sName);//申请一个分区函数intFreeArea(char*sName);//释放一个分区函数voidShowArea();//显示所有分区状态函数structSolid//每分区作业的数据结构{char*pmem;//每分区内存的起始地址intsize;//每分区的大小intuseSize;//已使用大小,若为0,表示此分区尚未使用charjobName[20];/

4、/此分区的作业(进程)名};intnSizes[4];//共4种分区,每种分区的大小为8k,16k,32k,64k,每K为1024字节char*pmems;//起始分区内存地址Solid*psolids;intsnum;//定义总的内存分区数intmain(){intjobCount=1;//已申请的作业个数charstr[100];charjobName[14];intnSize;//申请的作业大小InitCSolid();//初始化数据while(1){ShowArea();//显示内存的分配与使用情况printf("固定分区内存管理x退出1申请内存2释放内存");s

5、canf("%s",str);if(strlen(str)!=1)continue;if(str[0]=='x'

6、

7、str[0]=='X')break;//退出if(str[0]=='1')//申请内存{while(1){printf("请输入申请内存的大小(按x退出,按0返回上一级):");scanf("%s",str);if(strlen(str)==1){if(str[0]=='x'

8、

9、str[0]=='X')gotoexit;//退出if(str[0]=='0')break;//返回上一级}nSize=atoi(str);//获取申请的内存大小(atoi函数功能为字符串转

10、换成数字类型)if(nSize<=0){printf("输入错误!");continue;}sprintf(jobName,"作业%03d",jobCount);//自动定义一个作业名if(!MallocArea(nSize,jobName))//分配内存,并判断是否成功{printf("申请内存大小为%d,但没有空间可分配,请重新输入",nSize);}jobCount++;//已申请的作业个数ShowArea();//显示内存的分配与使用情况}if(str[0]=='0')continue;//返回上一级}if(str[0]=='2')//释放内存{printf("请输入

11、释放内存的作业名(按x退出,按0返回上一级):");while(1){scanf("%s",str);if(strlen(str)==1){if(str[0]=='x'

12、

13、str[0]=='X')gotoexit;//退出if(str[0]=='0')break;//返回上一级}if(strlen(str)==3)sprintf(jobName,"作业%s",str);//获取作业名elsestrcpy(jobName,str);if(FreeArea(jobName))//根据

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。