多批道处理算法

一、实验目的:

  1. 了解多道批处理系统的工作原理和调度算法
  2. 熟悉先来先服务调度算法(First Come First Served, FCFS)的实现
  3. 学习如何模拟多道批处理系统的调度过程

实验设备与实验环境:

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

二、实验程序设计内容:

  1. 设计一个模拟操作系统多道批处理作业调度算法(FCFS)的程序,包括两个进程(Program)的信息输入和调度过程展示。
  2. 实现程序初始化方法,用于输入两个进程的延迟时间、处理时间和读写时间。
  3. 实现判断哪个进程先到达的方法,用于确定FCFS调度顺序。
  4. 实现计算CPU使用时间的方法,计算两个进程的处理时间和读写时间之和。
  5. 实现展示时序图的方法,展示CPU和IO的时间线,并返回总运行时间。
  6. 实现计算CPU利用率的方法,计算CPU使用时间与总运行时间的比值。

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

  1. 创建一个 Program 类来表示进程,包含延迟时间和处理时间等属性。
  2. 在 Tool 类中实现初始化进程信息的方法,通过输入来初始化两个进程的信息。
  3. 实现判断哪个进程先到达的方法,根据延迟时间来判断先后顺序。
  4. 实现计算CPU使用时间的方法,将两个进程的处理时间和读写时间相加。
  5. 实现展示时序图的方法,按照FCFS调度顺序展示CPU和IO的时间线,并返回总运行时间。
  6. 实现计算CPU利用率的方法,计算CPU使用时间与总运行时间的比值,反映CPU的利用情况。

四、实验源程序及注释:

package homework.os;

import java.util.Scanner;

/**
 * Date:2024/2/26  9:15
 * Description:模拟操作系统多道批处理作业调度算法(FCFS)
 *
 * @author Leon
 * @version 1.0
 */

public class exm1 {
    public static void main(String[] args) {
        Program p1=new Program();
        Program p2=new Program();
        Tool.initProgram(p1,p2);
        System.out.println("\n\nCPU使用时间为: "+Tool.cpuUseTime(p1,p2)+"\t " +
                "CPU利用率为"+ String.format("%.2f",Tool.cpuUtilization(p1,p2)*100)+"%");
    }
}

class Program{
    int delay;
    int operation[]=new int[3];
}

class Tool{
    public static void initProgram(Program P1,Program P2){
        Scanner scanner=new Scanner(System.in);
        System.out.println("输入P1信息(延迟输入时间,处理时间1,读写时间,处理时间2)");
        P1.delay=scanner.nextInt();
        for(int i=0;i<P1.operation.length;i++){
            P1.operation[i]=scanner.nextInt();
        }

        System.out.println("输入P2信息(延迟输入时间,处理时间1,读写时间,处理时间2)");
        P2.delay=scanner.nextInt();
        for(int i=0;i<P1.operation.length;i++){
            P2.operation[i]=scanner.nextInt();
        }
    }

    public static boolean isP1First(Program p1,Program p2){
        return p1.delay<p2.delay;
    }

    public static int cpuUseTime(Program p1,Program p2){
        return p1.operation[0]+p2.operation[0]+p1.operation[2]+p2.operation[2];
    }

    public static double showTimeTable(Program p1,Program p2){
        Program tmp1,tmp2;
        int operationNums=p1.operation.length;
        int[] timeTable=new int[operationNums*2];
        int curTime=0;
        if(!isP1First(p1,p2)){
            tmp1=p2;
            tmp2=p1;
        }else {
            tmp1=p1;
            tmp2=p2;
        }

        int i=0,j=0;
        curTime+=tmp1.operation[i++];
        timeTable[0]=curTime;
        for(int k=1;k<operationNums;k++){
            int bgTim=curTime+Math.max(tmp1.operation[i],tmp2.operation[j]);
            int smTim=curTime+Math.min(tmp1.operation[i++],tmp2.operation[j++]);
            timeTable[k]=bgTim;
            timeTable[k+operationNums-1]=smTim;
            curTime=bgTim;
        }

        curTime+=tmp2.operation[j];
        timeTable[timeTable.length-1]=curTime;


        System.out.print("===============时序图(ms)===============\n" +
                "CPU : "+timeTable[0]);

        for(int k=1;k<=2;k++){
            System.out.print("\t "+timeTable[k]);
        }
        System.out.print("\t "+timeTable[timeTable.length-1]);


        System.out.print("\nIO : "+"   ");
        for(int k=3;k<=4;k++){
            System.out.print("\t "+timeTable[k]);
        }

        return curTime;

    }

