操作系统实验一可变分区存储管理.doc_第1页
操作系统实验一可变分区存储管理.doc_第2页
操作系统实验一可变分区存储管理.doc_第3页
操作系统实验一可变分区存储管理.doc_第4页
操作系统实验一可变分区存储管理.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

操作系统:实验一 可变分区存储管理/* 如不会使用文件输入/输出,也不会使用I/O转向做输入和输出结果文件, 可以手再抄输出结果后后再输到文件中,实验报告的文字内容由自己掌握, 能多能少。*/#include #include /* 表的定义 */#define N 5struct map unsigned m_size; char *m_addr;struct map coremapN;/* 首次适应的分配函数 */char *fmalloc(unsigned size) register char *a; register struct map *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(unsigned size, char *aa) struct map *bp; char *a, *t; unsigned tt; a = aa; for (bp=coremap; bp-m_addrm_size!=0; bp+); if (bpcoremap & (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_addr; (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表的初始化程序 */void initcoremap(char *addr, unsigned size) /* 初始化coremap数组,使其 第一项的m_addr指向用malloc申请到的addr, 第一项的m_size等于malloc申请的size, 其他各项清0 */* 输出表的内容 */void printcoremap() /* Function body: 打印coremap表中各项的m_size和m_addr */* 主程序的框架 */main() /* 定义变量 */ /* 用malloc向系统申请内存,如1000 */ /* 初始化coremap数组 */ /* 命令处理部分,如 m size :分配内存 f size addr : 回收内存 p : 打印coremap表 q : 退出 default: continue */ /* 调用free将用malloc申请到的内存释放 */操作系统:实验一 可变分区存储管理(答案)可变分区存储管理结构数组的形式: struct map unsigned m_size; /空间大小char * m_addr; /起始地址;struct map coremapN;源程序和执行结果。 #include #include struct mapunsigned m_size;char *m_addr;struct map coremap1000;struct map *pp;void print_map();void main();char *lmalloc(struct map *mp, unsigned size);void lfree(unsigned size, char *aa);struct map coremap1000;struct map *pp; char* lmalloc(struct map *mp, unsigned size) (register int a;register struct map *bp;int paddr=pp-m_addr; bp=pp; if (mp-m_size=0)return(0);if (!bp-m_size)bp=mp;doif (bp-m_size = size)a=bp-m_addr;bp-m_addr+=size;pp=bp;if (bp-m_size-=size) = 0)dobp+;(bp-1)-m_addr=bp-m_addr;while(bp-1)-m_size=bp-m_size);return (a);bp+;if (!bp-m_size)bp=coremap;while(bp-m_addr !=paddr); return (0);void lfree(unsigned size, char *aa) /释放空间并注意当前指针位置struct map *bp;char *a,*t;unsigned tt;a=aa;for (bp=coremap; bp-m_addrm_size!=0; bp+);if (bpcoremap&(bp-1)-m_addr+(bp-1)-m_size=a)(bp-1)-m_size+=size;if (a+size=bp-m_addr)if (pp=bp)pp=(bp-1);(bp-1)-m_size+=bp-m_size;while(bp-m_size)bp+;(bp-1)-m_addr=bp-m_addr;(bp-1)-m_size=bp-m_size;elseif (a+size=bp-m_addr&bp-m_size)bp-m_addr-=size;bp-m_size+=size;elseif (size)dot=bp-m_addr;bp-m_addr=a;a=t;tt=bp-m_size;bp-m_size=size;bp+;while(size=tt);void print_map() /显示int n;if (coremap0.m_size=0)printf(The memory has been run out!);for (n=0; coremapn.m_addr!=NULL; n+)printf(%dth Addr is %d,Size is %dn,n,coremapn.m_addr,coremapn.m_size);void main()char ch;int a,b,c;coremap0.m_size=1000;coremap0.m_addr=500;pp=coremap;while(1)print_map();doch=getchar();while(ch=n|ch=t|ch= );switch(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论