抢占式SJF算法

一、实验目的:

通过实验抢占式短作业优先调度算法(Preemptive Shortest Job First, PSJF),加深对操作系统调度算法的理解,掌握抢占式调度算法的设计与实现。

 

实验设备与实验环境:

计算机,Java编译系统,idea,ChatGPT

 

二、实验程序设计内容:

  1. 实现抢占式短作业优先调度算法(PSJF)。
  2. 设计一个模拟环境,包括进程的到达时间和执行时间,用于测试PSJF算法的效果。
  3. 运行模拟环境,观察PSJF算法在不同进程情况下的调度表现。
  4. 收集实验数据,分析不同参数对PSJF算法性能的影响。

 

三、实验程序设计思路及流程图

  1. 初始化进程列表,包括进程的到达时间和执行时间。
  2. 使用优先队列(PriorityQueue)实现PSJF算法,根据进程的剩余执行时间动态调度进程执行顺序。
  3. 模拟时间片轮转,按时间片依次执行进程,当一个进程执行完毕或被抢占时,重新调度进程执行顺序。
  4. 输出每个进程的执行情况,包括开始执行时间和完成执行时间,以及整体的调度情况。

 

四、实验源程序及注释:

package homework.os;

/**
 * Date:2024/3/25  10:14
 * Description:SJF
 *
 * @author Leon
 * @version 1.0
 */

import java.util.ArrayList;
import java.util.List;
import java.util.PriorityQueue;
import java.util.Scanner;

class Process {
    int id;
    int arrivalTime;
    int burstTime;

    public Process(int id, int arrivalTime, int burstTime) {
        this.id = id;
        this.arrivalTime = arrivalTime;
        this.burstTime = burstTime;
    }
}

public class exm3 {
    public static void main(String[] args) {
        List<Process> processes = new ArrayList<>();
        init(processes);
        SJF(processes);
    }
    static void init(List<Process> processes){
        Scanner scanner = new Scanner(System.in);
        System.out.println("Plz input the number of process:");
        int n=scanner.nextInt();
        for(int i=1;i<=n;i++){
            System.out.println("input the arrivalTime and burstTime of process"+i);
            int arrivalTime=scanner.nextInt();
            int burstTime=scanner.nextInt();
            processes.add(new Process(i,arrivalTime,burstTime));
        }
    }

    public static void SJF(List<Process> processes) {
        PriorityQueue<Process> queue = new PriorityQueue<>((p1, p2) -> p1.burstTime - p2.burstTime);

        int currentTime = 0;
        int completedProcesses = 0;

        while (completedProcesses < processes.size()) {
            for (Process p : processes) {
                if (p.arrivalTime == currentTime) {
                    queue.add(p);
                }
            }

            if (!queue.isEmpty()) {
                Process currentProcess = queue.poll();
                System.out.println("Executing Process " + currentProcess.id + " at time " + currentTime);

                currentProcess.burstTime--;

                if (currentProcess.burstTime == 0) {
                    completedProcesses++;
                    System.out.println("Process " + currentProcess.id + " completed at time " + (currentTime + 1));
                } else {
                    queue.add(currentProcess);
                }
            }

            currentTime++;
        }
    }
}

 

五、实验程序测试过程及解释说明

Plz input the number of process:

4

input the arrivalTime and burstTime of process1

0 6

input the arrivalTime and burstTime of process2

1 4

input the arrivalTime and burstTime of process3

2 8

input the arrivalTime and burstTime of process4

3 5

 

六、实验程序测试过程与结果分析、

Executing Process 1 at time 0

Executing Process 2 at time 1

Executing Process 2 at time 2

Executing Process 2 at time 3

Executing Process 2 at time 4

Process 2 completed at time 5

Executing Process 4 at time 5

Executing Process 4 at time 6

Executing Process 4 at time 7

Executing Process 4 at time 8

Executing Process 4 at time 9

Process 4 completed at time 10

Executing Process 1 at time 10

Executing Process 1 at time 11

Executing Process 1 at time 12

Executing Process 1 at time 13

Executing Process 1 at time 14

Process 1 completed at time 15

Executing Process 3 at time 15

Executing Process 3 at time 16

Executing Process 3 at time 17

Executing Process 3 at time 18

Executing Process 3 at time 19

Executing Process 3 at time 20

Executing Process 3 at time 21

Executing Process 3 at time 22

Process 3 completed at time 23

 

七、理论学习与实践能力锻炼方面的个人心得体会

通过实验,我对抢占式短作业优先调度算法有了更深入的理解,了解了其优先级调度的原理和实现方式。

