1、BX121028俞佳星实验5 分区式存储管理电子信息学院实验报告书课程名:操作系统原理实验 题 目: 实验5 分区式存储管理 实验类别: 【设计】 班 级: BX1210 学 号: 121003531028 姓 名: 俞佳星 一、 实验内容设计程序模拟内存的动态分区法存储管理。内存空闲区使用自由链管理,采用最坏适应算法从自由链中寻找空闲区进行分配,内存回收时假定不做与相邻空闲区的合并。假定系统的内存共640K,初始状态为操作系统本身占用64K。在t1时间之后,有作业A、B、C、D分别请求8K、16K、64K、124K的内存空间;在t2时间之后,作业C完成;在t3时间之后,作业E请求50K的内存
2、空间;在t4时间之后,作业D完成。要求编程序分别输出t1、t2、t3、t4时刻内存的空闲区的状态。二、 实验目的与要求过本次实验,加深对内存管理的认识,进一步掌握内存的分配、回收算法的思想。三、 实验环境Red Hat Linux 9;用户名:root,密码:123456四、 实验步骤1. 程序中自由链队列的结点类型可描述如下: struct freelinkint len, address; /* len为分区长度;address为分区起始地址struct freelink /* next; 内存占用区用链表描述,其结点类型描述如下: struct busylinkchar name; /*
3、 作业或进程名 name=S 表示OS占用int len , address;struct busylink *next; 并设全程量:struct freelink *free_head=NULL; / 自由链队列(带头结点)队首指针 struct busylink *busy_head=NULL, / 占用区队列队(带头结点)首指针 *busy_tail=NULL; / 占用区队列队尾指针2. 设计子函数: void start(void); /* 设置系统初始状态*/ struct freelink * p; struct busylink *q; free_head=(struct f
4、reelink*)malloc(sizeof(struct freelink); free_head-next=NULL; / 创建自由链头结点busy_head=busy_tail=(struct busylink*)malloc(sizeof(struct busylink); busy_head-next=NULL; / 创建占用链头结点 p=( struct freelink *)malloc(sizeof(struct freelink); p-address=64; p-len=640-64; (OS占用了64K) p-next=NULL; free_head-next=p; q=
5、( struct busylink *)malloc(sizeof(struct busylink); q-name=S; /* S表示操作系统占用 */ q-len=64; q-address=0; q-next=NULL; busy_head-next=q; busy_tail=q; void requireMemo(char name, int require); /*模拟内存分配*/ void freeMemo(char name); /* 模拟内存回收*/ void past(int time); /* 模拟系统过了time 时间*/ void printlink(); /* 输出内
6、存空闲情况(自由链的结点) */ 3、设计主函数:main() start(); past(t1); requireMemo(A,8); requireMemo(B,16); requireMemo(C,64); requireMemo(D,124); printlink(); past(t2); freeMemo(C); printlink(); past(t3); requireMemo(E,50); printlink(); freeMemo(D ); printlink();4、主要函数设计及流程图主要函数: 初始化 worstFit() 即worstFit类的构造函数 模拟内存分配
7、void requireMemo(char name,int require) 模拟内存回收 void freeMemo(char name) 空闲分区排序 void order() 模拟系统时间 void past(int time) 输出内存空闲情况 void freePrint() 输出内存占用情况 void busyPrint()模拟内存分配函数流程图:模拟内存分配函数流程图:5、源程序package com.johnson;import java.util.LinkedList;public class sy5 public static void main(String args)
8、 /主函数 worstFit wf=new worstFit(); wf.past(5); wf.requireMemo(A, 8); wf.requireMemo(B, 16); wf.requireMemo(C, 64); wf.requireMemo(D, 124); wf.busyPrint(); wf.freePrint(); wf.past(10); wf.freeMemo(C); wf.busyPrint(); wf.freePrint(); wf.past(15); wf.requireMemo(E, 50); wf.busyPrint(); wf.freePrint(); w
9、f.past(20); wf.freeMemo(D); wf.busyPrint(); wf.freePrint(); /最坏适应算法class worstFit LinkedList freelink=null; /空闲分区链表 LinkedList busylink=null; /内存占用链表 / 系统初始化 worstFit() freelink =new LinkedList(); busylink=new LinkedList(); freeSpace fFirst=new freeSpace(640-64,64); busySpace bFirst=new busySpace(S,
10、64,0); freelink.add(fFirst); busylink.add(bFirst); System.out.println(初始化完成。); /模拟内存分配 void requireMemo(char name,int require) if(freelink.size()0) /判断是否有空闲分区 if(freelink.get(0).getLen()=require) /判断第一个空闲分区是否足够 int oLen=freelink.get(0).getLen(); /原空闲分区大小 int oAddress=freelink.get(0).getAddress(); /原
11、空闲分区地址 freelink.get(0).setLen(oLen-require); /修改原空闲分区大小 freelink.get(0).setAddress(oAddress+require); /修改原空闲分区地址 busySpace bx=new busySpace(name,require,oAddress); /新建内存占用空间 busylink.add(bx); /添加到内存占用链表 order(); /对空闲链表重新排序 /空闲链表_重新排序(从大到小_冒泡法) void order() for(int i=0;ifreelink.size();i+) for(int j=
12、0;jfreelink.size()-i;j+) if(freelink.get(i).getLen()freelink.get(j).getLen() freeSpace fsx=freelink.get(i); freelink.set(i, freelink.get(j); freelink.set(j, fsx); /模拟内存回收 void freeMemo(char name) for(int i=0;i0) for(int i=0;i0) for(int i=0;ibusylink.size();i+) System.out.println(名称:+busylink.get(i).
13、getName()+t首地址:+busylink.get(i).getAddress()+t长度:+busylink.get(i).getLen(); else System.out.println(无内存占用区!); /空闲分区class freeSpace int len; int address; public freeSpace(int len, int address) this.len = len; this.address = address; public int getLen() return len; public void setLen(int len) this.len
14、 = len; public int getAddress() return address; public void setAddress(int address) this.address = address; /使用中的分区class busySpace char name; /作业或进程名 name=S 表示OS占用 int len,address; public busySpace(char name, int len, int address) this.name = name; this.len = len; this.address = address; public char
15、 getName() return name; public void setName(char name) this.name = name; public int getLen() return len; public void setLen(int len) this.len = len; public int getAddress() return address; public void setAddress(int address) this.address = address; 五、 结果分析与实验体会在本次实验中我们自己设计程序来模拟内存的动态分区法存储管理。内存空闲区使用自由链管理,我们采用最坏适应算法从自由链中寻找空闲区进行分配。通过本次实验的实际操作,我们对内存的管理,以及最坏适应算法有了更深的了解。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1