资源简介
最近要写计算机操作系统大作业,老师要求用代码实现进程控制模块的模拟,在网上看了许多资源,发现都不是很符合我的需求,于是自己动手写了一个。但由于时间仓促,而且自己也懒得写那么多,所以项目仅仅实现了进程创建、简单的资源分配、进程阻塞(这个功能实现的很烂)、进程按优先级获取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 web 网上商城项目源码(jspservlet
- java网上商城项目源码jsp.servlet+javabe
- Java最全面试宝典 (PDF清晰版)
- Java Web从入门到精通 原盘光盘镜像
- java 采用ssl的socket交互
- ac自动机java版
- 编程模拟多进程共享临界资源最终版
- HDU题目java实现
- java socket异步长连接demo
- websocket demojava客户端,心跳监测
- Java+servlet+jsp页面ajax请求
- robocode_API中文参考(java).pdf
- 自己做的java通讯软件小程序
- 基于JAVA的动态八皇后游戏互动
- Ngram分词程序
- java-client-5.0.0-BETA7.jar
- java虚拟机调优(马士兵)-课程程序
- R树的java版本实现
- java通过socket编写小型聊天室
- 转换代码vox转wav的java代码
- 操作系统文件管理课程设计JAVA版
- DSS数字签名标准Java实现
- DH密钥交换算法Java实现
- java弹球程序弹球程序
- JAVA学生选课系统jsp源代码
- 会员管理系统Java程序源码
- java写的家庭理财工具
- Java工程师面试突击第1季可能是史上最
- java DHT爬虫 重构并加了注释 修复了一
- java DHT爬虫 重构并加了完整的注释 修
评论
共有 条评论