操作系统综合实验——动态高优先权优先进程调度算法

Posted 肥学

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作系统综合实验——动态高优先权优先进程调度算法相关的知识,希望对你有一定的参考价值。

导读

PS:最近有很多小伙伴问我怎么准备算法竞赛和面试的问题,还有一些刚入门的新同学不知道怎么学习编程,肥学给大家准备了一些专栏有兴趣的可以去看看哦!

📣小白练手专栏,适合刚入手的新人欢迎订阅编程小白进阶

📣python有趣练手项目里面包括了像《机器人尬聊》《恶搞程序》这样的有趣文章,可以让你快乐学python练手项目专栏

📣另外想学JavaWeb进厂的同学可以看看这个专栏:传送们

📣这是个面试和考研的算法练习我们一起加油上岸之路

好了今天我们给大家准备了操纵系统的期末综合实验大家可以参考参考哦!

一、实验目的

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

二、设备与环境

  1. 硬件设备:PC机一台
  2. 软件环境:安装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;

资料领取

回复操作系统综合实验即可获取
这里有python,Java学习资料还有有有趣好玩的编程项目,更有难寻的各种资源。反正看看也不亏。

以上是关于操作系统综合实验——动态高优先权优先进程调度算法的主要内容,如果未能解决你的问题,请参考以下文章

利用python画出动态高优先权优先调度

利用python画出动态高优先权优先调度

时间片轮转算法和优先级调度算法 C语言模拟实现

操作系统实验二(调度算法模拟-先进先出-时间片轮转法-优先服务调度算法)

进程调度算法总结

操作系统| 作业调度算法平均周转时间平均带权周转时间先来先服务FCFS短作业优先SJF高优先权算法FPF高响应比优先算法HRRN