资源简介
最近要写计算机操作系统大作业,老师要求用代码实现进程控制模块的模拟,在网上看了许多资源,发现都不是很符合我的需求,于是自己动手写了一个。但由于时间仓促,而且自己也懒得写那么多,所以项目仅仅实现了进程创建、简单的资源分配、进程阻塞(这个功能实现的很烂)、进程按优先级获取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 新建文件夹\
相关资源
- 微博系统(Java源码,servlet+jsp),适
- java串口通信全套完整代码-导入eclip
- jsonarray所必需的6个jar包.rar
- 三角网构TIN生成算法,Java语言实现
- java代码编写将excel数据导入到mysql数据
- Java写的cmm词法分析器源代码及javacc学
- JAVA JSP公司财务管理系统 源代码 论文
- JSP+MYSQL旅行社管理信息系统
- 推荐算法的JAVA实现
- 基于Java的酒店管理系统源码(毕业设
- java-图片识别 图片比较
- android毕业设计
- java23种设计模式+23个实例demo
- java Socket发送/接受报文
- JAVA828436
- java界面美化 提供多套皮肤直接使用
- 在线聊天系统(java代码)
- 基于Java的图书管理系统807185
- java中实现将页面数据导入Excel中
- java 企业销售管理系统
- java做的聊天系统(包括正规课程设计
- Java编写的qq聊天室
- 商店商品管理系统 JAVA写的 有界面
- JAVA开发聊天室程序
- 在linux系统下用java执行系统命令实例
- java期末考试试题两套(答案) 选择(
- JAVA3D编程示例(建模、交互)
- Java 文件加密传输
- java做的房产管理系统
- 基于jsp的bbs论坛 非常详细
评论
共有 条评论