- 一共分了3个包,code包是主要代码,main包是主函数,test包用于测试.
- code包下
- Process类属性即进程的基本属性,如name,runningTime,priorty.
- CPU类是此项目的重点类,它有一个线性表用于存放所有的进程,addProcess()用于添加进程,但要根据优先度进行排序,接着就是调度schedule()方法,基本操作就是将就绪队列最前面的进程运行时间和优先度分别递减,如果运行结束就抽出队列.
- Main包下
- 主函数主要通过获得键盘输入作为进程的参数创建所需进程,接着while循环进行调度,直到队列为空为止。中间使用线程进行时间等待,以不至于一开始就打印出所有结果
- Test包
- 需要Juint引入测试框架
- Utiles类
- 一个静态工具类,其中有获取键盘参数创建进程的方法.
- 本实验一共分为3个包,分别是code,main,test
- code包
- Memory类 重要属性有分区块列表,用于保存分区块;方法有排序方法(),把分区块列表按照首地址排序
- MemoryBlock类 重要属性有start,end,length,task,isUsed,其中task属性用于保存此分区块属于那个任务,isUsed标记是否是空分区块 重要方法是实现Comparable接口的方法,按照start属性排序
- MemoryOperator类 无重要属性,重要方法有添加任务申请分区,撤销任务擦除分区,合并邻近分区,其中撤销任务擦除分区()会涉及调用合并邻近分区。另外方法是打印内存的分区情况
- Task类 重要属性只有分区大小
- main包
- 只有主类和主函数,通过键盘获取整数输入,使用while死循环,swich实现题目要求逻辑
- test包
- 需要引入Juint测试框架,用于测试编写中的类
- 本实验一共分为3个包,分别是code,main,test
- code包
- File类
- 指申请向磁盘中存入的文件。
- 重要属性有length和startNumber,分别指这个文件的长度以及它存入磁盘的物理启始地址
- FreeBlock类
- 指磁盘拥有的连续空闲物理块。因为存储和释放会产生碎片,因此空闲物理块不会连续,因此抽象成FreeBlock类
- 重要属性有start,length
- 重要方法是实现Comparable接口的方法,按照start属性排序
- Disk类
- 指磁盘
- 属性bitMap,是一个8*8二维数组,用于表示磁盘的位示图。
- 属性files,是一个<Interger,File>字典,用于记录已经存入磁盘的文件。释放文件时可根据字典的键锁定文件而进行释放。
- 属性freeBlocks,是一个线性表,记录目前磁盘的连续空间物理块,初始时为一个64单位长度的整块,后面会切分而使数量变多。
- 方法askSpace(int length),输入想要申请的空间大小而进行空间申请。逻辑是寻找大小足够的低位的freeBlock,并对这个空闲块进行划分。并向字典中加入当前这个文件。
- 方法freeSpace(int fileNumber),根据序号通过字典锁定文件而将其释放。会涉及相邻空闲物理块的合并。
- 方法changeBitmap(int start,int end,boolean isUsed),将bitMap设置成1或0,代码比较难写,分了三种情况,逻辑比较乱。
- Task类 重要属性只有分区大小
- File类
- main包
- 只有主类和主函数,通过键盘获取整数输入,使用while死循环,swich实现题目要求逻辑
- test包
- 需要引入Juint测试框架,用于测试编写中的类
- 只有一个main函数。根据fork函数的返回值来判断是父进程还是子进程,从而执行相应的操作
- 操系统为deepin OS, IDE为Clion
- 本实验一共分为3个包,分别是code,main,test
- code包
- BankerAlgorithm类
- 属性alocation二维数组,用于保存每个进程已分配的各种资源的数目。
- 属性need二维数组,用于保存每个进程还需要的各种资源的数目。
- 属性work一维数组,用于验证是否安全,假设某个进程执行结束,则收回分配的资源,类似拓扑结构判断是否死锁。
- 方法askForResources(int id, int[] request),输入进程序号以及请求资源的数目。返回是否请求成功。
- 方法public boolean isSafe(),用于判断分配资源后是否会出现死锁。在askForResources(int id, int[] request)中嵌套使用,作为其方法体一部分。
- Utils类
- 一个静态工具类。主要实现一维和二维数组的相加相减,数组的格式化输出,从键盘获取输入确定askForResources(int id, int[] request)的参数
- BankerAlgorithm类
- main包
- 只有主类和主函数,通过键盘获取整数输入,按照示例实现算法演示
- test包
- 需要引入Juint测试框架,用于测试编写中的类。