多批道处理算法

server/2024/10/21 6:31:31/

一、实验目的:

  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.ppmy.cn/server/19930.html

相关文章

python作业 切片逆转

题目&#xff1a; &#xff08;反转显示一个整数&#xff09;编写下面的函数&#xff0c;反向显示一个整数。 列如&#xff1a;reserse(3456)。编写一个测试程序&#xff0c;提示用户输入一个整数&#xff0c;然后显示它的反向数。 第一步定义一个函数&#xff1a; def rev…

C++ std::variant 总结

C std::variant 总结 文章目录 一、std::variant 的由来二、std::variant 用法简介2.1、类型安全保证2.2、访问 std::variant 三、std::variant vs OO 本文来记录一下对C标准库的 std::variant (带标签的联合体)用法的总结。参考文章: hhttps://boolan.com/ 一、std::variant …

AcWing 801. 二进制中1的个数——算法基础课题解

AcWing 801. 二进制中 1 的个数 题目描述 给定一个长度为 n 的数列&#xff0c;请你求出数列中每个数的二进制表示中 1 的个数。 输入格式 第一行包含整数 n。 第二行包含 n 个整数&#xff0c;表示整个数列。 输出格式 共一行&#xff0c;包含 n 个整数&#xff0c;其中…

玩转B2B2C,智能名片小程序带你开启“撩”客新纪元!

在这个数字化浪潮汹涌的时代&#xff0c;你还在为如何快速有效地抓住客户而焦头烂额吗&#xff1f;嘿嘿&#xff0c;别担心&#xff0c;现在有了我们的B2B2C AI智能名片小程序&#xff0c;一切都变得轻而易举&#xff01;这款小程序&#xff0c;就像是一个精通社交的“撩客达人…

第29篇 分布式网站

大型分布式网站架构是指将一个网站系统分解为多个独立的组件或服务&#xff0c;这些组件或服务部署在不同的物理或虚拟机器上&#xff0c;协同工作以提供高效、可靠且可扩展的网站功能。这种架构设计旨在应对高并发访问、处理海量数据、保证服务高可用性、快速响应业务变化及增…

网络安全实训Day15

写在前面 电子垃圾&#xff0c;堂堂恢复连载。本来不想分天数梳理了&#xff0c;但是最后要写实训报告&#xff0c;报告里还要有实训日记记录每日学的东西&#xff0c;干脆发这里留个档&#xff0c;到时候写报告提供一个思路。 网络空间安全实训-渗透测试 渗透测试概述 定义 一…

Hive——DML(Data Manipulation Language)数据操作语句用法详解

DML 1.Load Load语句可将文件导入到Hive表中。 hive> LOAD DATA [LOCAL] INPATH filepath [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1val1, partcol2val2 ...)];关键字说明&#xff1a; local&#xff1a;表示从本地加载数据到Hive表&#xff1b;否则从HD…

MIT6.824|课程前置知识

为了让技术栈更宽一点&#xff0c;想学习一下分布式系统&#xff0c;顺便下定决心学习一下go语言吧&#xff01; 由于还没有开始学&#xff0c;这里只总结相关的资料&#xff0c;后续会慢慢进化成MIT6.824课程导学。 Go语言 MIT6.824课程是用go语言来完成的&#xff0c;所以了…