实验过程中,我发现PSJF算法能够有效减少平均等待时间和周转时间,提高系统的效率和响应速度。

在设计和实现PSJF算法的过程中,我学会了如何利用数据结构和算法来解决实际的调度问题,提高了编程能力和算法设计能力。

通过分析实验数据,我发现不同进程的到达时间和执行时间对PSJF算法的影响,进一步加深了对调度算法性能的认识。

 

      

实验评价及结论:

实验目的明确、设计内容符合要求,独立完成了操作系统抢占式SJF算法程序设计任务且源程序与注释、测试过程记录完整正确,能够很好地将课程理论运用于解决实际问题;实验报告内容完整,态度认真,总体质量优秀。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/569345.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

航空业微服务架构中台的构建与实践

随着航空业的快速发展&#xff0c;航空公司需要面对更加复杂的业务环境和客户需求。在这样的背景下&#xff0c;构建一个稳健、高效的微服务架构中台成为了航空公司的当务之急。本文将探讨航空业微服务架构中台的设计理念、关键技术以及实践经验&#xff0c;帮助航空公司构建具…

「Java开发指南」如何利用MyEclipse启用Spring DSL?(二)

本教程将引导您通过启用Spring DSL和使用Service Spring DSL抽象来引导Spring和Spring代码生成项目&#xff0c;本教程中学习的技能也可以很容易地应用于其他抽象。在本教程中&#xff0c;您将学习如何&#xff1a; 为Spring DSL初始化一个项目创建一个模型包创建一个服务和操…

面向多源异质遥感影像地物分类的自监督预训练方法

源自&#xff1a;测绘学报 作者&#xff1a;薛志祥, 余旭初, 刘景正, 杨国鹏, 刘冰, 余岸竹, 周嘉男, 金上鸿 摘 要 近年来,深度学习改变了遥感图像处理的方法。由于标注高质量样本费时费力,标签样本数量不足的现实问题会严重影响深层神经网络模型的性能。为解决这一突出矛盾…

将本地项目推送至gitlab仓库

1. gitlab上新建一个空白项目 gitlab上点击new project按钮&#xff0c;新建一个项目 新建空白项目 项目名称与本地新建项目名称相同&#xff0c;其余根据具体需要选择 2. 初始化本地仓库并commit项目 进入本地项目根目录下&#xff0c;右击 git bash here打开命令窗口 初始化…

MappedStatement解析流程

前言 之前写了一篇博文&#xff0c;介绍了mybatis的解析过程&#xff0c;其中mapper标签只演示了如何使用&#xff0c;这篇博文我们来探究mapper标签解析流程 源码解析 核心方法入口 引入mapper方式 使用相对于类路径的资源引用使用完全限定资源定位符&#xff08;URL&…

“五之链”第十六期沙龙活动在呆马科技成功举办

2024年4月19日&#xff0c;由临沂呆码区块链网络科技有限公司&#xff08;呆马科技&#xff09;承办的第十六期“五之链”物流主题沙龙活动成功举办。此次活动邀请了政府相关部门、知名科研院所、物流企业等20余家单位参与&#xff0c;共同探讨物流数据要素流通与智能应用的发展…

新版ONENET(2024/4/24)通过view3.0可视化保姆级教程(一学就会)附效果图

⏩ 大家好哇&#xff01;我是小光&#xff0c;想要成为系统架构师的嵌入式爱好者。 ⏩上一篇是STM32通过ESP8266连接最新版的ONENET&#xff0c;成功将数据上传之后&#xff0c;本篇文章使用ONENET的view3.0可视化对数据进行可视化做一个详细教程。 ⏩感谢你的阅读&#xff0c;…

AnaTraf网络流量分析仪:实时分析工具助您优化网络架构

导言&#xff1a; 在如今高度互联的数字时代&#xff0c;网络流量分析成为了企业和组织必备的工具之一。AnaTraf网络流量分析仪作为一款高性能的实时网络流量分析工具&#xff0c;不仅能够帮助用户进行全流量回溯分析、网络流量监控和网络性能分析&#xff0c;更可以快速排除网…

两天速通阿里

感觉这一周太梦幻了&#xff0c;就像一个梦&#xff0c;很不真实~~~ 感觉这个暑期&#xff0c;我的运气占了99成&#xff0c;实力只有百分之一 4.15上午 腾讯csig 腾讯云部门&#xff0c;面完秒进入复试状态 4.16下午 美团优选供应链部门&#xff0c;4.18上午发二面 4.17晚上 阿…

C#基础|属性Property之读写特性和经典总结

