实验四-模拟操作系统内存管理_第1页
实验四-模拟操作系统内存管理_第2页
实验四-模拟操作系统内存管理_第3页
实验四-模拟操作系统内存管理_第4页
实验四-模拟操作系统内存管理_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验四模拟操作系统内存管理本程序可分配,撤消进程,动态显示内存占用情况.运行如图示:代码如下:importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;/*主程序类*/publicclassMemoryextendsJFrameimplementsActionListener{//实现接口JFrameset_frame,fr;JButtonjbutton1,jbutton2,jbutton3,jbutton4,jbutton5,jbutton6;//声明进程JLabeljLabel1,jLabel2,jLabel3,jLabel4,thread_label1,thread_label2,lab1;//声明内存使用情况JTextPanejTextPane1,jTextPane2,thread_text;staticJTablejTable;JProgressBarjProgressBar;JPanelpel;finalString[]table_title={"分区号","大小〔K〕","起址〔K〕","状态"};staticObject[][]table_data=newObject[15][4];staticintfree_size=1000,use_size=0,num=0,thread_num;//初始化内存空间大小为1000,已用空间大小为0staticbooleanfind_flag=true;staticthreads[]thread_arry=newthreads[15];staticmemory_class[]memory_arry=newmemory_class[15];publicMemory(){super("实验五:可变分区方式的存储器管理");setSize(620,450);setLayout(null);setLocation(240,180);setResizable(false);jLabel1=newJLabel("内存的使用情况列表:");add(jLabel1);jLabel1.setBounds(20,20,200,25);//创立横坐标为20,纵坐标为20,长为200,宽为25的矩形。jTable=newJTable(table_data,table_title);jTable.setRowHeight(20);intv=ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED;inth=ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED;JScrollPanescrollPane=newJScrollPane(jTable,v,h);JPanelcp=newJPanel();cp.setLayout(newBorderLayout());add(cp);cp.add(scrollPane,BorderLayout.CENTER);cp.setBounds(20,50,370,220);Stringstr1,str2;str1=0+"K";str2=1000+"K";jLabel2=newJLabel("已用的内存空间:");add(jLabel2);//将jLabel2加到集合中jLabel2.setBounds(440,20,200,25);//创立横坐标为440,纵坐标为20,长为200,宽为25的矩形。jTextPane1=newJTextPane();add(jTextPane1);jTextPane1.setBounds(440,55,100,30);jTextPane1.setEditable(false);jTextPane1.setText(str1);jLabel3=newJLabel("可用的内存空间:");add(jLabel3);jLabel3.setBounds(440,115,200,25);jTextPane2=newJTextPane();add(jTextPane2);jTextPane2.setBounds(440,150,100,30);jTextPane2.setEditable(false);jTextPane2.setText(str2);jLabel4=newJLabel("内存总的使用情况:");add(jLabel4);jLabel4.setBounds(440,210,200,25);jProgressBar=newJProgressBar();add(jProgressBar);jProgressBar.setBackground(Color.white);//设置背景图片,为白色jProgressBar.setMaximum(1000);//设置组件大小为1000jProgressBar.setStringPainted(true);//设置进度条,进度默认用百分比表示。jProgressBar.setBounds(440,245,150,20);jbutton1=newJButton("创建进程");add(jbutton1);jbutton1.addActionListener(this);//给jButton1添加一个事件侦听器,当jButton被按下的时候,所需要发生的事情定义在newPlusCaculator_btnCaculate_actionAdapter(this)里。jbutton1.setBounds(50,310,120,30);jbutton1.setCursor(newCursor(12));jbutton2=newJButton("撤消进程");add(jbutton2);jbutton2.addActionListener(this);jbutton2.setBounds(250,310,120,30);jbutton2.setCursor(newCursor(12));jbutton3=newJButton("退出程序");add(jbutton3);jbutton3.addActionListener(this);jbutton3.setBounds(440,310,120,30);jbutton3.setCursor(newCursor(12));setVisible(true);addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){System.exit(0);}});}publicvoidactionPerformed(ActionEvente){if(e.getSource()==jbutton1){if(free_size>0){add_thread();if(thread_arry[num-1].thread_size<=free_size){memory_class.find_free_memory();if(find_flag==true){set_table();jTable.repaint();free_size=0;use_size=0;set_text();jProgressBar.setValue(use_size);}elseif(find_flag==false){notice("find");}}else{num--;notice("free");//去掉多余}}else{notice("mem");}}elseif(e.getSource()==jbutton2){destroy_thread_frame();}elseif(e.getSource()==jbutton3){System.exit(0);}elseif(e.getSource()==jbutton4){thread_num=Integer.parseInt(thread_text.getText());destroy_thread();set_frame.setVisible(false);}elseif(e.getSource()==jbutton5){set_frame.setVisible(false);}elseif(e.getSource()==jbutton6){fr.setVisible(false);}}/*用于添加进程的方法*/publicvoidadd_thread(){thread_arry[num]=newthreads();memory_arry[num+1]=newmemory_class();num++;}/*设置文本框的值*/publicvoidset_text(){Stringstr1,str2;for(intj=0;j<num;j++){if(memory_arry[j].use_flag==true){use_size+=memory_arry[j].size;}}for(inti=0;i<=num;i++){if(memory_arry[i].use_flag==false){free_size+=memory_arry[i].size;}}str1=use_size+"K";str2=free_size+"K";jTextPane1.setText(str1);jTextPane2.setText(str2);}/*设置表格*/publicstaticvoidset_table(){for(intj=1;j<=num;j++){ints=0;for(intn=0;n<j;n++){s+=memory_arry[n].size;}memory_arry[j].start_address=s+1;}for(inti=0;i<=num;i++){table_data[i][0]=memory_arry[i].mem_num;table_data[i][1]=memory_arry[i].size;table_data[i][2]=memory_arry[i].start_address;if(Memory.memory_arry[i].use_flag==true){table_data[i][3]=memory_arry[i].thread_use+"号进程占用";}elseif(memory_arry[i].use_flag==false){table_data[i][3]="可用";}jTable.repaint();}}/*撤消进程的窗口*/publicvoiddestroy_thread_frame(){set_frame=newJFrame("撤消进程");set_frame.setSize(300,150);set_frame.setLayout(null);set_frame.setLocation(370,330);set_frame.setResizable(false);thread_label1=newJLabel("请输入想要撤消的进程编号:");set_frame.add(thread_label1);thread_label1.setBounds(20,20,180,25);thread_text=newJTextPane();set_frame.add(thread_text);thread_text.setBounds(200,20,30,20);thread_label2=newJLabel("号进程");set_frame.add(thread_label2);thread_label2.setBounds(230,20,150,25);jbutton4=newJButton("确定");set_frame.add(jbutton4);jbutton4.addActionListener(this);jbutton4.setBounds(50,70,80,30);jbutton4.setCursor(newCursor(12));jbutton5=newJButton("取消");set_frame.add(jbutton5);jbutton5.addActionListener(this);jbutton5.setBounds(160,70,80,30);jbutton5.setCursor(newCursor(12));set_frame.setVisible(true);}/*撤消进程的方法*/publicvoiddestroy_thread(){for(intn=0;n<=num;n++){if(memory_arry[n].thread_use==thread_num){if(memory_arry[n-1].use_flag==false){/*如果前面分区为空,与前面的分区合并*/memory_arry[n-1].size+=memory_arry[n].size;intna=n;for(intx=n;x<num;x++){memory_arry[x]=memory_arry[x+1];memory_arry[x].mem_num=na;na++;}table_data[num][0]="";jTable.repaint();}elseif(memory_arry[n+1].use_flag==false){/*如果后面分区为空,与后面的分区合并*/memory_arry[n].size+=memory_arry[n+1].size;intna=n+1;for(intx=n+1;x<num;x++){memory_arry[x]=memory_arry[x+1];memory_arry[x].mem_num=na;na++;}}elseif(memory_arry[n+1].use_flag==false&&memory_arry[n-1].use_flag==false){/*如果前后的分区都为空,与前后的分区合并*/memory_arry[n-1].size=memory_arry[n-1].size+memory_arry[n].size+memory_arry[n+1].size;intna=n;for(intx=n;x<num;x++){memory_arry[x]=memory_arry[x+2];memory_arry[x].mem_num=na;na++;}}else{memory_arry[n].use_flag=false;}}}Memory.set_table();}/*错误提示信息窗口*/publicvoidnotice(Stringsuccess){load_imageimage_notice;fr=newJFrame("注意");fr.setSize(530,150);fr.setLayout(null);fr.setLocation(260,280);fr.setResizable(false);if(success=="mem"){lab1=newJLabel("系统内存的容量已用完,请撒消某些进程!");fr.add(lab1);lab1.setBounds(130,35,400,25);}elseif(success=="free"){lab1=newJLabel("系统内存的容量缺乏,请撒消某些进程!");fr.add(lab1);lab1.setBounds(130,35,400,25);}elseif(success=="find"){lab1=newJLabel("找不到适宜的空闲分区,请撒消某些进程!");fr.add(lab1);lab1.setBounds(130,35,400,25);}image_notice=newload_image("false");pel=newJPanel();pel.setLayout(newBorderLayout());pel.add(image_notice,BorderLayout.CENTER);fr.add(pel);pel.setBounds(15,10,100,100);jbutton6=newJButton("确定");fr.add(jbutton6);jbutton6.setBounds(410,35,90,30);jbutton6.addActionListener(this);jbutton3.setCursor(newCursor(12));fr.setVisible(true);}publicstaticvoidmain(Stringargs[]){Memorymain_obj=newMemory();memory_arry[0]=newmemory_class();memory_arry[0].set_start();table_data[0][0]=""+0;table_data[0][1]=""+1000;table_data[0][2]=""+0;table_data[0][3]=""+"可用";}}/*------------------------------------------------------------------------------------*//*进程类*/classthreads{intthread_number,thread_size;booleanstate=false,run_flag=false;/*线程类的构造函数*/publicthreads(){this.thread_number=Memory.num;this.thread_size=(int)(Math.random()*400);}}/*用于加载图片的类*/classload_imageextendsCanvas{Toolkittool;Imagemyimage;publicload_image(Stringpicture){setSize(200,200);tool=getToolkit();myimage=tool.getImage("false.jpg");}publicvoidpaint(Graphicsg){g.drawImage(myimage,10,10,myimage.getWidth(this),myimage.getHeight(this),this);}}/*内存类*/classmemory_class{intmem_num;intsize,start_address,thread_use;publicbooleanuse_flag=false;memory_class(){this.mem_num=Memory.num;}publicvoidset_start(){this.size=1000;this.start_address=0;this.mem_num=0;}/*查找适合某进程的空闲分区*/publicstaticvoidfind_free_memory(){memory_classchange_obj=newmemory_class();for(inti=0;i<Memory.num;i++){if(Memory.memory_arry[i].size<Memory.thread_arry[Memory.num-1].thread_size&&Memory.memory_arry[i].use_flag==false){Memory.find_flag=false;}elseif(Memory.memory_arry[i].size==Memory.thread_arry[Memory.num-1].thread_size&&Memory.memory_arry[i].use_flag==false){Memory.memory_arry[i].use_flag=true;Memory.memory_arry[i].thread_use=Memory.thread_arry[Memory.num-1].thread_number;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论