📌  相关文章
📜  LJF和LRJF CPU调度算法的区别(1)

📅  最后修改于: 2023-12-03 15:02:45.947000             🧑  作者: Mango

LJF和LRJF CPU调度算法的区别

简介

LJF (Longest Job First) 和 LRJF (Longest Remaining Job First) 是两种常见的 CPU 调度算法。这两种算法是基于作业的执行时间来进行作业调度的,相对于其他算法更加注重作业的长短和优先级,可以更好地满足作业的不同需求和特点。下面详细介绍两种算法的不同之处。

LJF(Longest Job First)

LJF 算法是按照作业的执行时间长短来进行作业调度的。将所有进入系统的作业按照执行时间长度从长到短进行排序,然后依次执行,直到所有作业执行完毕。这里解释一下执行时间的含义:作业的执行时间是指从该作业开始执行到完成所需要的时间。如果一个作业有多个阶段,那么每个阶段的执行时间之和即为该作业的执行时间。

LJF 的优点是:可以充分利用 CPU 的时间片,让执行时间长的作业优先执行,从而提高作业调度的效率。但是,LJF 也有缺点:如果有一个执行时间短的作业排在了队列的后面,那么它的等待时间会非常长,而且可能会因为等待时间太长而造成用户体验不佳。因此,需要考虑更加细致的策略——LRJF。

LRJF(Longest Remaining Job First)

LRJF 算法也是按照作业的执行时间长短来进行作业调度的,但是与 LJF 不同的是,LRJF 在每个时间片结束时都重新计算作业的剩余执行时间,并按照剩余执行时间从长到短进行排序。

LRJF 的优点是:相对于 LJF,LRJF 更加平衡了每个作业的等待时间,可以提高用户的体验。此外,LRJF 对于执行时间短的作业也有一定的优势,因为每个时间片结束时都重新计算作业的剩余执行时间,所以短作业的等待时间也会大大减少。

总结一下,LJF 和 LRJF 的区别主要在于对待执行时间短的作业的态度,LJF 偏向于执行时间长的作业,而 LRJF 能够更加平衡不同作业的等待时间。

代码片段
def ljf(job_list):
    # 按照执行时间从长到短排序
    job_list.sort(key=lambda x: x['time'], reverse=True)
    # 依次执行作业
    for job in job_list:
        execute(job)


def lrjf(job_list):
    # 按照执行时间从长到短排序
    job_list.sort(key=lambda x: x['time'], reverse=True)
    # 依次执行作业
    while job_list:
        job_list.sort(key=lambda x: x['time'], reverse=True)
        job = job_list.pop(0)
        execute(job)

以上是 Python 语言实现的简单示例,其中 job_list 是一个作业列表,每个作业包含一个执行时间属性 time。在 ljf 函数中,按照执行时间从长到短排序,然后依次执行;而在 lrjf 函数中,每个时间片结束时重新计算每个作业的剩余执行时间,然后再次进行排序,优先执行剩余执行时间最长的作业。