FCFS实现较简单:
1.按照时间先后到达顺序,进行进程对列的构造
2.有的时候一个进程处理结束但是后一个进程还未到,则后一个进程的完成时间=进程到达时间+进程服务时间
SJF实现有许多细节要注意:终于有用到for...else结构了
1.第一个是最早到达的进程,而不管他是否服务时间最短
2.后面的进程选取服务时间最短的
2.1:有可能进程处理完成后,后面服务时间最短的进程还未到达,则选取其他已经到达且服务时间最短的,我这里实现的是已经到达的进程中的第一个,不一定是服务时间最短的,也不一定是最早的
2.2:没有则等待服务时间最短的到达(但是还有比他更早到达的呢,这个算法应该要是动态的,但是实现好难)
"""
from multiprocessing import Process
import time
import datetime
import os
"""
import random
import functools
n = int(input('please input process num:'))
MaxNum = 100 # 最大进程数
Pid_queue = [] # 进程队列
Pid_set = [] # 进程集
ArrivalTime = random.sample(range(n), n) # 到达时间
ServiceTime = random.sample(range(1, 13), n) # 服务时间
FinishTime = [] # 完成时间
WholeTime = [] # 周转时间
WeightWholeTime = [] # 带权周转时间
Average_WT_FCFS, Average_WT_SJF = 0, 0 # 平均周转时间
Average_WWT_FCFS, Average_WWT_SJF = 0, 0 # 平均带权周转时间
absolute_first_index = 0
def initial(num):
"""初始化"""
for i in range(num):
print("please input {0} process' id:".format(i))
ID = str(input())
Pid_set.app