进程调度算法-先来先服务调度算法(FCFS)

定义

如果早就绪的进程排在就绪队列的前面,迟就绪的进程排在就绪队列的后面,那么先来先服务(FCFS: first come first service)总是把当前处于就绪队列之首的那个进程调度到运行状态。也就说,它只考虑进程进入就绪队列的先后,而不考虑它的下一个CPU周期的长短及其他因素

基本思想

先来先服务的调度算法:最简单的调度算法,既可以用于作业调度 ,也可以用于程序调度,当作业调度中采用该算法时,系统将按照作业到达的先后次序来进行调度,优先从后备队列中,选择一个或多个位于队列头部的作业,把他们调入内存,分配所需资源、创建进程,然后放入“就绪队列”,直到该进程运行到完成或发生某事件堵塞后,进程调度程序才将处理机分配给其他进程。

算法性能评价

面向用户
周转时间

从作业被提交给系统开始,到作业完成为止的这段时间间隔(作业在后备队列上等待时间、进程在就绪队列上等待时间、进程在cpu上执行时间、进程阻塞时间)

 1. 周转时间=完成时间-到达时间
 2. 平均周转时间:周转时间/进程数 
 3. 带权周转时间:周转时间/服务时间
 4. 平均带权周转时间:带权周转时间/进程数
响应时间

从用户通过键盘提交一个请求开始,到系统首次产生响应为止的时间,包括键盘输入时间、信息处理时间和信息回送时间。

截止时间

某任务必须开始执行的时间(开始截止时间)和执行完成时间(完成截止时间)

以例题来了解

在这里插入图片描述
系统有如下进程,计算平均周转时间和平均带权周转时间

方法
  1. 找出最先到达的进程(该进程的完成时间=到达时间+服务时间)
  2. 根据给出的到达时间,找出下一个到达的进程
    (该进程的完成时间=上一进程的完成时间+该进程的服务时间);
  3. 重复2直至完成所有进程的计算;
过程(A-B-C-D)

在这里插入图片描述
甘特图
在这里插入图片描述
平均周转时间:1+100+199+199/4=124.75
平均带权周转时间:1+1+1.99+199/4 =50.7475

结论

简单公平,有利于长作业,但不利于短作业

### Python 实现先来先服务 (FCFS) 进程调度算法操作系统中,先来先服务(First-Come, First-Served, FCFS调度算法是最简单的非抢占式调度方法之一。在这个算法下,进程按照它们进入就绪队列的顺序被执行[^1]。 下面是一个使用Python编写的简单版本的FCFS调度器: ```python class Process: def __init__(self, pid, arrival_time, burst_time): self.pid = pid # 进程ID self.arrival_time = arrival_time # 到达时间 self.burst_time = burst_time # 执行所需的时间 def fcfs_scheduling(process_list): current_time = 0 # 当前系统时间 total_waiting_time = 0 # 总等待时间 n = len(process_list) process_list.sort(key=lambda p: p.arrival_time) # 按照到达时间排序 for i in range(n): proc = process_list[i] if proc.arrival_time > current_time: current_time = proc.arrival_time waiting_time = current_time - proc.arrival_time print(f"Process {proc.pid} starts at time {current_time}") current_time += proc.burst_time print(f"Process {proc.pid} ends at time {current_time}") total_waiting_time += waiting_time avg_waiting_time = total_waiting_time / float(n) print("\nAverage Waiting Time:", round(avg_waiting_time, 2)) if __name__ == "__main__": processes = [ Process(1, 0, 8), Process(2, 1, 4), Process(3, 2, 9), Process(4, 3, 5) ] fcfs_scheduling(processes) ``` 这段代码定义了一个`Process`类用于表示单个进程,并实现了函数`fcfs_scheduling()`来模拟FCFS调度过程。程序会打印每个进程开始和结束的具体时刻以及平均等待时间[^4]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值