Java 动态模拟操作系统进程调度算法

目录
  • 实验目的
  • 设备与环境
  • 实验内容
  • 实验结果及分析
  • 部分代码展示 

实验目的

通过对进程调度算法的模拟,进一步理解进程的基本概念,加深对进程运行状态和进程调度过程、调度算法的理解。

设备与环境

硬件设备:PC机一台

软件环境:安装Windows操作系统,并安装相关的程序开发环境,如C \C++\Java 等编程语言环境。

实验内容

实验采用了java语言编程模拟N个进程采用动态高优先权优先进程调度算法。该算法就是按照优先权的大小运行进程,如果一个时间片内未运行完,则将优先权数减3后再插入到链表中按priority的顺序进行排序找到最大的priority作为下一个运行进程且在就绪队列里面的进程priority会加1。

主模块:

动态priority排序模块:

用来保证头部永远最大

到达时间进入就绪状态模块:

计算周转时间和带权周转时间:

实验结果及分析

输入的信息

初始权值都为100,needtime为还需要的时间

进程 到达时刻 服务时间

A 0 3

B 2 6

C 4 4

D 6 5

E 8 2

以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;

到此这篇关于Java 动态模拟操作系统进程调度算法的文章就介绍到这了,更多相关Java  操作系统进程调度算法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java如何获取本地操作系统进程列表

    package com.wa.xwolf.sblog.util; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.InputStreamReader; import java.nio.charset.Charset; public class ProcessUtil { public static void main(String[] args) throws Exception

  • java实现操作系统的短进程作业调度示例分享

    复制代码 代码如下: package com; import java.util.Arrays; public class sjf { public static void main(String[] args) {   sjf SJF=new sjf();   SJF.fun1();  } int starttime;  int arrivetime;  int finishtime;  int zhouzhuan; public void fun1(){ int a[]={1,3,2};  

  • Java获取当前操作系统的信息实例代码

    主流有几种方法,一种是用下面的函数 publicstaticStringgetProperty(Stringkey) 键 相关值的描述 java.version java.version Java 运行时环境版本 java.vendor java.vendor Java 运行时环境供应商 java.vendor.url java.vendor.url Java 供应商的 URL java.home java.home Java 安装目录 java.vm.specification.version

  • Java 动态模拟操作系统进程调度算法

    目录 实验目的 设备与环境 实验内容 实验结果及分析 部分代码展示  实验目的 通过对进程调度算法的模拟,进一步理解进程的基本概念,加深对进程运行状态和进程调度过程.调度算法的理解. 设备与环境 硬件设备:PC机一台 软件环境:安装Windows操作系统,并安装相关的程序开发环境,如C \C++\Java 等编程语言环境. 实验内容 实验采用了java语言编程模拟N个进程采用动态高优先权优先进程调度算法.该算法就是按照优先权的大小运行进程,如果一个时间片内未运行完,则将优先权数减3后再插入到链表

  • Java实现动态模拟时钟

    本文实例为大家分享了java动态模拟时钟的具体代码,供大家参考,具体内容如下 应用名称:java动态模拟时钟 用到的知识:javaGUI,java 绘图 开发环境:win10+eclipse+jdk1.8 功能说明:通过java绘图画出一个虚拟的动态时钟 效果图: 源代码: import javax.swing.*; import java.awt.*; import java.util.*; import java.lang.Thread; import java.text.DecimalFo

  • Java 动态生成类和实例, 并注入方法操作示例

    本文实例讲述了Java 动态生成类和实例, 并注入方法.分享给大家供大家参考,具体如下: Java官方支持的, 必须要有接口才行 import java.lang.reflect.Constructor; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.util.LinkedList; import ja

  • 详解java动态代理模式

    本文针对java动态代理进行知识点整理,具体内容如下 一. JAVA的动态代理(比较官方说法) 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处 理消息.过滤消息.把消息转发给委托类,以及事后处理消息等. 代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的 对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提 供特定的服务. 按照代理的创建时期,代理类可以分为两种. 静态代理:由程序员创建或特定工

  • Java动态代理(设计模式)代码详解

    基础:需要具备面向对象设计思想,多态的思想,反射的思想: Java动态代理机制的出现,使得Java开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类.代理类会负责将所有的方法调用分派到委托对象上反射执行,在分派执行的过程中,开发人员还可以按需调整委托类对象及其功能,这是一套非常灵活有弹性的代理框架.通过阅读本文,读者将会对Java动态代理机制有更加深入的理解.本文首先从Java动态代理的运行机制和特点出发,对其代码进行了分析,推演了动态生成类的内部实现. 代理模

  • Java动态代理和AOP应用示例

    本文实例讲述了Java动态代理和AOP应用.分享给大家供大家参考,具体如下: 一 点睛 动态代理在AOP(Aspect Orient Program,即面向切面编程)里被称为AOP代理,AOP代理可代替目标对象,AOP代理包含了目标对象的全部方法.但AOP代理中的方法与目标对象的方法存在差异:AOP代理里的方法可以在执行目标方法之前.之后插入一些通用处理. 二 代码 Dog.java public interface Dog { // info方法声明 void info(); // run方法

  • Python模拟简单电梯调度算法示例

    本文实例讲述了Python模拟简单电梯调度算法.分享给大家供大家参考,具体如下: 经常在公司坐电梯,由于楼层较高,是双联装的电梯,但是经常等电梯很久,经常有人骂写电梯调度算法的.回来闲来无事,自己尝试写了一个简单的. 场景很简单,每一层电梯口只有一个按钮,不区分上下,当有人按下这个键后,电梯会过来停在此层,这个人可以进去,并选择自己想去的层.电梯的调度策略也很简单,在一次向上的过程中,如果有人在下面按了键,电梯并不直接向下,而是运行到此次向上的最顶层,然后再下次向下运行的过程中去服务这个请求.

  • Java动态循环队列是如何实现的

    一.队列 1.1 定义 队列 (Queue) 是一种限定性的有序线性表,它只允许在表的一端插入元素,而在另一端删除元素,所以队列具有先进先出 (Fist In Fist Out,缩写为FIFO)的特性. 在队列中,允许插入的一端叫做队尾(rear): 允许删除的一端则称为队头(front). 队列是一个有序列表,可以用数组或是链表来实现. 遵循先进先出的原则.即:先存入队列的数据,要先取出. 1.2 抽象数据类型 数据元素:可以是任意类型的数据,但必须属于同一个数据对象. 关系:队列中数据元素之

  • Java数组模拟优先级队列数据结构的实例

    优先级队列 如果我们给每个元素都分配一个数字来标记其优先级,不妨设较小的数字具有较高的优先级,这样我们就可以在一个集合中访问优先级最高的元素并对其进行查找和删除操作了.这样,我们就引入了优先级队列 这种数据结构. 优先级队列(priority queue) 是0个或多个元素的集合,每个元素都有一个优先权,对优先级队列执行的操作有(1)查找(2)插入一个新元素 (3)删除 一般情况下,查找操作用来搜索优先权最大的元素,删除操作用来删除该元素 .对于优先权相同的元素,可按先进先出次序处理或按任意优先

随机推荐