前段时间各种各样的事情太多了,优快云博客停止有很长一段时间了。今天为大家分享一个JAVA窗体版本的模拟作业调度算法478.目前基于Swing的窗体程序使用越来越少。但是通过窗体程序涉及到的技术在各种应用程序中都有广泛的应用。本次介绍操作系统作业调度模拟系统还是做的非常好,项目涉及到操作系统知识、UI技术、多线程技术等,是一个实战性很强的项目。系统主要根据用户输入的作业数量、和开始时间、结束时间、优先级图形化展示:FCFS、SJF、PSA、HRRN四种调度算法的运行结果。整个项目有完整得源码,希望大家可以喜欢。通过实战项目,喜欢上编程,提高编程水平,一起加油!
项目背景和目的
操作系统调度算法是操作系统中用于分配处理器资源给不同进程或作业的一种策略。调度算法的选择直接影响系统的性能,包括吞吐量、CPU利用率、周转时间等指标。
1 先来先服务(FCFS)
按照作业或进程请求CPU的顺序来分配CPU资源,即先请求的进程先得到服务.
- 公平、简单。
- 有利于CPU繁忙的作业,而不利于I/O繁忙的作业。
- 可能导致短作业等待时间过长。
2 短作业优先(SJF)
- 原理:选择估计运行时间最短的作业或进程优先执行。
- 特点:
- 最短的平均等待时间、平均周转时间和平均带权周转时间。
- 对短作业有利,但可能导致长作业饥饿。
- 有非抢占式和抢占式两种形式,其中抢占式称为最短剩余时间优先(SRTF, Shortest Remaining Time First)优先级调度(Priority Scheduling Algorithm, PSA)
3 优先级调度(PSA)
- 原理:根据任务的紧急程度或重要性来分配CPU资源,每次选择优先级最高的进程执行。
- 特点:
- 可以区分任务的紧急程度,适用于实时操作系统。
- 有静态优先级和动态优先级两种形式。
- 可能导致低优先级进程饥饿。
4. 响应比最高者优先( HRRN)
- 原理:在每次调度时计算各个进程的响应比,选择响应比最高的进程执行。响应比 = (等待时间 + 要求服务时间) / 要求服务时间。
- 特点:
- 综合考虑了作业的等待时间和要求服务时间,既照顾了短作业,又考虑了作业的到达次序。
- 避免了长作业饥饿的问题。
系统功能架构
系统的功能结构入下图所示,其功能结构入下图所示:

运行效果
1 主界面

2 作业参数设置

3 FCFS(先来先服务算法)结果

4 SJF(短作业优先)结果

5 PSA(优先级调度算法)结果

6 HRRN(高响应比)结果

关键代码
public void initIntroduction() throws IOException {
//根据背景动态地设置窗体大小
File picture = new File(new File("").getAbsolutePath() + "/Images/" + Title + ".png");
BufferedImage sourceImg = ImageIO.read(new FileInputStream(picture));
setSize(sourceImg.getWidth(),sourceImg.getHeight());
//位置、布局、关闭操作、可见性,加入中间容器
setLocationRelativeTo(null);
setLayout(null);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
panel = new MyPanel();
setContentPane(panel);
setVisible(true);
}
@Override
protected void paintComponent(Graphics g) { //把算法简介加入到图片里通过弹窗背景形式展示
String imagePath = new File("").getAbsolutePath() + "/Images/" + Title + ".png";
ImageIcon icon = new ImageIcon(imagePath);
Image image = icon.getImage();
g.drawImage(image,0,0,this.getWidth(),this.getHeight(),this);
}
项目总结
(1)在写代码之前,在大脑里一定要把思路理清楚,不能模模糊糊,一定要把功能图和流程图画出来,然后根据它去实现每一个功能块,要多分析,培养一种良好的逻辑思维能力。
(2)在写代码的过程中,一定要采取就近原则,同一个功能,或者对同一个组件的设置一般要写在一块,这样写的程序比较清晰,不容易出错,也便于查找。
(3)要养成良好的注释习惯,一是有利于别人阅读你的程序,同时也有利于自己以后再看,就能很快的读懂程序,提高效率。
(4)把功能模块化,即把实现相同功能的代码段封装成一到一个类或者一个方法中,实现的时候调用即可,这样能提高代码的可读性。
6090

被折叠的 条评论
为什么被折叠?