    public static double cpuUtilization(Program p1,Program p2){
        return Tool.cpuUseTime(p1,p2)/Tool.showTimeTable(p1,p2);
    }

}


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

输入P1信息(延迟输入时间,处理时间1,读写时间,处理时间2)

0

60

80

20

输入P2信息(延迟输入时间,处理时间1,读写时间,处理时间2)

5

120

40

40

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

===============时序图(ms)===============

CPU : 60 180        220        260

IO :       140        200

CPU使用时间为: 240   CPU利用率为92.31%

Process finished with exit code 0

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

通过实验,我深入理解了多道批处理系统的调度过程和先来先服务算法的原理。

实践中,我发现先来先服务调度算法可能会导致长作业等待时间过长,不利于提高系统的性能。

通过模拟多道批处理系统的调度过程,我对操作系统中进程调度的重要性有了更深刻的认识,也更加熟悉了Java编程的应用。

                

实验评价及结论:

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

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

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

相关文章

模型 AIPL(认知、兴趣、购买、忠诚)

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。品牌营销的量化与链路化。 1 AIPL模型的应用 1.1 耐克如何利用AIPL模型来推广其运动鞋和服装产品? 耐克利用AIPL模型来推广其运动鞋和服装产品&#xff0c;具体如下&#xff1a; 认知&#xff08;…

为什么总说抖店做不好?做抖店需要注意这些问题,是不是都占了?

大家好&#xff0c;我是电商花花。 今天给大家总结了4个新手不注意又常犯的几个原因&#xff0c;这些建议都是我们做店这些年的实操经验&#xff0c;可以帮助大家做店自查&#xff0c;有责改之&#xff0c;无责加冕。 1、抖店核心是选品而不是玩法 很多新手在刚开始做店抖音小…

8K+/月!学习就业一把梭,祝贺誉天数通陈同学收获心仪offer !

大家好&#xff0c;我是誉天数通的陈同学。 在武汉&#xff0c;网络运维圈的人应该都会听过誉天的名字。作为华为的授权培训合作伙伴&#xff0c;誉天不仅提供专业全面的工程师培训&#xff0c;还以其独特的环境和氛围吸引着无数有志于在网络领域发展的朋友。 一年前的我&#…

用坐标与碰撞检测效果

用pygame碰撞检测子弹 与 子弹 格子检查是否在墙内 结果差不了多少 输出的是碰撞点坐标 在计算角色与强的距离是 你用了几条射线 2024/4/26 13:20:48 在代码中&#xff0c;用于计算角色与墙之间距离的部分是通过投射多条射线来实现的。具体来说&#xff0c;在循环中&#xf…

IDEA插件

POJO to JSON —— 实体转Json Smart Input —— 自动切换中英文 Translation —— 翻译 Maven Helper —— 依赖管理 .ignore —— 忽略提交文件 enum-quick-generate —— 枚举代码生成 粘贴到项目包下

前端更优雅的使用 jsonp

前端更优雅的使用 jsonp 背景&#xff1a;最近项目中又使用到了 jsonp 这一项跨域的技术&#xff0c;&#xff08;主要还是受同源策略影响&#xff09;&#xff0c;下面有为大家提供封装好的函数及对应使用示例&#xff0c;欢迎大家阅读理解 文章目录 前端更优雅的使用 jsonp同…

基于车载点云数据的城市道路特征目标提取与三维重构

作者&#xff1a;邓宇彤&#xff0c;李峰&#xff0c;周思齐等 来源&#xff1a;《北京工业大学学报》 编辑&#xff1a;东岸因为一点人工一点智能公众号 基于车载点云数据的城市道路特征目标提取与三维重构本研究旨在弥补现有研究在处理复杂环境和大数据量上的不足&#xf…

Qt设置可执行程序图标,并打包发布

一、设置图标 图标png转ico: https://www.toolhelper.cn/Image/ImageToIco设置可执行程序图标 修改可执行程序图标 添加一个rc文件,操作如下,记得后缀改为rc 打开logo.rc文件添加代码IDI_ICON1 ICON DISCARDABLE "logo.ico"在项目pro后缀名的文件中添加代码 RC_…

系统盘空间不足调优方式1-APPData/大文件清理

