计算机操作系统实验:作业调度算法的实现

作业调度算法先来先服务调度算法采用python实现

  1. 先来先服务调度算法—— FCFS法(First Come First Serve)

• 基本思想:按照作业提交/进程变为就绪状态的先后次
序,调入系统或分派CPU,换句话说,调度程序每次选择
的作业/进程是等待时间最久的,而不管其运行时间的长短。

• 特点
– 系统开销小,实现简单
– 比较有利于长作业和CPU繁忙的作业,而不利于短作业和
I/O繁忙的作业。

• 在实际操作系统和一般应用程序中较常采用FCFS算法,且
通常和其他算法配合起来。

• FCFS算法既可用于作业调度,也可用于进程调度。

示例:
计算机操作系统实验:作业调度算法的实现_第1张图片

编程实现:(采用的编译器是python2.7)

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#先来先服务调度算法
# @Author  : SundayCoder-俊勇
# @File    : shiyan22.py
import ast
print "先来先服务调度算法"
str=raw_input("请按照示例输入作业,每次输入隔着一个空格例如:1(作业号) 8.30(开始时间) 2.00(执行时间):")
#用list来保存作业的相关信息
list=str.split(" ")
# 得到到达时间
gettime=[]
length=len(list)/3
for i in range(0,length):
  gettime.append(list[1+3*i])
# 得到执行时间长度
runtime=[]
# 对到达时间排序
gettime.sort()
# 执行队列顺序
queue=[]
liststr=list
for i in range(0,len(gettime)):
    # 对到达时间一样做处理
    s1=liststr.index(gettime[i])
    s=s1-1
    queue.append(liststr[s])
    liststr[s1]="sss"
# 得到执行队列排序完之后的执行时间
for i in range(0,len(queue)):
    indexoflist= list.index(queue[i])+2
    runtime.append(list[indexoflist])
print "依次执行的作业序号如下:"
for e in queue:
    print e
# 得到各个作业的完成时间
endtime=[]
# 使用ast模块将list的str转换成为float来进行计算。
endtime.append(ast.literal_eval(gettime[0])+ast.literal_eval(runtime[0]))
for i in range(1,len(runtime)):
    if(endtime[i-1]>ast.literal_eval(gettime[i])):
       endtime.append(endtime[i-1]+ast.literal_eval(runtime[i]))
    else:
        endtime.append(ast.literal_eval(gettime[i]) + ast.literal_eval(runtime[i]))
# 计算周转时间
turnovertime=[]
for i in range(0,len(endtime)):
    turnovertime.append(endtime[i]-ast.literal_eval(gettime[i]))
print "平均周转时间如下:"
sum=0
for i in range(0,len(turnovertime)):
    sum=sum+turnovertime[i]
print sum/len(turnovertime)
print "带权周转时间如下:"
sum2=0
for i in range(0,len(turnovertime)):
    sum2=sum2+(turnovertime[i]/ast.literal_eval(runtime[i]))
print sum2/len(turnovertime)

运行结果:

先来先服务调度算法
请按照示例输入作业,每次输入隔着一个空格例如:1(作业号) 8.30(开始时间) 2.00(执行时间):1 8.0 2.0 2 8.5 0.5 3 9.0 0.1 4 9.5 0.2
依次执行的作业序号如下:
1
2
3
4
平均周转时间如下:
1.725
带权周转时间如下:
6.875

大家需要注意的是怎么去输入作业的相关信息,例如 1 8.0 2.0 表示作业号为1 到达时间为8.0 执行时间为2.0(一定不能写成2,时间表示一定要加上.0)

你可能感兴趣的:(python编程,计算机系统结构)