package dispatcher;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ShowFrame extends JFrame {
MainApplet ma;
public ShowFrame(MainApplet ma,int n[][]) {
super("Map");
setSize(600, 580);
this.ma=ma;
new InitFrame(this);
MapPane map = new MapPane(n,this);
getContentPane().add(map);
}
protected void processWindowEvent(WindowEvent e) {
super.processWindowEvent(e);
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
}
}
}
class MapPane extends JPanel implements Runnable{
int n[][];ShowFrame sf;
Graphics gr;
Thread FCFSthread,RRthread,RR2thread,SPNthread,SRTthread,HRRNthread,FeelBackthread,FeelBack2thread;
public MapPane(int n[][],ShowFrame sf){
this.n=n;this.sf=sf;
}
public void paintComponent(Graphics g) {
g.clearRect(0,0,600,580) ;
g.drawLine(120,20,580,20);
g.drawLine(120,520,580,520);
for(int i=120;i<=580;i=i+20){
if(i%100==20){
String kn=String.valueOf(i/20-6) ;
g.drawString(kn,i-3,12) ;
g.fillRect(i,15,2,5);
g.drawString(kn,i-3,512) ;
g.fillRect(i,515,2,5);
}
else{g.fillRect(i,16,1,4); g.fillRect(i,516,1,4);}
}
drawFCFS(g);
drawRR(g);
drawRR2(g);
drawSPN(g);
drawSRT(g);
drawHRRN(g);
drawFeelBack(g);
drawFeelBack2(g);
}
public void drawBlock(int num,int s,int pos,Graphics g){
g.fillRect((s+6)*20,num*60+pos*10+25,20,10) ;
}
public void drawFCFS(Graphics g){
g.drawString("FCFS:",50,55) ;
g.drawString("A:",108,35) ;
g.drawString("B:",108,45) ;
g.drawString("C:",108,55) ;
g.drawString("D:",108,65) ;
g.drawString("E:",108,75) ;
FCFSthread=new Thread(this);
FCFSthread.start() ;
}
public void drawRR(Graphics g){
g.drawString("RR:(q=1)",50,115) ;
g.drawString("A:",108,95) ;
g.drawString("B:",108,105) ;
g.drawString("C:",108,115) ;
g.drawString("D:",108,125) ;
g.drawString("E:",108,135) ;
RRthread=new Thread(this);
RRthread.start() ;
}
public void drawRR2(Graphics g){
g.drawString("RR:(q=4)",50,175) ;
g.drawString("A:",108,155) ;
g.drawString("B:",108,165) ;
g.drawString("C:",108,175) ;
g.drawString("D:",108,185) ;
g.drawString("E:",108,195) ;
RR2thread=new Thread(this);
RR2thread.start() ;
}
public void drawSPN(Graphics g){
g.drawString("Next(SPN)",40,235) ;
g.drawString("A:",108,215) ;
g.drawString("B:",108,225) ;
g.drawString("C:",108,235) ;
g.drawString("D:",108,245) ;
g.drawString("E:",108,255) ;
SPNthread=new Thread(this);
SPNthread.start() ;
}
public void drawSRT(Graphics g){
g.drawString("SRT",50,295) ;
g.drawString("A:",108,275) ;
g.drawString("B:",108,285) ;
g.drawString("C:",108,295) ;
g.drawString("D:",108,305) ;
g.drawString("E:",108,315) ;
SRTthread=new Thread(this);
SRTthread.start() ;
}
public void drawHRRN(Graphics g){
g.drawString("HRRN",50,355) ;
g.drawString("A:",108,335) ;
g.drawString("B:",108,345) ;
g.drawString("C:",108,355) ;
g.drawString("D:",108,365) ;
g.drawString("E:",108,375) ;
HRRNthread=new Thread(this);
HRRNthread.start() ;
}
public void drawFeelBack(Graphics g){
g.drawString("FeelBack(q=1)",15,415) ;
g.drawString("Queue numbers=5",0,425) ;
g.drawString("A:",108,395) ;
g.drawString("B:",108,405) ;
g.drawString("C:",108,415) ;
g.drawString("D:",108,425) ;
g.drawString("E:",108,435) ;
FeelBackthread=new Thread(this);
FeelBackthread.start() ;
}
public void drawFeelBack2(Graphics g){
g.drawString("FeelBack(q=2^i)",10,475) ;
g.drawString("Queue numbers=5",0,485) ;
g.drawString("A:",108,455) ;
g.drawString("B:",108,465) ;
g.drawString("C:",108,475) ;
g.drawString("D:",108,485) ;
g.drawString("E:",108,495) ;
FeelBack2thread=new Thread(this);
FeelBack2thread.start() ;
}
public void run(){
int a[]=null;int num=0;
try{
if(Thread.currentThread()==FCFSthread){
a=sortFCFS.sort(n);
}
if(Thread.currentThread()==RRthread){
try{
a=sortRR.sort(n);
}catch(InterruptedException e){}
num=1;
}
if(Thread.currentThread()==RR2thread){
try{
a=sortRR2.sort(n);
}catch(InterruptedException e){}
num=2;
}
if(Thread.currentThread()==SPNthread){
a=sortSPN.sort(n);
num=3;
}
if(Thread.currentThread()==SRTthread){
a=sortSRT.sort(n);
num=4;
}
if(Thread.currentThread()==HRRNthread){
a=sortHRRN.sort(n);
num=5;
}
if(Thread.currentThread()==FeelBackthread){
try{
a=sortFB.sort(n);
}catch(InterruptedException e){}
num=6;
}
if(Thread.currentThread()==FeelBack2thread){
try{
a=sortFB2.sort(n);
}catch(InterruptedException e){}
num=7;
}
}catch(ArrayIndexOutOfBoundsException e){
JOptionPane.showMessageDialog(this,"对不起,输入超出了本程序的表示范围!","fail",JOptionPane.WARNING_MESSAGE);
sf.dispose();
}
for(int i=0;i<a.length ;i++){
gr=getGraphics();
if(num%2==0) gr.setColor(Color.red);
else gr.setColor(Color.blue);
if(a[i]>=0)
drawBlock(num,i,a[i],gr);
try{
Thread.sleep(100) ;
}catch(InterruptedException e){}
}
}
}
java进程调度算法



