- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
可变分区存储管理实验报告
沈 阳 工 程 学 院学 生 实 验 报 告实验室名称:信息工程系信息安全实验室实验课程名称:操作系统实验项目名称: 可变分区存储管理班 级:计专本121姓 名:郑永凯 学 号:2012461127实验日期:2013年5 月 27日 实验台编号:F608指导教师:张楠 批阅教师(签字): 成绩:【实验目的】 通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解。【实验内容】设计一个可变式分区分配的存储管理方案。并模拟实现分区的分配和回收过程。 对分区的管理法可以采用下面三种算法之一: 1、首次适应算法;2、循环首次适应算法;3、最佳适应算法;必须建立空闲区表和占用区表,回收算法考虑四种情况。【实验要求】1)上机前认真复习可变式分区分配算法,熟悉存储器分配和回收过程;2)上机时独立编程、调试程序;3)根据具体实验要求,完成好实验报告(包括实验的目的、内容、要求、源程序、实例运行结果截图)。#includestdio.h#includestdlib.h#define NULL 0#define getjcb(type) (type*)malloc(sizeof(type))#define getsub(type) (type*)malloc(sizeof(type))int num,num2; //要调度的作业数和要回收的区域数int m=0; //已分配作业数int flag; //分配成功标志int isup,isdown; //回收区域存在上邻和下邻的标志int is=0;struct jcb{char name[10];char state;int ntime; //所需时间int size; //所需空间大小int addr; //所分配分区的首地址struct jcb *link;} *ready =NULL, *p,*q,*as=NULL;//作业队列ready,已分配作业队列astypedef struct jcb JCB;struct subarea{ //分区块 char name[10]; int addr; //分区首地址int size; //分区大小char state;struct subarea *link; } *sub=NULL,*r,*s,*cur; //空闲分区队列sub,当前分区指针cur typedef struct subarea SUB;void sort() /* 建立对作业按到达时间进行排列的函数,直接插在队列之尾*/{ JCB *first; if(ready==NULL) ready=p; else{ first=ready; while(first-link!=NULL) first=first-link; first-link=p; p-link=NULL; }}void sort3() /*建立对已分配作业队列的排列函数,直接插在队列之尾*/{ JCB *fir; if(as==NULL) as=q; else{ fir=as; while(fir-link!=NULL) fir=fir-link; fir-link=q; q-link=NULL; } m++;}void input() /* 建立作业控制块函数*/{ int i; printf(\n请输入要调度的总作业数:); scanf(%d,num); for(i=0;inum;i++) { printf(\n作业号No.%d:\n,i); p=getjcb(JCB); printf(\n输入作业名:); scanf(%s,p-name); printf(\n输入作业的大小:); scanf(%d,p-size); printf(\n输入作业所需运行时间:); scanf(%d,p-ntime); p-state=w; p-link=NULL; sort(); /* 调用sort函数*/ } printf(\n 按任一键继续......\n); getch();}void input2() /*建立要回收区域的函数*/{ JCB *k; int has; q=getjcb(JCB); printf(\n输入区域名(作业名):); scanf(%s,q-name); p=as; while(p!=NULL) {if(strcmp(p-name,q-name)==0) /*在已分配作业队列中寻找*/ { q-addr=p-addr; q-size=p-size; has=1; /*输入作业名存在标志位*/ if(p==as) as=p-link; /*在已分配作业队列中删除该作业*/ else {k=as; while
文档评论(0)