进程的调度算法有哪些

1. 批处理系统

1.1 先来先服务(FCFS)

  • 当一个进程就绪后,就加入就绪队列。CUP会根据进入就绪队列的先后顺序依次执行各个进程。
  • 不利于短作业以及IO繁忙的作业,如果短作业后加入队列则需要等待好久
  • 可以用于作业调度也可以用于进程调度

1.2 短作业优先(SJF)

  • 每次开始调度进程时,选择作业执行时间最短的那个进程进行执行。
  • 通常后来的短作业不可抢占正在执行的作业
  • 缩短了作业的等待时间,提高了系统的吞吐量
  • 对长作业不利,可能会陷入饿死状态,而且难以估计作业执行时间

1.2 最短剩余作业优先

  • 短作业优点的可抢占情况。
  • 若在执行过程中来了一个执行时间更短的进程,则抢断当前执行的进程,让这个更短的运行

2. 交互式系统

2.1 时间片轮转法

  • 主要用于分时系统。也是将就绪进程依次放入就绪队列。实行先来先服务原则
  • 但是每个进程只允许一个时间片就切换
  • 进程可以在这个时间片内主动放弃使用CPU,而不必要等时间片用完
  • 如果时间片设置的过短,则会造成进程频繁切换,产生系统开销
  • 若时间片过长,就退化为了先来先服务

2.2 优先级调度算法

  • 根据进程的优先级进行调度

2.3 多级反馈优先队列

  • 设计多个就绪队列,分别赋予不同的优先级,如依次降低优先级,优先级越高的队列获得执行时间片就越长 (但优先级越高的队列,时间片越小)
  • CPU选择先按照优先级选择队列,再按照队列进行FCFS调度选择进程
  • 当有新进程进入提交后,先放入优先级最高的队列队尾,一个时间片还没运行玩就降级到下一个优先级队列中去
  • 仅当优先级较高的队列为空时,才调度优先级较低的队列中的进程执行,如果此时有新的进程加入优先级高的队列,则抢先执行新新进程,并把被抢断的进程放到原队列的队尾
  • 提高了系统吞吐率和也照顾了短进程和IO型进程

2.4 高响应比优先

  • 主要用于作业调度
  • 是对先来先服务和短作业优先调度的一种综合平衡
  • 首先会优先执行短作业,但是如果长作业等待时间过长就执行长作业
  • 通过计算每个作业的响应比,从中选择响应比最高的作业进行运行。
  • 响应比:(等待时间+要求服务的时间)/ 要求服务的时间

一些基本概念

  • 运行时间:作业需要运行的时间
  • 周转时间:作业完成时间点 — 作业提交时间点
  • 等待时间:周转时间 — 运行时间
  • 响应时间:首次产生响应的时间点 — 作业提交时间点
  • 带权周转时间:周转时间/运行时间

3. Linux中的进程调度算法

void Schedule(void) {
    while (1) {
        c = -1; next = 0; i = NR_TASKS;
        p = &task[NR_TASKS];
        while (--i){
            if (p->state == TASK_RUNNING && p->counter > c) {
                c = p->counter; next = i;
            }
        }
        if (c) break;
        for (p = &LAST_TASK; p > &FIRST_TASK; --p) {
            p->counter = p->counter >> 1 + p->priority;
        } 
    }
    switch_to(next);
}
  • counter:即代表了任务的优先级,有代表任务的时间片大小
  • 首先会在就绪任务中选择优先级最大的任务执行,它的时间片也是counter值
  • 若就绪任务中的所有的counter都为0(就绪任务的时间片都用完了),将所有任务的counter先除以2再加上一个初始值priority。
    • 这样做阻塞的任务它的优先级会越来越大,当阻塞任务停止阻塞,它会优先被执行
    • 而且阻塞任务优先级最高趋近与2*priority
常用的进程调度算法有以下几种: 1. 先来先服务(FCFS):按照进程到达的先后顺序进行调度,先到达的进程先执行。 2. 最短作业优先(SJF):选择执行时间最短的进程优先执行。 3. 优先级调度(Priority Scheduling):为每个进程赋予一个优先级,优先级高的进程先执行。 4. 时间片轮转(Round Robin):将CPU时间划分为固定的时间片,按照到达时间的先后顺序轮流执行进程,每个进程执行一个时间片后进入等待队列,等待下一次执行。 5. 多级反馈队列调度(Multilevel Feedback Queue):将进程按照优先级划分为多个队列,每个队列采用不同的调度算法,随着时间的推移,进程的优先级会发生变化,进程会从一个队列移动到另一个队列。 选择进程调度算法的准则有以下几点: 1. 公平性:进程调度算法应该公平地为每个进程分配CPU时间,避免某些进程长时间占用CPU,导致其他进程无法运行。 2. 响应时间:进程调度算法应该尽可能地减少进程的等待时间,使得进程能够快速响应用户的请求。 3. 吞吐量:进程调度算法应该尽可能地提高系统的吞吐量,使得系统能够同时处理更多的进程,提高系统的处理效率。 4. 资源利用率:进程调度算法应该尽可能地提高系统的资源利用率,避免CPU空闲造成资源的浪费。 5. 实现复杂度:进程调度算法的实现应该尽可能地简单,避免实现过程中出现错误,导致系统的不稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值