Java 动态模拟操作系统进程调度算法
作者:肥学 发布时间:2023-04-10 15:09:20
标签:Java,操作系统,进程调度算法
实验目的
通过对进程调度算法的模拟,进一步理解进程的基本概念,加深对进程运行状态和进程调度过程、调度算法的理解。
设备与环境
硬件设备:PC机一台
软件环境:安装Windows操作系统,并安装相关的程序开发环境,如C \C++\Java 等编程语言环境。
实验内容
实验采用了java语言编程模拟N个进程采用动态高优先权优先进程调度算法。该算法就是按照优先权的大小运行进程,如果一个时间片内未运行完,则将优先权数减3后再插入到链表中按priority的顺序进行排序找到最大的priority作为下一个运行进程且在就绪队列里面的进程priority会加1。
主模块:
动态priority排序模块:
用来保证头部永远最大
到达时间进入就绪状态模块:
计算周转时间和带权周转时间:
实验结果及分析
输入的信息
初始权值都为100,needtime为还需要的时间
进程 到达时刻 服务时间
A03
B26
C44
D65
E82
以A为例:
最后结束时:
部分代码展示?
//创建结构
class PCB{
String ID;
int priority=-1;
int cputime;//服务的时间
int needtime;//进程还需的时间
String state="wait";
int arrivetime;
PCB next;
public PCB(String ID,int priority,int cputime,int arrivetime){
this.ID=ID;
this.priority=priority;
this.cputime=cputime;
this.arrivetime=arrivetime;
}
}
判断是否到达,进程进入时间
for(int i=0;i<arr.size();i++){
if(h==arr.get(i).arrivetime){
Dynamic_priority.sort(arr.get(i));
arr.remove(i);}}
//将进程转为就绪态并排序
public static void sort(PCB pcb){
PCB tmp=null;
if(ready==null){//当头结点为空
ready=pcb;
tail=pcb;}
else {if(pcb.priority>ready.priority){//如果这个结点priority大于头priority
pcb.next=ready;
ready=pcb;}
else {
boolean m=false;
tmp=ready;//q
while (m==false){
if(tail.priority>=pcb.priority){//插入尾端
tail.next=pcb;
tail=pcb;
pcb.next=null;
m=true; }
else {
if(tmp.priority>=pcb.priority&&pcb.priority>tail.priority){//逐渐遍历插到tmp前
pcb.next=tmp.next;
tmp.next=pcb;
m=true;
} else { tmp=tmp.next;
来源:https://blog.csdn.net/jiahuiandxuehui/article/details/121469614


猜你喜欢
- 一、在pom.xml中配置jetty插件: <build> <plugins> <p
- 本文实例讲述了C#实现缩放和剪裁图片的方法。分享给大家供大家参考,具体如下:using System;using System.Collec
- 一、继承1、继承的概念继承机制:是面向对象程序设计是代码可以复用的最重要手段,允许程序员在保持原有类特性的基础上进行扩展,增加新的功能,产生
- 1.C#是一种从C++和Java继承而来的,简单的,现代的,面向对象的语言.2.它的目标是综合Visual Basic高产和C++底层高效的
- SpringMVC文件下载说明: 在 SpringMVC 中,通过返回 ResponseEntity的类型,可以实现文件下载的功能案例演示1
- 一、概述在上一篇的叙述中,我们通过图层的方式完成了图片颜色的填充(详情请戳:Android不规则图像填充颜色小游戏),不过在着色游戏中更多的
- 本篇博客我们继续的来聊SpringMVC的东西,下方我们将会聊到js、css这些静态文件的加载配置,以及服务器推送的两种实现方式。当然我们在
- 在最近的项目中因为要用Android作为一个服务器去做一个实时接收数据的功能,所以这个时候就要去做一个Android本地的微型服务器。那么此
- 咱们废话不多说进入主题、系统主页展示:用户登录后进行系统首页:主要功能模块如下、分角色管理、超级管理员拥有最高权限、可以进行菜单灵活控制、用
- 大家好,这是 [C#.NET 拾遗补漏] 系列的第 07 篇文章。在 C# 中,大多数方法都是通过 return 语句立即把程序的控制权交回
- 本文研究的主要是Java中后台线程的相关问题,具体介绍如下。以前从来没有听说过,java中有后台线程这种东西。一般来说,JVM(JAVA虚拟
- Java ByteArrayInputStream流一、ByteArrayInputStream流定义API说明:ByteArrayInpu
- 一、项目运行环境配置:Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe
- 概念装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。装饰者和被装饰对象有相同的超类型。你可以用一个或
- java 数据结构中栈和队列的实例详解栈和队列是两种重要的线性数据结构,都是在一个特定的范围的存储单元中的存储数据。与线性表相比,它们的插入
- 前言: 在命令行中输入可以输入各类参数,本文将针对这些参数做一个小结。基于命令行输入参数测试程序如下:import java.util.Ar
- 下图是《Unity Shader 入门精要》一书中的渲染流程图;ApplicationStage阶段:准备场景信息(视景体,摄像机参数)、粗
- 本文实例为大家分享了Java实现部门员工管理的具体代码,供大家参考,具体内容如下项目作业:部门员工管理题目要求:某公司要开发内部的 &
- 本文实例讲述了winform用datagridview制作课程表的方法。分享给大家供大家参考。具体分析如下:课程表的最终效果如下图所示:具体
- 一、简介众所周知,值类型变量不能null,这也是为什么它们被称为值类型。但是,在实际的开发过程中,也需要值为null的一些场景。例如以下场景