- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统-动态分区分配方式的模拟
《计算机操作系统》实验报告
课题名称:动态分区分配方式的模拟
姓名:黄仁化
学号:031010151551017
班级:计算机科学与技术2004班
日期 :二○○五年十二月十八日
一、动态分区分配方式的模拟
1、实验目的:了解动态分区分配方式中的数据结构和分配算法,
并进一步加深对动态分区存储管理方式及其实现过程的理解
2、实验内容:
(1)用C语言分别实现采用首次适应算法和最佳适应算法的动态分区分配过程和回收过程。
其中,空闲分区通过空闲分区链来管理;在进行内存分配时,系统优先使用空闲区低端的空间。
(2)假设初始状态下,可用的内存空间为640KB,并有下列的请求序列:
作业1申请130KB
作业2申请60KB
作业3申请100KB
作业2释放60KB
作业4申请200KB
作业3释放100KB
作业1释放130KB
作业5申请140KB
作业6申请60KB
作业7申请50KB
作业8申请60KB
实验内容简介:
设计一个可变式分区分配存储管理方案,对内存进行动态分配,并回收进程释放的空间。具体实现过程如下:
定义空闲分区表的数据结构,它包括表号,起始地址,大小和指针4个属性;定义进程的数据结构,它包括进程名,起始地址,大小,需要的时间,剩余的时间及指针5个属性。
首先,初始化一个空闲分区;然后,输入一个进程,根据进程的信息进行检测,看看是否有足够的空间来满足进程的要求,如果有,则为进程分配其所要求的空间,否则,显示出错。接着,检测是否有进程完成。如果有,则回收已完成的进程的空间,其它进程的运行时间加1;如果没有,则将所有队列中的所有进程运行时间加1。返回循环,接收进程输入,直到接收到终结符。
3、流程图:
是
否
是
4、子模块的功能简介
Init()
初始化空闲分区表,它的分区号为0,它的起始地址为1000,大小为200。
disp()
显示空闲分区表和进程队列的信息。
input()
输入进程的信息
4、inqueue()
当输入的进程能够申请到足够空间时,将该进程加入到进程队列。
settle()
空间分配函数,其具体工作是修改空闲分区表。其流程图如下:
allocate()
空闲分区表的修改函数,包括将分区表的起始地址赋值给进程的起始地址,将该空闲分区的地址及大小修改,以及空闲分区表总大小的修改。
gather()
紧凑函数,将分散的分区紧凑为一个大区。其具体工作包括将所有进程移到分区的顶端,根据相关信息修改它们的地址,并重新设置空闲分区表。
receive()
分区回收函数,其工作包括生成一个分区表项,并把它加入到分区表中,以及修改空闲分区的总大小。
move()
将进程队列中的进程移到分区表的顶端,修改它们的地址。
10 deleted()
将已运行完的进程从队列中删除,并释放结点的空间。
5、源代码:
//本动态分区存储管理模拟系统程序在VC++6.0下编译通过
//姓名:黄仁化 学号:031010151551017
#includestdio.h
#includeiostream.h
#includestring.h
#includeiomanip.h
const int MAXJOB=100;//定义表最大记录数
typedef struct node{
int start;
int length;
char tag[20];
}job;
job frees[MAXJOB];//定义空闲区表
int free_q; //定义空闲量
job occupys[MAXJOB];//定义已分配区表
int occupy_q; //定义已分配量
void initial() //初始化函数
{
int i;
for(i=0;iMAXJOB;i++){
frees[i].start=-1;
frees[i].length=0;
strcpy(frees[i].tag,free);
occupys[i].start=-1;
occupys[i].length=0;
strcpy(occupys[i].tag,);
}
free_q=0;
occupy_q=0;
}
int readData() //读数据函数
{
FILE *fp;
char fname[20];
cout请输入初始空闲表文件名:;
cinfname;
if((fp=fope
文档评论(0)