在计算机科学中,进程调度是操作系统中的核心功能之一,它负责管理系统的运行进程,决定哪个进程应该在何时获得CPU执行权。在这个Java编程项目中,我们聚焦于通过Applet实现不同的进程调度算法,这是一种在Web浏览器中运行的小型Java程序。 我们需要理解进程调度的基本概念。在多任务操作系统中,多个进程可以并发执行,但CPU的执行时间是有限的,因此必须有策略来决定哪个进程应该被选中并赋予CPU时间片。这便是进程调度的作用,它决定了进程的执行顺序和时间分配。 Java Applet是实现这种模拟的理想工具,因为它们可以在用户的机器上本地运行,无需安装额外的软件。在这个项目中,你可以通过编写Java代码来模拟常见的调度算法,如: 1. 先来先服务(FCFS,First-Come, First-Served):这是一种简单的调度策略,按照进程到达的顺序进行执行。在Java中,你可以创建一个队列数据结构来存储进程,并按照它们的到达时间顺序进行处理。 2. 短进程优先(SPF,Shortest Process First):此算法优先选择执行时间最短的进程,以减少平均等待时间。在Java中,可以使用优先级队列来实现这个策略,其中进程的优先级由其执行时间决定。 3. 时间片轮转(RR,Round Robin):每个进程被分配一个固定的时间片,当时间片用完后,进程被放到队列末尾,让其他进程有机会执行。在Java中,可以使用计时器和线程中断机制来实现时间片的切换。 4. 高响应比优先(HRN,Highest Response Ratio Next):综合考虑进程的等待时间和执行时间,计算响应比,然后选取响应比最高的进程。在Java中,你需要维护每个进程的等待时间、执行时间和响应比,并在每次调度时更新这些值。 在实现这些算法时,你需要创建代表进程的数据结构(可能是一个类),包含必要的属性如进程ID、到达时间、执行时间等。然后,你需要一个调度器类来管理这些进程,根据所选的调度算法做出决策。同时,为了可视化这些过程,可以使用Java的图形用户界面(GUI)组件,如JFrame和JPanel,来展示进程的状态和时间变化。 此外,你可能还需要实现一些辅助功能,如读取输入文件以生成进程列表,或者记录和显示调度结果。这可能涉及到文件I/O操作和日志记录。 这个项目将帮助你深入理解操作系统中的进程调度原理,并通过编程实践提升你的Java技能。通过这种方式,你可以更好地掌握并发和多线程概念,这对于任何Java开发者来说都是至关重要的。


















































































- 1

- #完美解决问题
- #运行顺畅
- #内容详尽
- #全网独家
- #注释完整
- zhaoqi_2011-12-26和myeclipse下的项目长的不一样 开始还不知道怎么运行 后来在class里找到一个html打开就可以了 动态生成了图片 很好 就是不能用户自己输入 原本就是模拟嘛还是很不错的
- yuzhongchao2011-12-26不是很好,缺乏文档,而且文件的说明都没有,看起来很吃力
- RonYang2013-05-28想完成作业,但是看不懂!
- 挨踢界太危险了搬砖吧2012-07-08根本不适合需要此类文档的人阅读,本来找这东西就是因为不会,这个文档弄的更麻烦了

- 粉丝: 0
- 资源: 1
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 基于Matlab/Simulink的光伏与风电混合系统仿真及优化
- (源码)基于C语言设计的校园新闻发布管理系统.zip
- DrissionPage-Python资源
- 西门子1200 PLC轴运动控制程序模板详解及其应用
- python翻译pdf
- (源码)基于C++和ROS框架的Franka机器人交互控制系统.zip
- 基于遗传算法的高光谱图像波段选择与OIF优化Python实现
- (源码)基于STM32F4xx微控制器的红外追踪小车项目.zip
- 基于COMSOL的电弧熔池多物理场耦合仿真技术详解
- (源码)基于Arduino的步进电机与传感器控制项目.zip
- (源码)基于Python框架的STM32F429I DISC1目标设备工具包.zip
- 四轮独立驱动电动汽车MPC分层控制器的设计与实现:上层DYC+AFS与下层非线性优化
- (源码)基于Python的密码学库liuzhCrypto.zip
- 基于Simulink的永磁同步电机多故障诊断与处理策略研究
- (源码)基于RP2040的OLED位图动画播放器.zip
- 基于Matlab的图像处理与RGB、HSV颜色空间转换用于样本裤库图片颜色识别


