欢迎来到天天文库
浏览记录
ID:1665662
大小:45.50 KB
页数:7页
时间:2017-11-12
《操作系统实验一可变分区存储管理》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、操作系统:实验一可变分区存储管理/*如不会使用文件输入/输出,也不会使用I/O转向做输入和输出结果文件,可以手再抄输出结果后后再输到文件中,实验报告的文字内容由自己掌握,能多能少。*/#include#include/*表的定义*/#defineN5structmap{unsignedm_size;char*m_addr;};structmapcoremap[N];/*首次适应的分配函数*/char*fmalloc(unsignedsize){registerchar*a;register
2、structmap*bp;for(bp=coremap;bp->m_size;bp++){if(bp->m_size>=size){a=bp->m_addr;bp->m_addr+=size;if((bp->m_size-=size)==0)do{bp++;(bp-1)->m_addr=bp->m_addr;}while((bp-1)->m_size=bp->m_size);return(a);}}return(0);}/*首次适应的释放函数*/ffree(unsignedsize,char*aa){structmap*bp;
3、char*a,*t;unsignedtt;a=aa;for(bp=coremap;bp->m_addr<=a&&bp->m_size!=0;bp++);if(bp>coremap&&(bp-1)->m_addr+(bp-1)->m_size==a){/*情况1,2*/(bp-1)->m_size+=size;/*情况1*/if(a+size==bp->m_addr){/*情况2*/(bp-1)->m_size+=bp->m_size;while(bp->m_size){bp++;(bp-1)->m_addr=bp->m_add
4、r;(bp-1)->m_size=bp->m_size;}}}else{if(a+size==bp->m_addr&&bp->m_size){/*情况3*/bp->m_addr-=size;bp->m_size+=size;}else/*情况4*/if(size)do{t=bp->m_addr;bp->m_addr=a;a=t;tt=bp->m_size;bp->m_size=size;bp++;}while(size=tt);}}/*coremap表的初始化程序*/voidinitcoremap(char*addr,unsi
5、gnedsize){/*初始化coremap数组,使其第一项的m_addr指向用malloc申请到的addr,第一项的m_size等于malloc申请的size,其他各项清0*/}/*输出表的内容*/voidprintcoremap(){/*Functionbody:打印coremap表中各项的m_size和m_addr*/}/*主程序的框架*/main(){/*定义变量*//*用malloc向系统申请内存,如1000*//*初始化coremap数组*//*命令处理部分,如msize:分配内存fsizeaddr:回收内存p:打
6、印coremap表q:退出default:continue*//*调用free将用malloc申请到的内存释放*/}操作系统:实验一可变分区存储管理(答案)可变分区存储管理结构数组的形式:structmap{unsignedm_size;//空间大小char*m_addr;//起始地址};structmapcoremap[N];源程序和执行结果。#include#includestructmap{unsignedm_size;char*m_addr;};structmapcoremap[10
7、00];structmap*pp;voidprint_map();voidmain();char*lmalloc(structmap*mp,unsignedsize);voidlfree(unsignedsize,char*aa);structmapcoremap[1000];structmap*pp;char*lmalloc(structmap*mp,unsignedsize)(registerinta;registerstructmap*bp;intpaddr=pp->m_addr;bp=pp;if(mp->m_size=
8、=0)return(0);if(!bp->m_size)bp=mp;do{if(bp->m_size>=size){a=bp->m_addr;bp->m_addr+=size;pp=bp;if((bp->m_size-=size)==0)do{bp++;(bp-1)->m_a
此文档下载收益归作者所有