您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 操作系统实验 内存管理
第1页共13页操作系统实验报告计算机学院(院、系)网络工程专业082班组课学号20姓名区德智实验日期教师评定实验四内存管理一、实验目的通过实验使学生了解可变式分区管理使用的主要数据结构,分配、回收的主要技术,了解最优分配、最坏分配、最先分配等分配算法。基本能达到下列具体的目标:1、掌握初步进程在内存中的映像所需要的内存需求。2、内存的最先分配算法首先实现,再逐步完成最优和最坏的分配算法。二、实验内容1、在进程管理的基础上实现内存分配。2、运用java实现整体的布局与分配内存时的动态图画显示。第2页共13页三、实验步骤1.构建一个Process的对象类,每分配一次内存就实例化一个对象。这对象包含分配内存的名字,内存大小(byte),绘画的起点像素,绘画的终点像素。主要代码:publicclassProcess{privateStringname;privateintsize;privateintbeginPx;privateintendPx;publicintgetBeginPx(){returnbeginPx;}publicvoidsetBeginPx(intbeginPx){this.beginPx=beginPx;}publicintgetEndPx(){returnendPx;}publicvoidsetEndPx(intendPx){this.endPx=endPx;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicintgetSize(){returnsize;}publicvoidsetSize(intsize){this.size=size;}}第3页共13页2.根据用户输入而分配内存的大小,若输入的大小大于目前可分配内存的大小则拒绝分配操作,否则增加一个新进程入链表中,并在已分配表中增加进程的名字,更新剩余内存大小。分配内存流程图:开始输入分配内存的大小小于目前可分配最大内存?是更新剩余内存,在已分配内存表中中增加该进程名字,已分配链表中增加一对象输入本次进程名字根据分配的大小画图结束否是第4页共13页绘画paint()方法的主要代码:publicvoidpaint(Graphicsg){super.paint(g);//刷新页面Colorc=g.getColor();g.setColor(Color.WHITE);g.fillRect(20,400,450,50);//若已有分配内存if(myList.size()!=0){g.setColor(Color.BLACK);//从已分配的内存中循环获取像素起点位置和像素的大小for(inti=0;imyList.size();i++){g.fillRect(myList.get(i).getBeginPx(),400,myList.get(i).getEndPx()-myList.get(i).getBeginPx(),50);g.setColor(c);}}}显示已分配进程名字的showListName()方法主要代码:publicvoidshowListName(ArrayListProcessmyList){ProcessnewProcess=null;showList.removeAll();for(inti=0;imyList.size();i++){newProcess=myList.get(i);showList.add(newProcess.getName());}}分配内存的监视器主要代码:publicclassAssignMemoryListenerimplementsActionListener{publicvoidactionPerformed(ActionEvente){第5页共13页//当输入分配内存大小不完整时提示if((mbField.getText().equals())||(kbField.getText().equals())||(byteField.getText().equals())){JOptionPane.showMessageDialog(null,请完整输入所需分配内存的大小,警告对话框,JOptionPane.WARNING_MESSAGE);}else{//当内存不足时if(Integer.parseInt(mbField.getText())*1024*1024+Integer.parseInt(kbField.getText())*1024+Integer.parseInt(byteField.getText())(m*1024*1024+k*1024+b)){JOptionPane.showMessageDialog(null,所剩内存不足,警告对话框,JOptionPane.WARNING_MESSAGE);}else{Stringname=JOptionPane.showInputDialog(null,输入进程名字,输入对话框,JOptionPane.PLAIN_MESSAGE);//获得分配内存名字ProcessnewProcess=newProcess();newProcess.setName(name);newProcess.setSize(Integer.parseInt(mbField.getText())*1024*1024+Integer.parseInt(kbField.getText())*1024+Integer.parseInt(byteField.getText()));size=newProcess.getSize();fsize=size;//把size转成float类型计算,小数计算必须要化成整形第6页共13页px=(int)(450/p*fsize);//获得像素的长度newProcess.setBeginPx(index);newProcess.setEndPx(index+px);index=index+px;myList.add(newProcess);//把进程添加到链表中//绘图repaint();showListName(myList);//显示所用进程的名字//三个输入框清空mbField.setText();kbField.setText();byteField.setText();//更改剩余内存值intleftSize=(m*1024*1024+k*1024+b)-size;m=leftSize/(1024*1024);k=leftSize/1024%1024;b=leftSize%1024;notice2.setText(可分配最大内存:+m+MB+k+KB+b+Byte);}}}}输入要分配的内存大小:第7页共13页图1分配内存输入名字:图2输入名字分配两个内存:第8页共13页图3分配两个内存第9页共13页3.用户选择已分配的内存名字而回收相应的内存模块:回收流程图:开始选择要回收的内存名字根据选择回收的序列号在已分配链表中移除带对象更新剩余可分配内存大小在已分配内存表中移除改进程名字重新绘图结束第10页共13页回收内存主要代码:publicclassCollectMemoryListenerimplementsActionListener{publicvoidactionPerformed(ActionEventarg0){intnum=showList.getSelectedIndex();//获得被选中的序号//更新剩余内存值intreleaseSize=myList.get(num).getSize();m=m+releaseSize/(1024*1024);k=k+releaseSize/1024%1024;b=b+releaseSize%1024;notice2.setText(可分配最大内存:+m+MB+k+KB+b+Byte);//从链表中删去该进程myList.remove(num);showListName(myList);repaint();}}第11页共13页回收第一个内存后,绘图更新,剩余内存更新:图4回收第一个已分配的内存重新整合内存主要代码:publicclassRefreshMemoryListenerimplementsActionListener{publicvoidactionPerformed(ActionEvente){if(myList.size()!=0){index=20;for(inti=0;imyList.size();i++){size=myList.get(i).getSize();fsize=size;//把size转成float类型计算px=(int)(450/p*fsize);//获得像素的长度myList.get(i).setBeginPx(index);第12页共13页myList.get(i).setEndPx(index+px);index=index+px;}repaint();}}}图5重新整合内存四、实验总结通过本次实验,加深了对内存管理的理解。并掌握了单链表应用的重要方法。运用java的GUI为客户端整体布局,并且运用paint()方法来表示内存分配的状态。一个已分配的内存表示一个对象,所有对象都存放在链表中,当回收内存时则把改对象在链表中移除。每次绘图都是根据链表中存在的对象而绘画。由于对象中存放有起点的像素和终点的像素,因而实现起来简单。第13页共13页
本文标题:操作系统实验 内存管理
链接地址:https://www.777doc.com/doc-4257059 .html