Java实现内存分配算法 FF(首次适应算法) BF(最佳适应算法)

一、概述

  因为这次os作业对用户在控制台的输入输出有要求,所以我花了挺多的代码来完善控制台的显示。

  MemoryAlgorithm类里只是和控制台输入输出有关的操作,而对内存的所有逻辑操作都是用Memory类里对应的方法实现的。

  因为不同内存分配算法,只有对空闲分区表的排序不同,所以可以将FF和BF等内存分配算法一起实现。

  

  如果只关心和算法有关的核心代码的话,只看Memory类中add()、del()和sortFreeAreaList()方法即可

  添加和删除操作的逻辑比较绕,后面也有关于添加和删除操作单独的流程图。

 

二、运行结果

  1. 测试数据:

(1)系统总内存为256,按下列参数分配内存

进程

1

2

3

4

5

6

所需内存

25

34

45

12

13

10

(2)依次回收进程2,4,3,6

(3)再次分配进程7,大小40

  2. 测试结果:

  (太长了,我就不截图了。测试的时候注意我的代码是按照请求回收内存的首地址进行回收的就行)

 

三、流程图

  1. FF算法和BF算法的流程图

  2. 添加进程的流程图

  3. 撤销进程的流程图

 

 

四、实现代码

  1. MemoryAlgorithm类(主类)

MemoryAlgorithm类只需要:

  1.在适当的记录用户的输入;

  2.根据用户的输入调用Memory类中对应的方法;

  3.向用户反馈结果

所以这个类只是个界面。

  1 package xqy.algorithm;
  2 
  3 import java.util.*;
  4 
  5 import xqy.been.*;
  6 
  7 /**
  8  * @author xqy
  9  * @date 2018年12月20日21:36:40
 10  *
 11  */
 12 public class MemoryAlgorithm {
 13     private Memory memory;
 14     private String algType;
 15     private Scanner sc;
 16     
 17     /**
 18      * Each memory algorithm uses this class.<br/><br/>
 19      * Each memory algorithm is different only in free area's sorting. <br/><br/>
 20      * @param algType
 21      *         FF: First fit,
 22      *         BF: Best fit
 23      */
 24     public MemoryAlgorithm(String algType) {
 25         sc = new Scanner(System.in);
 26         this.algType = algType;
 27         
 28         init();
 29         op();
 30     }
 31     
 32     private void init() {
 33         int memorySize;
 34         int fragment;
 35         
 36         System.out.print("<" + algType + "> Please enter the memory size:");
 37         memorySize = sc.nextInt();
 38         
 39         System.out.print("<" + algType + "> Please enter the fragment allocated:");
 40         fragment = sc.nextInt();
 41 
 42         memory = new Memory(memorySize, fragment, algType);        
 43     }
 44 
 45     private void op() {
 46         int key;
 47 
 48         while(true) {
 49             System.out.println("\n    #OPTION
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值