logo资料库

操作系统实验一 可变分区存储管理.docx

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
操作系统:实验一 可变分区存储管理 /* 如不会使用文件输入/输出,也不会使用 I/O 转向做输入和输出结果文件, 可以手再抄输出结果后后再输到文件中,实验报告的文字内容由自己掌握, 能多能少。 */ #include #include /* 表的定义 */ #define N 5 struct map { unsigned m_size; char *m_addr; }; struct map coremap[N]; /* 首次适应的分配函数 */ 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_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; if (a+size == bp->m_addr) { /* 情况 1 */ /* 情况 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 if (size) do { /* 情况 4 */ 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 申请到的内存释放 */ */ }
分享到:
收藏