基于Java实现单处理器系统的进程调度

资源下载地址:https://download.csdn.net/download/sheziqiong/86167141
资源下载地址:https://download.csdn.net/download/sheziqiong/86167141

一、需求分析

明确陈述说明程序设计的任务,强调的是程序要做什么,主要包括:

  1. 输入的形式和输入值的范围;

    输入形式是键盘输入和鼠标输入,键盘输入值的范围是[0,10]的整数,鼠标输入的选择有确认、四种调度算法(时间片轮转调度、优先数调度、最短进程优先调度和最短剩余时间调度优先调度)、开始模拟、清空和退出。

  2. 输出的形式;

    输出的形式为java图形界面显示。根据输入模拟进程调度,输出由动态面板显示出来。

  3. 程序所能达到的功能;

    1. 创建进程,模拟四种调度算法,通过图形界面动态显示过程与结果。

    2. 清空前一次的模拟结果。

  4. 测试数据:包括正确的输入及其输出结果和含有错误的输入及其输出结果。

    正确的输入:1、进程数n:0<=n<=10,确认。2、选择四种调度算法。3、开始模拟。

    正确的输出结果:能按所选的调度算法正确地执行,并且将结果显示在图形界面窗口。

    错误的输入:1、进程数n:n<0||n>10。2、缺少点击确认、四种调度算法、开始模拟等按钮。

    错误的输出结果:1、进程数n非法输入时会弹出窗口提示。2、程序无法执行。

二、概要设计

说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。

所有抽象数据类型的定义

Class Main     //程序入口,给界面的位置、大小和名称赋值。
Class UI extends JFrame    //构建图形界面。
Class Label implements Runnable    //刷新界面的数据,形成动态界面。
Class Pcb   //定义进程块。
Class comparePri implements Comparator<Pcb>   //比较优先级的大小,进行排序。
Class compareTime implements Comparator<Pcb>   //比较剩余时间的大小,进行排序。
Class SchedulingMethod   //创建进程以及四种调度算法的实现。

主程序的流程

构建图形界面->各线程启动,形成动态界面->键盘输入进程数->鼠标选择调度方法->开始模拟,数据刷新->清空->重复/退出

各程序模块之间的层次(调用)关系

在这里插入图片描述

三、详细设计

实现概要设计中定义的所有数据类型,对每个操作只需要写出伪码算法;对主程序和其他模块也都需要写出伪码算法(伪码算法达到的详细程度应能够按照伪码算法在计算机键盘上直接输入高级程序设计语言程序);画出函数的调用关系图。
在这里插入图片描述

四、调试分析

内容包括:

1.调试过程中遇到的问题是如何解决的以及对设计与实现的讨论和分析

一开始没有使用线程做动态面板,导致无法实时更新进程的信息属性,监听器和面板刷新加入线程后就解决了问题。

图像界面显示与设计的界面基本一致,实验要求的功能也都实现了。不过在某些功能上还有点瑕疵,比如说只设计了显示当前进程的信息属性,不能一次性观察全部进程的信息属性;“清空”不能一次性清空。

2.算法的时间复杂性(包括基本操作和其他算法的时间复杂性的分析)和改进设想

算法的时间复杂性不高,只有一个循环,为O(n)。四种调度算法的代码重复率较高,每个改动的地方不多,可以找出相同的地方,整合到一个函数,这样代码就更精简了。

3.设计过程的经验和体会

这次实验我是先想好图形界面并将其实现才开始写调度算法,然后把操作流程每一步想好,一步一步进行,这样一来图形界面的按钮、文本框和标签需要的功能就能有序的写出来了,不像先在控制台写好调度算法,实现之后连接图形界面的时候需要改大量代码,并且容易出错。虽然过程中遇到不少问题,但是通过自己的思考、在网络翻阅大量帖子寻找答案及其同学的帮助,最终还是把问题解决了。本次实验让我又发现了不少知识盲区,通过做实验的方式加深了对这些问题的印象,还是挺有意思的。

4.实现过程中出现的主要问题及解决方法

一开始做的图形界面并不满意,接触到绝对布局后就得到了改善。在调试调度方法时,图形界面的数据无法实时刷新,翻阅资料后了解到需要使用多线程才能实现动态界面,于是加了线程给监听器和标签,让数据实时更新。解决这一问题后又遇到了,延迟时间的改变会导致动态界面的数据出现错误显示,后来经过多次的调试,找到了正确的延迟时间。

五、用户使用说明

说明如何使用你编写的程序,详细列出每一步的操作步骤。

  1. 在文本框里输入进程数n(0<=n<=10),并点击确认。
  2. 选择调度算法(四选一,有提示当前所选择的调度算法)。
  3. 点击“开始模拟”。开始模拟进程调度,此时可以观察进程的信息属性的变化情况。
  4. 点击“清空”。数据全部清空初始化。
  5. 此时可以选择重新模拟,即重复上述操作;也可以选择退出程序,即点击“退出”,窗口关闭,程序结束运行。

