文档详情

操作系统实验_动态分区存储管理方式的主存分配回收.doc

发布:2017-08-29约4.3千字共7页下载文档
文本预览下载声明
?操作系统实验_动态分区存储管理方式的主存分配回收 //////////////////////////////////////////////////////////// // 功能: //?? 《计算机操作系统》实验 //?? 首次适应性算法 //?? 摸拟 动态分区 存储管理方式的主存 分配 和 回收 // 时间: //?? 2005-11-14 //////////////////////////////////////////////////////////// ? #include iostream.h #include iomanip.h #define ERR_NOFREEAREA 1 #define ERR_NOADEQUACYAREA 2 #define ERR_ALLOCATED 4 #define ERR_NOJOBS 1 #define ERR_NOSUCHJOB 2 #define ERR_RECLAIMED 4 typedef struct tagUsedNode { ?long address; ?long length; ?int flag;?//作业名 ?struct tagUsedNode *next; } USED_AREA , *USED_TABLE; typedef struct tagFreeNode { ?long address; ?long length; ?struct tagFreeNode *next; } FREE_AREA , *FREE_TABLE; //空闲区、作业区链表 USED_TABLE usedTable = NULL; FREE_TABLE freeTable = NULL; //给作业分配空间 //jobname: 作业名 //jobsize: 作业所需空间大小 int Allocate( int jobname , long jobsize ) { ?//如果没有空闲区 ?if( freeTable == NULL ) ??return ERR_NOFREEAREA; ?FREE_TABLE p = freeTable; ?FREE_TABLE q = p; ?//找首次适应空闲区 ?while( p != NULL p-length jobsize ) ?{ ??q = p; ??p = p-next; ?} ?//如果找不到有足够空间的分区 ?if( p == NULL ) ??return ERR_NOADEQUACYAREA; ?USED_TABLE x = new USED_AREA; ?x-address = p-address; ?x-length = jobsize; ?x-flag = jobname; ?x-next = NULL; ?//如果该分区大于作业需求,空间大小减去作业大小 ?if( p-length jobsize ) ?{ ??p-length -= jobsize; ??p-address += jobsize; ?} ?//如果该分区等于作业大小,删除该分区 ?else ?{ ??if( p == freeTable ) ???freeTable = NULL; ??else ???q-next = p-next; ??delete p; ?} ?//作业加入“作业表”中 ?USED_TABLE r = usedTable; ?USED_TABLE t = r; ?while( r != NULL r-address x-address ) ?{ ??t = r; ??r = r-next; ?} ? ?if( usedTable == NULL ) ??usedTable = x; ?else ?{ ??x-next = r; ??t-next = x; ?} ?return ERR_ALLOCATED; } //回收作业空间 //jobname: 作业名 int Reclaim( int jobname ) { ?if( usedTable == NULL ) ??return ERR_NOJOBS; ?USED_TABLE p = usedTable; ?USED_TABLE q = p; ?while( p != NULL p-flag != jobname ) ?{ ??q = p; ??p = p-next; ?} ?//如果没有该作业 ?if( p == NULL ) ??return ERR_NOSUCHJOB; ?//回收后的空间加入到空闲区 ?FREE_TABLE r = freeTable; ?FREE_TABLE t = r; ?FREE_TABLE x; ?whil
显示全部
相似文档