资源简介

最近要写计算机操作系统大作业,老师要求用代码实现进程控制模块的模拟,在网上看了许多资源,发现都不是很符合我的需求,于是自己动手写了一个。但由于时间仓促,而且自己也懒得写那么多,所以项目仅仅实现了进程创建、简单的资源分配、进程阻塞(这个功能实现的很烂)、进程按优先级获取cpu时间片。 压缩包中包含了项目源代码以及详细的注释,另外我使用exe4j生成了一个可执行的exe文件,可以直接在windows上运行。 项目内容并不算详尽,作为大作业来讲可能略显简陋(但如果只要求及格且老师要求不算很严格的话也勉强能用),具有一定的参考价值。请谨慎下载。

资源截图

代码片段和文件信息

package bean;

import java.util.ArrayList;
import java.util.List;

//控制类(OS核心),创建进程,为进程分配系统资源等。
public class Control {

private static List cList = new ArrayList(); //创建进程表
private static List rList = new ArrayList(); //就绪进程表
private static List bList = new ArrayList(); //阻塞进程表
private static List pList = new ArrayList(); //执行进程表
private static List eList = new ArrayList(); //终止进程表


public static void init(){
createPCB(“p1“);
createPCB(“p2“);
createPCB(“p3“);
createPCB(“p4“);
createPCB(“p5“);
createPCB(“p6“);
while(cList.size()>0){
int j = cList.get(0).getPid();
requestMem(j);
}
sortReadList(rList);
System.out.println(rList.size());
System.out.println(“进程按照优先级排列:“);
for(int i = 0; i System.out.println(“进程:“+rList.get(i).getName()+“优先级为“+rList.get(i).getPriority());
}
}

//申请PCB
public static void createPCB(String name){

PCB pcb = new PCB(name); //设置进程名称
pcb.setPid(cList.size()+rList.size()+bList.size()+pList.size()+eList.size());
//设置进程id
System.out.println(“进程“+pcb.getName()+“的pid为“+pcb.getPid());
pcb.setPriority((int) ((Math.random()*7)+1)); //随机设置进程优先级
pcb.setTime((int) ((Math.random()*30)+1)); //随机设置进程需要运行的时间

int mem = (int) ((Math.random()*200)+1); //随机设置进程所需要的内存空间
pcb.setMem(mem);
int res = (int) ((Math.random()*50)+1); //随机设置进程所需要的系统资源
pcb.setRes(res);
int io = (int) ((Math.random()*2)); //进程是否需要申请io设备
pcb.setIo(io);

cList.add(pcb); //将创建好的进程加入创建进程表
System.out.println(“进程“+pcb.getName()+“创建完毕,已加入创建队列,等待分配系统资源...“);
}
//分配内存资源
public static void requestMem(int pid){
PCB pcb = null;
for(int i = 0; i if(cList.get(i).getPid()==pid){
pcb = cList.get(i);
cList.remove(i);
break;
}
}

int mem = Resource.getMemory();
//如果系统可用内存大于进程所需内存,则为其分配内存资源
if(pcb.getMem()<= mem){
System.out.println(“进程“+pcb.getName()+“已分配内存空间:“+pcb.getMem());
Resource.setMemory(mem-pcb.getMem());


//将进程从创建队列中移除,并将进程状态改为就绪状态,最后将进程加入到就绪队列中。

pcb.setSt(“R“);
rList.add(pcb);
System.out.println(“系统剩余内存空间:“+Resource.getMemory());
System.out.println(“进程“+pcb.getName()+“所需内存已分配完毕,加入就绪队列,等待运行...“);

}
//否则,不分配
else{
System.out.println(“系统可用内存不足,进程“+pcb.getName()+“暂时无法获得内存...“);
}
}

//当进程获取到cpu执行时间片时吗,进程需要请求分配系统资源以便完成操作(前提是该进程确实需要系统资源)。
public static boolean requestRes(int pid){
PCB pcb = pList.get(0);
//先判断进程是否需要系统资源
if(pcb.getRes()!=0){
//若需要,判断系统剩余资源是否足够进程使用
if(pcb.getRes()<=Resource.getOsRes()){
System.out.println(“进程“+pcb.getName()+“已分配到系统资源:“+pcb.getRes());
Resource.setOsRes(Resource.getOsRes()-pcb.getRes());
System.out.println(“剩余系统资源为“+Resource.getOsRes());
return true;
}
//若资源不够,进程进入阻塞状态
else{
System.out.println(“进程“+pcb.getName()+“未能获得需要的系统资源,进

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件      418816  2018-12-27 20:20  新建文件夹\PCB.exe
     目录           0  2018-12-27 21:34  新建文件夹\src\
     目录           0  2018-12-27 21:34  新建文件夹\src\bean\
     文件        7238  2018-12-27 19:54  新建文件夹\src\bean\Control.java
     文件        1511  2018-12-27 17:12  新建文件夹\src\bean\PCB.java
     文件         801  2018-12-27 13:38  新建文件夹\src\bean\Resource.java
     目录           0  2018-12-27 21:35  新建文件夹\

评论

共有 条评论