六、测试与运行结果

列出你的测试结果和运行情况(即运行时的关键画面),包括输入和输出。这里的测试数据应该完整和严格,最好多于需求分析中所列。

值得注意的是,报告的各种文档资料,要在程序开发的过程中逐渐充实形成,而不是最后补写。必要时可在报告中附部分关键源代码,但不需要附全部源代码。

初始界面

在这里插入图片描述

非法输入如下图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码如下:

boolean error = false;
if((Pattern.compile("[0-9]*")).matcher(text.getText()).matches())  //检查输入的进程数是否为整型
    if(Integer.parseInt(text.getText()) >= 0 && Integer.parseInt(text.getText()) <= 10)
	    SchedulingMethod.setN(Integer.parseInt(text.getText()));
    else 
	    error = true;
else
    error = true;
if(error)
JFrame newJFrame = new JFrame("非法输入");

正确输入时不弹出窗口提示

时间片轮转调度如下图所示

在这里插入图片描述

开始模拟

在这里插入图片描述

进程全部运行结束

在这里插入图片描述

清空

在这里插入图片描述

优先数调度如下图所示

开始模拟

在这里插入图片描述
在这里插入图片描述

进程全部运行完

在这里插入图片描述

清空

在这里插入图片描述

最短进程优先调度如下图所示

开始模拟

在这里插入图片描述

进程全部运行完

在这里插入图片描述

清空

在这里插入图片描述

最短剩余时间优先调度如下图所示

开始模拟

在这里插入图片描述

进程全部运行完

在这里插入图片描述

清空

在这里插入图片描述

点击退出,程序便结束运行。

代码如下:

btn03 = new JButton("退出");
		btn03.setLocation(50,350);
		btn03.setSize(200, 100);
		btn03.setFont(font);
		btn03.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO 自动生成的方法存根
				new Thread(new Runnable() {
					@Override
					public void run() {
						// TODO 自动生成的方法存根
						System.exit(0);
					}
				}).start();
			}
		});
		panel.add(btn03);

资源下载地址:https://download.csdn.net/download/sheziqiong/86167141
资源下载地址:https://download.csdn.net/download/sheziqiong/86167141

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是使用 Java 的界面类实现处理器进程调度算法的示例代码: ```java import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ProcessScheduling extends JFrame implements ActionListener { private JLabel label1; private JLabel label2; private JLabel label3; private JTextField textField1; private JTextField textField2; private JTextField textField3; private JButton button1; private JButton button2; public ProcessScheduling() { // 设置窗口标题 setTitle("处理器进程调度算法"); // 创建标签和文本框组件 label1 = new JLabel("进程名称:"); label2 = new JLabel("进程需要时间:"); label3 = new JLabel("进程优先级:"); textField1 = new JTextField(); textField2 = new JTextField(); textField3 = new JTextField(); // 创建按钮组件 button1 = new JButton("添加进程"); button2 = new JButton("开始调度"); // 添加事件监听器 button1.addActionListener(this); button2.addActionListener(this); // 创建面板 JPanel panel = new JPanel(new GridLayout(4, 2)); panel.add(label1); panel.add(textField1); panel.add(label2); panel.add(textField2); panel.add(label3); panel.add(textField3); panel.add(button1); panel.add(button2); // 将面板添加到窗口中 add(panel); // 设置窗口大小和位置 setSize(400, 150); setLocationRelativeTo(null); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public void actionPerformed(ActionEvent e) { if (e.getSource() == button1) { // 添加进程 String name = textField1.getText(); int time = Integer.parseInt(textField2.getText()); int priority = Integer.parseInt(textField3.getText()); // TODO: 将进程添加到进程队列中 System.out.println("添加进程:" + name + " " + time + " " + priority); // 清空文本框 textField1.setText(""); textField2.setText(""); textField3.setText(""); } else if (e.getSource() == button2) { // 开始调度 // TODO: 实现进程调度算法 System.out.println("开始调度"); } } public static void main(String[] args) { new ProcessScheduling(); } } ``` 在这个示例中,我们使用 Java 的界面类实现了一个基本的处理器进程调度算法。界面包括三个文本框用于输入进程的名称、需要时间和优先级,以及两个按钮,一个用于添加进程,另一个用于开始调度。当用户点击添加进程按钮时,程序将从文本框中获取进程的信息,并将其添加到进程队列中。当用户点击开始调度按钮时,程序将根据进程调度算法对进程队列进行调度。这个示例中的进程调度算法还没有实现,需要根据具体的需求进行实现

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shejizuopin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值