计算机操作系统--FCFS和SJF代码实现

本文介绍了计算机操作系统中两种基本的进程调度算法:先来先服务(FCFS)和最短作业优先(SJF)。FCFS算法按照进程到达的先后顺序进行调度,如果前一进程完成后,后一进程未到达,则等待其到达。SJF算法则优先选择服务时间最短的进程,但实际实现时可能涉及多个细节,如等待服务时间最短的进程尚未到达的情况。
摘要由CSDN通过智能技术生成

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值