多批道处理算法

一、实验目的:

  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.mzph.cn/diannao/4166.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Golang实现一个批量自动化执行树莓派指令的软件(8)辅助模块-远程IP端口是否开放连接(TCP)

简介 基于 上篇 Golang实现一个批量自动化执行树莓派指令的软件(7)辅助模块-本地活动网络&#xff0c; 看看本地活动网络接口网络里面有哪些设备是支持ssh网络的。 环境描述 运行环境: Windows&#xff0c; 基于Golang&#xff0c; 暂时没有使用什么不可跨平台接口&#xff0c;…

Linux驱动开发——(八)Linux异步通知

目录 一、异步通知简介 二、信号处理 2.1 驱动程序中的处理 2.1.1 fasync_struct结构体 2.1.2 fasync操作函数 2.1.3 kill_fasync函数 2.2 应用程序中的处理 三、驱动代码 一、异步通知简介 异步通知的核心就是信号。信号类似于硬件上使用的中断&#xff0c;只不过信号…

TCP协议是如何保证数据可靠传输的?

一、什么样的数据传输是可靠的&#xff1f; 数据正确&#xff1a;传递 123 &#xff1b;接收 123数据顺序正确&#xff1a;传递123 &#xff1b;接收不能是 321或其他数据不重复&#xff1a;传递123 &#xff1b;接收不能是1223或其他数据不被篡改&#xff1a;传递 123 &#…

sqlserver 开启发布订阅模式

主服务器 用于发布与分发 从服务器 订阅 分发服务器的概念&#xff0c;是指用于管理发布与订阅的交互&#xff0c;这里用发布服务器充当即可 主服务器操作&#xff1a; 按需选择&#xff0c;一般选择快照发布 如果不需要排除列则不做任何选择 定义执行时间 这里配置连接到…

WPF之RadioButton单选框和checkbox多选框

RadioButton 单选框: 实现分组的单选框&#xff0c; checkbox 多选框: 表示用户可以选择和清除的控件。 常用属性 GroupName 获取或设置指定哪些 RadioButton 控件互相排斥的名称Content内容IsChecked是否选中 常用事件 checked 选中的事件unchecked 未选中的事件 RadioBu…

Linux server

查看服务器版本&#xff1a; rootpsh-ats-02:/# cat /etc/issue Ubuntu 16.04.3 LTS \n \l rootpsh-ats-02:/# chromedriver --version ChromeDriver 103.0.5060.53 (a1711811edd74ff1cf2150f36ffa3b0dae40b17f-refs/branch-heads/5060{#853}) rootpsh-ats-02:/# google-chrome…

Web前端开发 小实训(二) 简易计算器

实训目的 学生能够使用函数完成简易计算器编写 操作步骤 1、请将加减乘除四个方法生成为以下函数&#xff0c;且有返回值 中文英语加法add减法subtract乘法multi除法division次幂pow()平方根sqrt() 提示&#xff1a; 除法中的除数不能为0&#xff01; 参考代码&#xff1…

Web 服务器(一)

一、Web 服务器介绍 1、WEB服务简介 目前最主流的三个Web服务器是Apache、Nginx、 IIS。 Web服务器一般指网站服务器&#xff0c;是指驻留于因特网上某种类型计算机的程序&#xff0c;可以向浏览器等 Web客户端提供文档&#xff0c;也可以放置网站文件&#xff0c;让全世界浏览…

ES6 Module 的加载实现,浏览器加载,ES6 模块与 CommonJS 模块具体解析(2024-04-23)

目录 1、浏览器加载 1.2 加载规则 1.3 ES6 模块与 CommonJS 模块的差异 2、Node.js 的模块加载方法 2.1 概述 2.1.1 package.json 的 main 字段 2.1.2 package.json 的 exports 字段 &#xff08;1&#xff09;子目录别名 &#xff08;2&#xff09;main 的别名 &…

super与this

