操作系统内存可变分区管理实验报告

上传人:第*** 文档编号:56003375 上传时间:2018-10-08 格式:PDF 页数:12 大小:940.56KB
返回 下载 相关 举报
操作系统内存可变分区管理实验报告_第1页
第1页 / 共12页
操作系统内存可变分区管理实验报告_第2页
第2页 / 共12页
操作系统内存可变分区管理实验报告_第3页
第3页 / 共12页
操作系统内存可变分区管理实验报告_第4页
第4页 / 共12页
操作系统内存可变分区管理实验报告_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《操作系统内存可变分区管理实验报告》由会员分享,可在线阅读,更多相关《操作系统内存可变分区管理实验报告(12页珍藏版)》请在金锄头文库上搜索。

1、1? ?C?char *malloc(unsigned size)? size=1000? addr = (char *)fmalloc(unsigned size) ? ffree(unsigned size,char * addr)? ? addr = (char *)lmalloc(unsigned size) ? lfree(unsigned size,char * addr) ?UNIX? 2? ?1? ? ? ? ? ?2?,? ? ? ? ?3?AUTO?MANUAL? ? 3? #defi ne AUTO ? /#defi ne MANUAL /? #defi ne N 5 /

2、? #defi ne INPUT_FILE_PATH “/Users/LXC/Desktop/InPutFile.txt“ /? #defi ne OUTPUT_FILE_PATH “/Users/LXC/Desktop/OutPutFile.txt“ /? /* ? */ struct map unsigned m_size; char *m_addr; ; struct map coremapN; static struct map *loopBp = coremap? ? 4? / / main.c / MemoryManage / / Created by ? on 16/3/13.

3、/ Copyright 2016? ?. All rights reserved. / /* ?/?I/O? ? ? */ #include #include #defi ne AUTO /? /#defi ne MANUAL /? #defi ne N 5 #defi ne INPUT_FILE_PATH “/Users/LXC/Desktop/InPutFile.txt“ /? #defi ne OUTPUT_FILE_PATH “/Users/LXC/Desktop/OutPutFile.txt“ /* ? */ struct map unsigned m_size; char *m_a

4、ddr; ; struct map coremapN; static struct map *loopBp = coremap; /* ? */ char *lmalloc(unsigned size) /* ?mp?*/ register char *a; register struct map *bp; for (bp = loopBp; 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_

5、addr; while(bp-1)-m_size = bp-m_size); loopBp = bp; if(loopBp+1)-m_size != 0) +loopBp; else loopBp = coremap; return(a); 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 loopBp-m_addr = (

6、bp-1)-m_addr; (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 += size; loopBp = bp; loopBp-m_addr = bp-m_addr; else /* ?4 */ if (size) loopB

7、p = bp; loopBp-m_addr = a; 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 */ coremap0.m_addr = addr; coremap0.m_size = size; int i;

8、for(i = 1; i N; +i) coremapi.m_addr = NULL; coremapi.m_size = 0; /* ? */ void printcoremap(FILE *output) /* Function body: ?coremap?m_size?m_addr */ int i; for (i = 0; iN; +i) printf(“?:%4d ?:%pn“,coremapi.m_size, coremapi.m_addr); #ifdef AUTO fprintf(output,“?:%4d ?:%pn“,coremapi.m_size, coremapi.m

9、_addr); #endif FILE* openInputFile() FILE *fp = fopen(INPUT_FILE_PATH, “r“); if (fp = NULL) printf(“?“); exit(-1); return fp; FILE *openOutputFile() FILE *fp = fopen(OUTPUT_FILE_PATH, “w“); if (fp = NULL) printf(“?“); exit(-1); return fp; /* ? */ int main(int argc, const char * argv) /* ? */ /* ?mal

10、loc?1000 */ /* ?coremap? */ /* ? m size ? f size addr : ? p : ?coremap? q : ? default: continue */ /* ?free?malloc? */ #ifdef MANUAL void *memory = malloc(1000); initcoremap(memory, 1000); char command; int size; int addr; do printf(“?:“); char c; scanf(“%c“, while (c=getchar()!=n switch (command) c

11、ase m: printf(“?:“); scanf(“%d“, while (c=getchar()!=n lmalloc(size); break; case f: printf(“?:“); scanf(“%d“, while (c=getchar()!=n printf(“?:“); scanf(“%d“, while (c=getchar()!=n lfree(size, memory+addr); break; case p: printcoremap(); break; case q: exit(0); break; default: break; while (command=

12、m|command=f|command=p|command=q)|printf(“? ?n“); #endif #ifdef AUTO FILE *input = openInputFile(); FILE *output = openOutputFile(); void *memory = malloc(1000); initcoremap(memory, 1000); char command; int size; int addr; fscanf(input, “%c,%d,%dn“, do printf(“?:%cn“,command); fprintf(output, “?:%cn“,command); switch (command) case m: printf(“?:%dn“,size); fprintf(output, “?:%dn“,size); lmalloc(size); break; case f: printf(“?:%dn“,size); fprintf(output, “?:%dn“,size); printf(“?:%dn“,addr); fprintf(output, “?:%dn“,addr); lfree(size, me

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号