资源描述
实验四主存储器空间的分配和回收038064132 网络工程林剑锋一、实验内容主存储器空间的分配和回收。二、实验目的一个好的计算机系统不仅要有一个足够容量的、存取速度高的、稳定可靠的主存储器,而且要能合理地分配和使用这些存储空间。 当用户提出申请存储器空间时,存储管理必须根据申请者的要求, 按一定的策略分析主存空间的使用情况,找出足够的空闲区域分配给申请者。 当作业撤离或主动归还主存资源时, 则存储管理要收回作业占用的主存空间或归还部分主存空间。 主存的分配和回收的实现虽与主存储器的管理方式有关的, 通过本实习帮助学生理解在不同的存储管理方式下应怎样实现主存空间的分配和回收。三、实验题目在分页式管理方式下采用位示图来表示主存分配情况, 实现主存空间的分配和回收。(1) 分页式存储器把主存分成大小相等的若干块, 作业的信息也按块的大小分页,作业装入主存时可把作业的信息按页分散存放在主存的空闲块中, 为了说明主存中哪些块已经被占用, 哪些块是尚未分配的空闲块, 可用一张位示图来指出。位示图可由若干存储单元来构成,其中每一位与一个物理块对应,用 0/1 表示对应块为空闲 / 已占用。(2) 假设某系统的主存被分成大小相等的 64块,则位示图可用 8个字节来构成,另用一单元记录当前空闲块数。如果已有第 0,1,4,5,6,9,11,13,24,31,共 10个主存块被占用了,那么位示图情况如下:字节位数01234567号011001110101010100200000000310000001400000000500000000600000000700000000(3) 当要装入一个作业时,根据作业对主存的需要量,先查当前空闲块数是否能满足作业要求,若不能满足则输出分配不成功。若能满足,则查位示图,找出为 “0”的一些位,置上占用标志 “1”,从 “当前空闲块数 ”中减去本次占用块数。按找到的计算出对应的块号,其计算公式为:块号 = j8+i其中, j 表示找到的是第 n个字节, I 表示对应的是第 n位。根据分配给作业的块号,为作业建立一张页表,页表格式:页号块号012(4) 当一个作业执行结束,归还主存时,根据该作业的页表可以知道应归还的块号,由块号可计算出在位示图中的对应位置, 把对应位的占用标志清成 0 ,表示对应的块已成为空闲块。 归还的块数加入到当前空闲块数中。 由块号计算在位示图中的位置的公式如下:字节号 j= 块号 /8( 表示取整)位数i=块号 /8( 表示取余)(5) 设计实现主存分配和回收的程序。假定位示图的初始状态如( 2)所述,现有一信息量为 5页的作业要装入,运行你所设计的分配程序,为作业分配主存且建立页表(格式如( 3)所述)。然后假定有另一作业执行结束,它占用的块号为第 4,5,6和31块,运行你所设计的回收程序,收回作业归还的主存块。要求能显示和打印分配或回收前后的位示图和当前空闲块数, 对完成一次分配后还要显示或打印为作业建立的页表。四、程序清单()/* 主存储器的空间分配和回收* author (038064132 ,网络工程,林剑锋 )*/class Node /定义节点int page=new int100; /int pages;定义页面public class OSint os=new int88;int rom=64;LinkedList opp=new LinkedList();public OS()/初始化内存os00=0;os01=0;os02=0;os03=0;os04=0;os05=0;os 06=0;os07=0;os10=0;os11=0;os12=0;os13=0;os14=0;os15=0;os 16=0;os17=0;os20=0;os21=0;os22=0;os23=0;os24=0;os25=0;os 26=0;os27=0;os30=0;os31=0;os32=0;os33=0;os34=0;os35=0;os 36=0;os37=0;os40=0;os41=0;os42=0;os43=0;os44=0;os45=0;os 46=0;os47=0;os50=0;os51=0;os52=0;os53=0;os54=0;os55=0;os 56=0;os57=0;os60=0;os61=0;os62=0;os63=0;os64=0;os65=0;os 66=0;os67=0;os70=0;os71=0;os72=0;os73=0;os74=0;os75=0;os76=0;os77=0;/*public void showstate()/显示内存状态int i,j;for(i=0;i=7;i+)内存状态 :);for(j=0;jrom)return 0;内存不足 , 不能装入 !);else装入 +r+个页面的作业);rom=rom-r;node.pages=r;for(i=0;i=7;i+)for(j=0;j=7;j+)if(osij=0)&(r!=0)osij=1;r-;node.pagek=i*8+j;k+;/showstate();opp.add(node);showWork(node);return 0;/* *public void showWork(Node node)/显示作业页表int i=0;while(inode.pages)页号+i+存放在块 :+node.pagei); i+;/*public void delete(Node node)/撤除作业释放内存int i,j;int k;一 4页面作业运行结束 .);页表如下 :);showWork(node);释放该作业所占内存 .); for(k=0;knode.pages;k+)i=(node.pagek)/8;j=(node.pagek)%8;osij=0;rom=rom+node.pages;/showstate();/* int read()int n=0;try/DataInputStream n=new DataInputStream(n);catch(IOException e)错误 );return n;*/*/ 程序入口public static void main(String args )int n=0;char x=y;OS os1=new OS();BufferedReader input=new BufferedReader(new InputStreamReader(System.in);String inputString;L:while(x=y)|(x=Y)请选择操作 :);显示当前内存状态 );装入作业 );结束作业 );结束程序 );tryinputString=input.readLine();n=Integer.parseInt(inputString);catch(IOException e)if(n=1)os1.showstate();任务执行完毕 );/continue l1;if(n=2)int y=(int)(Math.random()*9)+1);Node os=new Node();os1.inrom(y,os);任务执行完毕 );if(n=3)if(len=0)目前没有作业运行 .);continue L;int z=0;当前运行作业数 :+len);请选择要结束的作业 :);tryinputString=input.readLine();z=Integer.parseInt(inputString);catch(IOException e)os1.delete(dp);任务执行完毕 );if(n=4)break;是否要继续运行程序(Y/N):);tryinputString=input.readLine();x=inputString.charAt(0);catch(IOException e);程序执行完毕 );五、运行程序1、运行程序2、显示内存状态3、装入随机页面作业4、内存不足,作业装入失败5、结束指定作业,释放其所占内存空间
展开阅读全文