目录 原型链与继承继承中的原型链 classsuper与this 我们可能会对一个问题感到好奇&#xff1a;为什么在派生类中&#xff0c;我们需要在调用this之前调用super。我们通常将其视为一种规范&#xff0c;却很少深入探究这个规范的真正意义。许多人认为super不过是ES6之前继承方式…

python作业 切片逆转

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

Django——Auth模块以及admin站点

Django——Auth模块 一、Auth 模块 Auth 用户认证&#xff0c;本质上也是设置 Session。 Django 认证系统同时处理认证和授权认证&#xff1a;验证一个用户是否为 django 声明的用户&#xff0c;如果是可以进行登录授权&#xff1a;决定一个已经验证的用户有哪些功能是允许操…

Python3操作redis百万级数据迁移,单机到单机,集群到集群

Python3操作redis大量数据迁移 脚本 背景使用前使用注意事项脚本总结 背景 之前写过一个用python迁移redis的脚本&#xff0c;但是对于小批量的数据、单节点的&#xff0c;还可以用。对于大量数据&#xff0c;集群模式的就不太适合了。所以写了下面的脚本&#xff0c;而且做了…

【前端开发基础知识快速入门】

前端开发基础知识&快速入门 一、VSCode 使用1.1 安装常用插件1.2 创建项目1.3 创建网页1.4 运行效果二、ES62.1 简介2.2 什么是 ECMAScript2.3 ES6 新特性2.3.1 let 声明变量2.3.2 const 声明常量(只读变量)2.3.3 解构表达式2.3.4 字符串扩展2.3.5 函数优化2.3.6 对象优化…

Ubuntu中apt更新时报错The certificate issuer is unknown的解决办法

Ubuntu 22.04更新apt出现The certificate issuer is unknown的解决办法 问题描述解决办法讨论 问题描述 使用docker安装Ubuntu22.04&#xff0c;官网给出的镜像只是一个裸系统&#xff0c;预装软件很少。换阿里源以后&#xff0c;apt update&#xff0c;出现如下报错&#xff…

【C语言】动态内存分配(一)

目录 1.为什么要有动态内存分配 2.malloc和free 2.1malloc 2.2free 1.为什么要有动态内存分配 我们已经掌握的内存开辟方式有: 但是上述的开辟空间的方式有两个特点: ⭐空间开辟大小是固定的。 ⭐数组在申明的时候&#xff0c;必须指定数组的长度&#xff0c;数组空间一旦…

GateWay具体的使用之全局token过滤器

1: 创建过滤器类 首先&#xff0c;你需要创建一个实现了GatewayFilter接口或者继承AbstractGatewayFilterFactory类的过滤器类。这里以实现GatewayFilter接口为例&#xff0c;创建一个全局token过滤器。 package com.by.filter;import cn.hutool.core.collection.CollUtil; imp…

SQL提升

1. SQL TOP 子句 TOP 子句用于规定要返回的记录的数目。 对于拥有数千条记录的大型表来说&#xff0c;TOP 子句是非常有用的。 **注释&#xff1a;**并非所有的数据库系统都支持 TOP 子句。 1.1 SQL TOP 语法 SQL Server 的语法&#xff1a; SELECT TOP number|percent c…

OpenCV C++实现区域面积筛选以及统计区域个数

目录 1、背景介绍 2、代码实现 2.1 获取原图 2.1.1 区域图像imread 2.1.2 具体实现 2.2 获取图像大小 2.3 阈值分割 2.3.1 阈值分割threshold 2.3.2 具体实现 2.4 区域面积筛选 2.4.1 获取轮廓findContours 2.4.2 获取轮廓面积contourArea 2.4.3 填充区域fil…

http请求与响应

目录 HTTP请求格式 HTTP响应格式 HTTP请求格式 请求行&#xff1a;请求数据第一行(请求方式&#xff0c;资源路径&#xff0c;协议) 请求头&#xff1a;第二行开始&#xff0c;格式key:value 请求体&#xff1a;POST请求&#xff0c;存放在请求参数 非restful方式&#xff1…