实验研究内容:
输入进程的个数,每个进程的名称及每个进程需要工作的时间,本实验中假定对CPU时间片设置为一个时间单位,首先输入进程的个数,然后输入进程名称,最后输入进程所需要的处理时间。然后通过模拟程序,显示以下信息:
1)处理机对进程的调度过程。
2)计算每个进程的周转时间(假设N个进程在0时刻几乎同时达到,处理机对进程的调度顺序和输入进程的顺序一致)。
示例:
若输入:
3
A 2
B 3
C 4
进程名称 每个进程需要工作的时间
显示:
CPU时刻:1
正在运行的进程:A
Name run req status
A 1 2 R R:就绪 E: 结束
B 0 3 R
C 0 4 R
CPU时刻:2
正在运行的进程:B
Name run req status
A 1 2 R
B 1 3 R
C 0 4 R
CPU时刻:3
正在运行的进程:C
Name run req status
A 1 2 R R:就绪 E: 结束
B 1 3 R
C 1 4 R
CPU时刻:4
正在运行的进程:A
Name run req status
A 2 2 E
B 1 3 R
C 1 4 R
CPU时刻:5
正在运行的进程:B
Name run req status
B 2 3 R
C 1 4 R
CPU时刻:6
正在运行的进程:C
Name run req status
B 2 3 R
C 2 4 R
CPU时刻:7
正在运行的进程:B
Name run req status
B 3 3 E
C 2 4 R
CPU时刻:8
正在运行的进程:C
Name run req status
C 3 4 R
CPU时刻:9
正在运行的进程:C
Name run req status
C 4 4 E
A的周转时间:4ms
B的周转时间:7ms
C的周转时间:9ms
思路:跟着这些示例的提示来,走一遍示例的过程,就能模拟出处理机调度的时间片轮转算法的基本思想。其实类似于一道编程题,不用太熟悉处理机调度的时间片轮转算法也可以。下面直接上实现代码。
1.java实现,运用到队列的知识
进程实体类
Process.java
public class Process {
String name;
int req;
int run;
int all;
String status;
int time;
@Override
public String toString() {
return name+"\t"+run+"\t"+req+"\t"+status;
}
}
测试类
Test.java
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Test {
public static void input() {
int num, counter = 0;
Queue<Process> queue = new LinkedList<>();
ArrayList<Process> a = new ArrayList<>();
Scanner s = new Scanner(System.in);
Scanner c = new Scanner(System.in);
System.out.println("输入进程个数");
num = s.nextInt();
for (int i = 0; i < num; i++) {
Process p = new Process();
p.status = "R";
System.out.println("输入进程名");
p.name = c.nextLine()