- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统实习报告2.
实习二 主存空间的分配和回收
一、实习内容
模拟主存空闲空间的表示方法,以及模拟实现主存空间的分配和回收。
二、实习目的
通过本实习帮助理解在不同的存储管理方式下应怎样进行存储空间的分配和回收。
实习题目
在可变分区管理方式下采用首次适应算法(首次适应算法(First Fit):从空闲分区表的第一个表目起查找该表,把最先能够满足要求的空闲区分配给作业,这种方法目的在于减少查找时间。为适应这种算法,空闲分区表(空闲区链)中的空闲分区要按地址由低到高进行排序。该算法优先使用低址部分空闲区,在低址空间造成许多小的空闲区,在高地址空间保留大的空闲区
本实习我用FBT实现,并且采用首次适应算法FF分配内存。
四、程序中所使用的符号说明和数据结构
struct FBT 自由块表结构体
{int startdress; 自由块表中一个表项的始地址
int size; 自由块表中的一个表项的大小
int processid; 这个表项所对应的进程号
int state; 这个表项的状态
struct FBT *next; 指向下一个自由块表结构体
};
struct FBT *create() 建立自由块表子函数
struct FBT *distribute(struct FBT *head) 分配内存空间子函数
struct FBT *callback(struct FBT *head) 回收内存空间子函数
回收内存有下列4种情况,在程序中用条件语句实现:
… 进程i 回收区 进程j … … 空闲区 回收区 进程j … … 进程i 回收区 空闲区 … … 空闲区 回收区 空闲区 …
void print(struct FBT *head) 显示自由块表内容子函数
void main() 主函数
五、流程图
链表初始化流程图 显示FBT流程图
分配内存子函数流程图
回收内存子函数流程图
六、程序清单
#include stdio.h
#includemalloc.h
struct FBT
{ int startdress; //分区首地址
int size; //分区所占内存大小
int processid;
//所申请内存分区的进程号,本来FBT中没有这一项,但是便于内存的回收我加了这一项
int state; //此分区的状态
struct FBT *next; //指针,指向下一个结点(分区)
};
struct FBT *create() //建立自由块表
{
struct FBT *head,*p,*q;
head=NULL;
p=(struct FBT *)malloc (sizeof(struct FBT));//申请一个新的结点,用来存放新的分区
q=(struct FBT *)malloc (sizeof(struct FBT));//申请一个新的结点,用来存放新的分区
head=p;
p-size =5; //系统分区,大小为5
p-processid =-1; //-1表示操作系统的固定分区
p-startdress =0; //开始地址为0
p-state =1; //状态为已分配,值为1
p-next =q; //指向下一个结点
q-size=123; //余下的分区大小为123
q-processid=0; //所对应的进程号为0,表示都未分配
q-startdress=5; //开始地址为5
q-state=0; //状态为未分配,值为0
q-next=NULL; //指向下一个分区,因为只有两个分区,所以为空
return head;
}
struct FBT *distribute(struct FBT *head) //分配内存子函数
{
int id,neededsize;
struct FBT *pretail,*tail,*p;
printf(please input the process id:); //输入要申请内存的进程号
scanf(%d,id);
printf(please input the needed size:); //输入要申请的内存大小
scanf(%d,neededsize);
pretail=tail=head;
while (tail!=NU
文档评论(0)