资源简介
课程要求:
用高级语言编写程序,模拟实现一个简单功能的操作系统。
(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
相关资源
- 广州大学 数据结构实验报告 实验二
- 给出4个图片,要求轮换显示的横幅广
- 男装Flash品牌广告源码.rar
- QQ群成员批量提取工具| v0710免费版.
- 广工操作系统课设
- 广州大学计算机大四上专业方向课程
- 池塘夜降彩色雨源码
- 广东海洋大学科技楼网络布线设计
- 广工探秘自动化课程选择题题目及答
- 广大实验报告
- 《视觉测量》张广军最新版高清pdf(
- 应广 mini-c 红外解码程序 6121 红外解码
- 广义s变换含测试程序
- 广陵散ssh.txt
- 广工高级数据库课程设计
- 广工代码之美课程设计
- Facebook插屏广告demo.txt
- 广东行政区划边界,省级、地市级、
- 广州地铁路径模拟系统
- 广工检测原理实验报告
- 视觉测量pdf 张广军版
- 广州市行政区划 GIS
- 广工数据库课程设计
- 苹果点线广告PPT
- 广工计算机图形课程设计2015
- 51单片机Protues点阵广告屏仿真及实现
- 广工2015编译原理实验报告
- 广外女生1.53B之病毒生成器
- 分治法实现最接近点对问题的三维推
- 动态生成JS动态给网站添加悬浮广告及
评论
共有 条评论