一、概述
因为这次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