作者&#xff1a;私语茶馆 1.前言 Windows系统盘&#xff08;C盘&#xff09;很容易剩余空间不足&#xff0c;这种情况下会非常影响Windows系统的运行&#xff0c;系统盘约束非常多&#xff0c;不方便在线扩容&#xff0c;因此规划和利用好系统盘是保障整体运行效率的关键。包…

机器人系统开发ros2-基础实践01-学会自定义一个机器人动作aciton实体类

您之前在了解操作教程中了解了action 。与其他通信类型及其各自的接口&#xff08;主题/消息和服务/srv&#xff09;一样&#xff0c;您也可以在包中自定义操作。本教程向您展示如何定义和构建可与您将在下一个教程中编写的action服务器和action 客户端一起使用的操作。 需要理…

Rust 实战练习 - 12. Axum Web 简单demo

Rust Web 历程 Rust 的异步框架tokio非他莫属&#xff0c;而web框架一直是悬而未决&#xff0c;说到底还是因为没有官方成熟的方案指引&#xff0c;大家各玩各的&#xff0c;互不兼容&#xff0c;白白浪费精力。 这个事情一直等到半官方组织tokio推出axum有了改善。但是市场上…

LeetCode455:分发饼干

题目描述 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且每块饼干 j&#xff0c;都有一个…

Orange3数据可视化(组件概览)

概要 大家见过Orange3提供的丰富数据可视化组件吗&#xff1f; Orange3为您提供了一系列生动的图表工具&#xff0c;包括树图、箱线图、小提琴图、分布图、散点图、折线图、条形图、筛图、马赛克图、自由投影、线性投影、雷达图、热力图、韦恩图、轮廓图、毕达哥拉斯树、毕达哥…

关于springboot内置tomcat最大请求数配置的一些问题

前言 springboot内置了tomcat。那么一个springboot web应用&#xff0c;最大的请求链接数是多少呢&#xff1f;很早以前就知道这个是有个配置&#xff0c;需要的时候&#xff0c;百度一下即可。但&#xff0c;事实并非如此&#xff0c;有几个问题我想大多数人还真不知道。比如…

强化学习-MAPPO算法解析与实践-Multi Agent Proximal Policy Optimization

一 算法简介 mappo 是一种将ppo算法扩展到多智能体情况的算法&#xff0c;在讨论过这种算法的论文中&#xff0c;比较有名和权威的是Nips2021上发表的《The Surprising Effectiveness of PPO in Cooperative》。比较遗憾的是&#xff0c;可能作者出于自己不是最早提出mappo算法…

Avalonia UI跨平台WPF

Avalonia是一个强大的框架&#xff0c;使开发人员能够使用.NET创建跨平台应用程序。 它使用自己的渲染引擎绘制UI控件&#xff0c;确保在Windows、macOS、Linux、Android、iOS和WebAssembly等不同平台上具有一致的外观和行为。 官网链接&#xff1a; 官网链接 文档链接&#…

mstsc 远程桌面由于以下原因之一无法连接到远程计算机

问题 想使用win自带的局域网远程工具mstsc远程连接电脑。如何连接&#xff1a;只需要两台电脑在同一个局域网内&#xff0c;然后使用被远程电脑的ip地址、Microsoft用户名和密码。 但是连接的时候会跳出来如下提示&#xff1a; 远程桌面由于以下原因之一无法连接到远程计算机…

【每日刷题】Day23

【每日刷题】Day23 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 138. 随机链表的复制 - 力扣&#xff08;LeetCode&#xff09; 2. 链表的回文结构_牛客题霸_牛客网 …

C++11新特性:lambda表达式

目录 1.lambda表达式 1.1 C98中的一个例子 1.2 lambda表达式 1.3 lamzbda表达式语法 1. lambda表达式各部分说明 2. 捕获列表说明 1.4 函数对象与lambda表达式 1.lambda表达式 1.1 C98中的一个例子 在C98中&#xff0c;如果想要对一个数据集合中的元素进行排序&#xff0…

spring的常用注解

目录 1.前言 2.web url映射 2.1RequestMapping 2.2PostMapping 2.3GetMapping 3.参数接受和接口响应 3.1RequestParam 3.2RequstBoby 3.3ResponseBoby 3.4RestController 4.bean的存储 4.1Controller 4.2Service 4.3Repository 4.4Compontent 4.5Configuration …
最新文章