资源简介
课程要求:
用高级语言编写程序,模拟实现一个简单功能的操作系统。
(1) 提交一批作业(>=10),按先来先服选择一部分作业(最多5个)进入内存
(2) 为每个作业创建一个进程,并分配内存(用户内存:0—1024K,采用可变连续分配方式)
(3) 进程调度功能(时间片轮转)
(4) 随机阻塞进程,并在一段时间后唤醒进程(选做)
(5) 显示相关信息:后备作业队列、内存分配情况、进程信息、完成作业情况
(6) 这些功能要有机地连接起来

代码片段和文件信息
import java.util.linkedList;
import java.util.Random;
public class ProcessMemoryController {
int NUM = 10;//进程数
int ACCURACY = 1;//控制格式化后小数点后面的位数
int THRESHOLD = 5;//允许并发的进程数量,小于时从后备队列调入进程
int MINSIZE = 30;//控制内存碎片的产生
PCB[] pcb = new PCB[NUM];
linkedList memoList = new linkedList<>();
double pTime; //时间片定义
int run; //当前运行的进程,没有则为-1
long lastTime; //每次调度程序都记录当前时间
long beginTime;//程序开始时间
//进程PCB块类
private class PCB {
String name; //进程名
double arrtime; //到达时间
double needtime; //需要运行时间
double usedtime; //已用时间
int needmemo; //所需内存
int address; //主存起始位置
char state; //进程状态
}
//内存条目类
private class MemoItem {
//内存表条目
int address = 0;
int length = 0;
char state = ‘F‘;//B代表busy繁忙或F代表free空闲
public MemoItem(int address int length) {
this.address = address;
this.length = length;
}
}
//定义bool类型的所有进程调度结束函数
boolean isAllFinished() {
for (int i = 0; i < NUM; i++) {
if (pcb[i].state != ‘F‘) return false;
}
return true;
}
//初始化各个参数
void init() {
run = -1;
Random r = new Random();
for (int n = 0; n < NUM; n++) {
pcb[n] = new PCB();
pcb[n].name = Character.toChars(65 + n)[0] + ““;
pcb[n].needtime = r.nextDouble() * 2 + 3;//2到5秒
pcb[n].needmemo = r.nextInt(200) + 250;//需要的内存为200到450
if (n == 0) {
pcb[n].arrtime = 0;
pcb[0].needmemo = 50;
} else {
pcb[n].arrtime = r.nextDouble() * 5 + 1;
pcb[n].needmemo = r.nextInt(300) + 150;//需要的内存为300到450
}
}
for (int n = 0; n < NUM; n++) {
pcb[n].usedtime = 0;
pcb[n].address = 0;
pcb[n].state = ‘U‘;
}
//设置起始地址为30,初始化的长度在100到150之间
MemoItem first = new MemoItem(30 r.nextInt(100) + 50);
memoList.add(first);
MemoItem prev = first;
for (; ; ) {
int address = prev.address + prev.length;
if (address >= 1024) break;
int length = r.nextInt(50) + 50;
MemoItem ano = new MemoItem(address length);
memoList.add(ano);
prev = ano;
}
}
//格式化输出展示数据
String d2s(double d) {
String tmp = d + ““;
int index = tmp.indexOf(“.“);
return tmp.substring(0 index + ACCURACY + 1);
}
//先来先服务时间排序
void sortByArrtime() {
int i j;
PCB temp;
for (i = 0; i < NUM - 1; i++) //按照到达时间排序
{
for (j = 0; j < NUM - 1 - i; j++) {
if (pcb[j + 1].arrtime < pcb[j].arrtime) {
temp = pcb[j];
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 276 2020-07-09 20:53 source\代码\.idea\misc.xm
文件 259 2020-07-09 20:53 source\代码\.idea\modules.xm
文件 5320 2020-08-19 11:58 source\代码\.idea\workspace.xm
文件 433 2020-07-09 20:53 source\代码\source.iml
文件 10970 2020-08-19 11:58 source\代码\src\ProcessMemoryController.java
文件 972021 2020-08-19 11:55 source\文档.docx
目录 0 2020-08-19 11:58 source\代码\.idea
目录 0 2020-08-19 11:58 source\代码\src
目录 0 2020-08-19 11:58 source\代码
目录 0 2020-08-19 11:58 source
----------- --------- ---------- ----- ----
989279 10
相关资源
- 广工操作系统实验
- 广东工业大学操作系统实验四文件系
- 广东工业大学汇编实验二用表格形式
- 安卓-妄撮-撕衣服-源代码-无广告
- 深度优先搜索算法和广度优先搜索算
- 广告交换 1.0 Beta
- 内网通3.4.3045版本去广告加积分.rar2
- 完全协变成分夸克模型中的Pion广义
- Spin-1目标的广义parton分布的多项式和
- 两味晶格QCD的核子广义形状因子
- 双二阶广义积分器SOGI软件锁相(基于
- 基于GTP修正的R3DGM建模与可视化方法
- 安奈特应用广东地税方案
- Dr.COM宽带计费运营解决方案助力广电
- 最大Abelian规范和广义BRST变换
- 具有广义多态状态方程的各向异性带
- 广义Einstein-Cartan-Kibble-Sciama引力和引力
- q广义Bose-Einstein和Fermi-Dirac系统的热力
- 广义单一性在Born-Infeld电动力学中的全
- 具有可见和隐藏扇区的广义Maxwell-Hi
- Maxwell–Higgs型广义模型中的解析涡
- 基于四元数的Chern–Simons理论在任
- Bosonic D = 11广义Chern–Simons动作的超
- 广西工商银行病毒防护解决方案
- 广东省工商银行存储备份项目
- 广东省工商行政管理局信息中心系统
- 硬盘播出系统广告节目应急备份案例
- 广东核电大亚湾数据中心统一存储平
- Infortrend助国家广电总局建立稳定高效
- 广联达6.0写锁包,2020年11月最新
评论
共有 条评论