计算机操作系统实验-进程与并发执行

更新时间:2023-10-20 09:13:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

重庆交通大学 综合性设计性实验报告

班 级:

姓 名:实验项目名称:

实验项目性质:

实验所属课程:

实验室(中心):

指 导 教 师 :

实验完成时间: 计 科 专业 2010级四班 叶秀梁 模 拟 进 程 并 发 执 行 操 作 系 统 多 任 务 计算机操作系统 语 音 大 楼 8 楼 801 米波 2012 年 11 月 4 日

教师评阅意见:

实验成绩: 签名: 年 月 日

一、实验目的

1、通过实验来模拟进程的并发执行,来深入了解什么事操作系统的进程,以及进程有些什么特性。

2、了解进程间是如何做到并发执行的,进程间是如何做到资源共享的。以及验证进程在运行过程中的进度是随机的,不可控制的。

3、通过实验来了解进程的三种状态以及状态间的转换条件。 4、加深对进程概念的理解; 5、认识进程并发执行的实质

6、分析进程争用资源的现象,学习解决进程互斥的方法。

二、实验内容及要求

用直观的方式模拟进程执行时的过程,显示在屏幕上。

实现一个能够直观反应单个进程执行与多个进程并发执行时由于资源竞争而引起的进程执行速度变化的过程。且进程的初始状态和进度都是随机的,不可控制的。

三、实验设备

PC机1台、JCreator LE开发环境

四、设计方案

㈠ 设计主要思想

(1)、每个进程能够随机暂停和开始。

(2)、用Java的多线程来实现。

模拟多线程并发性。通过进度条来表示进程的运行,通过进度条的运行速度来表示程序的运行速度。而要体现多进程并发,所以需要在实验中至少定义两个以上的进程,在实验中定义3个进程并发执行。为了使3个进程的属性和调度方法都是顺利执行,则可以通过三个进程类来分别控制进程对象。

进程的启动时进程的速度是随机性。要模拟这样一个效果,则可以使用一个随机数对象产生一个随机的数来定义进程运行的位置。而某个进程的运行速度也是随机的,由进程获得资源的多少来实现。 ㈡ 设计的主要步骤

本实验用java语言实现

(1) 在Jcreator中新建一个ThreadProcess类,分别建立三个公共

的线程类,Thread1,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 int[1000];

Random random=new Random(System.currentTimeMillis()); {

j=(int) (Math.random()*10%3); array[i]=j; } {

for(i=0;i<1000;i++) {

switch (array[i]) {

case 0:

if (thread1.flag==true) { } else { } break;

if(thread2.flag==true){ } else {

thread2.yield(); thread2.run(); thread1.yield(); thread1.run();

for(i=0;i<1000;i++)

while(true)

case 1:

}

}

} break;

if(thread3.flag==true){ } else { } break;

thread3.yield(); thread3.run();

}

}

case 2:

}

public static Thread1 thread1; public static Thread2 thread2; public static Thread3 thread3;

class ThreadFrame extends JFrame { }

class ThreadPanel extends JPanel {

public int WIDTH=820; public int HEIGHT=500;

public ThreadPanel threadPanel=new ThreadPanel(); public Container container; { }

setTitle(\模拟进程并发\setSize(WIDTH,HEIGHT); setLocation(250, 150); container=getContentPane();

public ThreadFrame()

container.add(threadPanel);

本文来源:https://www.bwwdw.com/article/zgbf.html

Top