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

举报
肥学 发表于 2022/03/25 22:29:32 2022/03/25
【摘要】 目录标题 导读一、实验目的二、设备与环境三、实验内容四、实验结果及分析部分代码展示资料领取 导读 PS:最近有很多小伙伴问我怎么准备算法竞赛和面试的问题,还有一些刚入门的新同学不知道...

导读

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

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述

在这里插入图片描述

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


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
判断是否到达,进程进入时间
for(int i=0;i<arr.size();i++){
                if(h==arr.get(i).arrivetime){
                    Dynamic_priority.sort(arr.get(i));
                    arr.remove(i);}}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
//将进程转为就绪态并排序
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;

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

资料领取

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

文章来源: blog.csdn.net,作者:肥学,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/jiahuiandxuehui/article/details/121469614

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。