资源预览内容
第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
第4页 / 共12页
第5页 / 共12页
第6页 / 共12页
第7页 / 共12页
第8页 / 共12页
第9页 / 共12页
第10页 / 共12页
亲,该文档总共12页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
重庆交通大学 综合性设计性实验报告级: 计 科 专业 2010 级四班 名:实验项目名称: 模 拟 进 程 并 发 执 行实验项目性质:操作系统多任务实验所属课程:计算机操作系统实验室(中心): 语 音 大 楼 8 楼 801实验完成时间: 2012 年 11 月 4 日一、实验目的1、通过实验来模拟进程的并发执行,来深入了解什么事操作系统的进程, 以及进程有些什么特性。2、了解进程间是如何做到并发执行的,进程间是如何做到资源共享的。以 及验证进程在运行过程中的进度是随机的,不可控制的。3、通过实验来了解进程的三种状态以及状态间的转换条件。4、加深对进程概念的理解;5、认识进程并发执行的实质6、分析进程争用资源的现象,学习解决进程互斥的方法。二、实验内容及要求用直观的方式模拟进程执行时的过程,显示在屏幕上。实现一个能够直观反应单个进程执行与多个进程并发执行时由于资源竞争 而引起的进程执行速度变化的过程。且进程的初始状态和进度都是随机的,不可 控制的。三、实验设备PC机1台、JCreator LE开发环境四、设计方案 设计主要思想(1) 、每个进程能够随机暂停和开始。模拟多线程并发性。通过进度条来表示进程的运行,通过进度条的运行速 度来表示程序的运行速度。而要体现多进程并发,所以需要在实验中至少定义两 个以上的进程,在实验中定义 3 个进程并发执行。为了使 3 个进程的属性和调度 方法都是顺利执行,则可以通过三个进程类来分别控制进程对象。进程的启动时进程的速度是随机性。要模拟这样一个效果,则可以使用 一个随机数对象产生一个随机的数来定义进程运行的位置。而某个进程的运行速 度也是随机的,由进程获得资源的多少来实现。 设计的主要步骤本实验用 java 语言实现(1) 在 Jcreator 中新建一个 ThreadProcess 类,分别建立三个公共的线程类,Threadl, Thread2, Thread3.(2) 在 ThreadProcess 类的主函数啊中新建三个线程和和窗口。(3) 在主函数产生随机数来控制三条线程的随机调用过程。(4) 在类外分别添加三条进程的控制函数。 能够达到实验的要求效果,程序启动后,进程的运行位置是随机的,每一个进程的运行进度也是随机的,速度可快可慢。而且能够达到系统资源共享的 效果,但其中一个或几个进程停止执行时,其它的进程的执行速度会加快。五、主要代码/package test;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.sql.Time;import java.util.Calendar;import java.util.Date;import java.util.Random;import javax.security.auth.kerberos.KerberosKey;import javax.swing.*;public class ThreadProcess public static void main(String args) ThreadFrame thFrame=new ThreadFrame();thFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);thFrame.show();/创建线程thread1=new Thread1(ThreadPanel.progressBar1);thread2=new Thread2(ThreadPanel.progressBar2);thread3=new Thread3(ThreadPanel.progressBar3);/Thread1.flag=false;/Thread2.flag=false;/Thread3.flag=false;int i=0,j=0;int array=new int1000;Random random=new Random(System.currentTimeMillis(); for(i=0;i1000;i+)j=(int) (Math.random()*10%3);arrayi=j;while(true)for(i=0;i1000;i+)switch (arrayi) case 0:if (thread1.flag=true) thread1.run();else thread1.yield();break;case 1:if(thread2.flag=true) thread2.run();else thread2.yield();break;case 2:if(thread3.flag=true) thread3.run();else thread3.yield();break;public static Thread1 thread1;public static Thread2 thread2;public static Thread3 thread3;class ThreadFrame extends JFramepublic int WIDTH=820;public int HEIGHT=500;public ThreadPanel threadPanel=new ThreadPanel();public Container container;public ThreadFrame()setTitle(“模拟进程并发);setSize(WIDTH,HEIGHT);setLocation(250, 150);container=getContentPane();container.add(threadPanel);class ThreadPanel extends JPanelpublic static JProgressBar progressBar1;public static JProgressBar progressBar2;public static JProgressBar progressBar3;JButton buttonstart1;JButton buttonstop1;JButton buttonstart2;JButton buttonstop2;JButton buttonstart3;JButton buttonstop3;public void paintComponent(Graphics g)super.paintComponent(g);Font f = new Font(“ 宋体,Font.BOLD+Font.ITALIC,15);g.setFont(f);g.drawString(”进程一:,20,90);g.drawString(进程二:,20,210);g.drawString(“进程三:,20,320);public ThreadPanel()setLayout(null);setSize(800, 400);progressBar1=new JProgressBar();progressBar2=new JProgressBar();progressBar3=new JProgressBar();buttonstart1=new JButton(” 开始”);buttonstop1=new JButton(暂停);buttonstart2=new JButton(开始”);buttonstop2=new JButton(暂停);buttonstart3=new JButton(开始);buttonstop3=new JButton(暂停); progressBar1.setBackground(new Color(255,50,255) ); progressBar1.setForeground(new Color(10,90,90); progressBar1.setBounds(100, 70, 480, 40); buttonstart1.setBounds(600, 70, 80, 40);buttonstop1.setBounds(700, 70, 80, 40); add(progressBar1);add(buttonstart1);add(buttonstop1);buttonstart1.addActionListener(new ActionListener() Overridepublic void actionPerformed(ActionEvent arg0) Thread1.flag=true;);buttonstop1.addActionListener(new ActionListener() Overridepublic void actionPerformed(ActionEvent arg0) Thread1.flag=false;);progressBar2.setBackground(new Color(255,90,100) ); progressBar2.setForeground(new Color(90,50,90); progressBar2.setBounds(100, 190, 480, 40); buttonstart2.setBounds(600, 190, 80, 40); buttonstop2.setBounds(700, 190, 80, 40); add(progressBar2);add(buttonstart2);add(buttonstop2); buttonstart2.addActionListener(new ActionListener() Overridepublic void actionPerformed(ActionEvent arg0) Thread2.flag=true;);buttonstop2.addActionListener(new ActionListener() Overridepublic void actionPerformed(ActionEvent arg0) Thread2.flag=false;);progressBar3.setBackground(new Color(100,100,255) ); progressBar3.setForeground(new Color(100,90,90); progressBar3.setBounds(100, 300, 480,40); buttonstart3.setBounds(600, 300, 80, 40); buttonstop3.setBounds(700, 300, 80, 40); add(progressBar3);
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号