哈喽&#xff0c;你好&#xff0c;我是雷工。 本节学习属性特性——控制读写操作&#xff0c;以下为学习笔记。 01 只读属性 写法1&#xff1a;直接去掉set方法&#xff0c;可以在定义的时候初始化。 示例&#xff1a; public string CourseName{get&#xff1b;}“雷工笔记…

2024年学浪提取视频#小浪助手

2024年&#xff0c;学习视频已经成为人们获取知识和提升技能的重要途径&#xff0c;而学浪视频平台以其丰富多样的学习资源备受瞩目。然而&#xff0c;有时我们可能只需要其中的一小部分内容&#xff0c;而不想将整个视频都下载下来。在这个时候&#xff0c;小浪助手作为一款强…

软件无线电系列——Nyquist采样定理

本节目录 一、Nyquist采样定理 1、Nyquist采样定理的定义 2、Nyquist采样定理的证明本节内容 一、Nyquist采样定理 如果对某一时间连续信号进行采样&#xff0c;当采样速率达到一定数值时&#xff0c;就可以根据这些采样值准确地确定原信号。 1、Nyquist采样定理的定义 何为Ny…

这操作真牛!APT杜绝软件包被篡改

0x00 简介 我们介绍了传统包管理器、新型包管理器的工作方式&#xff0c;其中用了大篇幅介绍 APT 包管理器&#xff0c;但是没有对安全人员比较关心的软件包校验问题进行介绍 0x01 大众疑问环节 这部分主要是从常规 Linux 使用者的视角&#xff0c;提出一些平时工作过程中的…

到底什么是爬虫

1. 引言 在数据驱动的世界里&#xff0c;网络爬虫&#xff08;Web Crawling&#xff09;技术扮演着获取和处理网上数据的关键角色。无论是为了数据分析、机器学习项目的数据集构建还是简单地监测网页变化&#xff0c;学习如何创建一个基本的网页爬虫可以大大提升你的工作效率和…

万兆以太网MAC设计(7)ARP协议报文格式详解以及ARP层模块设计

文章目录 前言&#xff1a;1、ARP协议详解2、ARP工作机制 二、ARP_RX模块设计三、ARP_TX模块设计四、ARP_table模块5、仿真5.1、发送端5.2、接收端5.3、缓存表 总结 前言&#xff1a; 1、ARP协议详解 ARP数据格式&#xff1a; 硬件类型:表示硬件地址的类型。它的值为1表示以太…

postman接口自动化

1.基础知识 1.打开postman新建一个文件夹。 &#xff08;建立每一部分文件夹可以更好的管理接口信息&#xff09; 2.postman基本介绍 这里用到的是我自己的一个项目。 params&#xff1a;查询字符串&#xff0c;一般作为url的一部分。 authorization &#xff1a;鉴权&…

CentOS 7.9.2007 中Docker使用GPU

一、安装nvidia驱动 1.1&#xff0c;查看显卡驱动 # 查看显卡型号 lspci | grep -i nvidia 1.2&#xff0c;进入 PCI devices &#xff0c;输入上一步查询到的 2204 1.3&#xff0c;进入 官方驱动 | NVIDIA&#xff0c;查询 Geforce RTX 3090 驱动并下载 1.4&#xff0c;禁用…

数据结构(C):时间复杂度和空间复杂度

目录 &#x1f680; 0.前言 &#x1f680; 1.为何会有时间复杂度和空间复杂度的概念 &#x1f680; 2.时间复杂度 2.1初步时间复杂度 2.2大O表示法 2.2.1.O&#xff08;N*N&#xff09; 2.2.2.O&#xff08;N&#xff09; 2.2.3.O&#xff08;1&#xff09; 2.3最坏情况…

Set A Light 3D Studio:轻松上手,打造专属3D作品!

set a light 3d studio mac版是mac上一款功能方面相当强大的3D摄影棚布光工具&#xff0c;可以帮助摄影行业的工作用户在进行3D室内拍摄的时候&#xff0c;完成对灯光的位置调整设置&#xff0c;只要运用该软件&#xff0c;支持对各种灯光的道具摆放位置&#xff0c;灯光的反射…

Pycharm远程连接实验室服务器Conda环境配置

如何配置Pycharm和远程服务器 这类博客较多&#xff0c;参考内容 https://blog.csdn.net/fengbao24/article/details/125515542 Python解释器选择&#xff08;conda3&#xff09; 1. Settings -> Add Interpreter -> On SSH 注意&#xff0c;这里的SSH需要在你把远程…
最新文章