网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > Java精品代码 > 正文

Java模拟操作系统中动态分区

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务

        下面的代码模拟的是操作系统动态分区的过程。这里简单的介绍一下动态分区,在pc中有一定大小的内存,开始的时候这些内存都没有使用。我们可以在这个内存上去分配内存给对应的进程,这里的进程名字和进程的所需要的内存大小是我们自己输入的。我们模拟的是在内存的开始寻找能够分配给该进程的空闲区域分配给该进程,如果分配给该进程后剩余的内存小于4,那么就不在分片,而是将这个整个空闲内存,全部分配给该进程。

        有分配内存,就对应的有回收内存。在某个进程运行结束之后,我们需要回收它的内存,以便后面的进程分配的时候使用。回收的时候需要注意,如果前面或者后面有空闲的内存,需要将其与回收的内存合并成为一块更大的内存。在回收内存的时候总共是八种情况。
以上就是这个程序的基本思路。

  1. public class Data  
  2. {  
  3.     String name;  
  4.     int starAddress;  
  5.     int length;  
  6.     int flag;  
  7.     public Data(){};  
  8.     public Data(String name, int starAddress, int length, int flag)  
  9.     {  
  10.         this.name = name;  
  11.         this.starAddress = starAddress;  
  12.         this.length = length;  
  13.         this.flag = flag;  
  14.     }  
  15.     @Override  
  16.     public String toString()  
  17.     {  
  18.         return "Data [name=" + name + ", starAddress=" + starAddress  
  19.                 + ", length=" + length + ", flag=" + flag + "]";  
  20.     }  
  21.       
  22. }  
 
  1. import java.util.ArrayList;  
  2. import java.util.Scanner;  
  3.   
  4. public class Main  
  5. {  
  6.     static ArrayList l = new ArrayList();  
  7.     static Scanner s = new Scanner(System.in);  
  8.     static void fenPei()//分配内存空间   
  9.     {  
  10.         Data d = new Data();  
  11.         System.out.println("请输入分配内存的名字");  
  12.         d.name = s.next();  
  13.         System.out.println("请输入分配内存的大小");  
  14.         d.length = s.nextInt();  
  15.         int i = 0;  
  16.         for(i = 0;i<l.size();i++)  
  17.         {  
  18.             if(d.length<=((Data)l.get(i)).length&&((Data)l.get(i)).flag == 0)  
  19.                 break;  
  20.         }  
  21.         if(i == l.size())  
  22.         {  
  23.             System.out.println("没有足够空间可以分配");  
  24.             return ;  
  25.         }  
  26.         if(((Data)l.get(i)).length - d.length<=4&&i!= l.size()-1)//不产生碎片   
  27.         {  
  28.             ((Data)l.get(i)).name = d.name;  
  29.             ((Data)l.get(i)).flag = 1;  
  30.         }  
  31.         else  
  32.         {  
  33.             d.flag = 1;  
  34.             ((Data)l.get(i)).length -= d.length;  
  35.             d.starAddress = ((Data)l.get(i)).starAddress;  
  36.             ((Data)l.get(i)).starAddress += d.length;  
  37.             l.add(i, d);  
  38.         }  
  39.         System.out.println("分配成功!");  
  40.     }  
  41.     static void huiShou()//回收内存空间   
  42.     {  
  43.         String name;  
  44.         System.out.println("请输入要回收的进程名字:");  
  45.         name = s.next();  
  46.         int i = 0; ;  
  47.         for(i = 0;i<l.size();i++)  
  48.             if(name.equals(((Data)l.get(i)).name))  
  49.                 break;  
  50.         System.out.println("找到的是"+i);  
  51.         if(i == l.size())  
  52.         {  
  53.             System.out.println("没有当前的进程,请核对输入名字");  
  54.             return;  
  55.         }  
  56.         if(i == 0&&((Data)l.get(i+1)).flag ==0)  
  57.         {  
  58.             ((Data)l.get(i)).length += ((Data)l.get(i+1)).length;  
  59.             ((Data)l.get(i)).flag = 0;  
  60.             ((Data)l.get(i)).name = "";  
  61.             l.remove(1);  
  62.         }  
  63.         else if(i == 0&&((Data)l.get(i+1)).flag ==1)  
  64.         {  
  65.             ((Data)l.get(i)).name = "";  
  66.             ((Data)l.get(i)).flag = 0;  
  67.         }     
  68.         else if(((Data)l.get(i-1)).flag == 0&&((Data)l.get(i+1)).flag ==0)//前后都是没有使用的   
  69.         {  
  70.             ((Data)l.get(i-1)).length =((Data)l.get(i-1)).length + ((Data)l.get(i)).length + ((Data)l.get(i+1)).length;  
  71.             ((Data)l.get(i-1)).name = "";  
  72.             l.remove(i);  
  73.             l.remove(i);  
  74.         }  
  75.         else if(((Data)l.get(i-1)).flag == 0&&((Data)l.get(i+1)).flag ==1)//前面未使用后面使用   
  76.         {  
  77.             ((Data)l.get(i-1)).length += ((Data)l.get(i)).length;  
  78.             ((Data)l.get(i-1)).name = "";  
  79.             l.remove(i);  
  80.         }  
  81.         else if(((Data)l.get(i-1)).flag == 1&&((Data)l.get(i+1)).flag ==0)//前面使用后面未使用   
  82.         {  
  83.             ((Data)l.get(i)).length += ((Data)l.get(i+1)).length;  
  84.             ((Data)l.get(i)).flag = 0;  
  85.             ((Data)l.get(i)).name = "";  
  86.             l.remove(i+1);  
  87.         }  
  88.         else  
  89.         {  
  90.             ((Data)l.get(i)).flag = 0;  
  91.             ((Data)l.get(i)).name = "";  
  92.         }  
  93.         System.out.println("回收成功");  
  94.     }  
  95.     static void display()  
  96.     {  
  97.         for(int i = 0;i<l.size();i++)  
  98.             System.out.println(l.get(i));  
  99.     }  
  100.     public static void main(String args)  
  101.     {  
  102.           
  103.         Data d = new Data("",0,1024,0);  
  104.         l.add(d);  
  105.         int choice;  
  106.         while(true)  
  107.         {  
  108.             System.out.println("请选择:");  
  109.             System.out.println("1  分配内存");  
  110.             System.out.println("2  回收内存");  
  111.             System.out.println("3  查看内存分配情况");  
  112.             System.out.println("4  退出  ");  
  113.             choice = s.nextInt();  
  114.             switch(choice)  
  115.             {  
  116.                 case 1:fenPei();break;  
  117.                 case 2:huiShou();break;  
  118.                 case 3:display();break;  
  119.                 case 4:System.exit(0);  
  120.                 default:System.out.println("输入错误请重新输入");  
  121.             }  
  122.         }  
  123.   
  124.     }  
  125.   
  126. }  



点击下载系统:http://www.myeducs.cn/chaxun/index.html?go=Java模拟操作系统中动态分区&aa=%CB%D1%CB%F7%C2%DB%CE%C4
设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师