首页 > 系统相关 >【操作系统】4.进程调度算法

【操作系统】4.进程调度算法

时间:2024-11-10 22:42:52浏览次数:1  
标签:优先级 操作系统 调度 实时 算法 时间 进程

进程调度算法决定了进程在何时、以何种顺序被分配到 CPU 上执行。不同的调度算法适合不同类型的操作系统和应用需求,以下是一些常用的进程调度算法:

1. 先来先服务调度(FCFS: First-Come, First-Served)

  • 算法原理:按进程到达的先后顺序分配 CPU,先到达的进程先被处理。
  • 优点:简单易实现,公平性好。
  • 缺点:可能导致“饥饿”问题,即后来的短任务可能要等待很长时间,导致平均等待时间较长。
  • 适用场景:适合需要简单管理的系统,但不适用于需要快速响应的实时系统。

2. 短作业优先调度(SJF: Shortest Job First)

  • 算法原理:选择估计运行时间最短的进程先执行,可以是非抢占式或抢占式。
  • 优点:在理想情况下可实现最小的平均等待时间。
  • 缺点:无法准确预测进程的执行时间(尤其是动态任务);可能导致长作业“饥饿”。
  • 适用场景:适合批处理系统,适用于已知任务长度的情况。

3. 最短剩余时间优先(SRTF: Shortest Remaining Time First)

  • 算法原理:这是 SJF 的抢占式版本。每次有新进程到达时,若新进程的剩余时间短于当前进程,则抢占当前进程。
  • 优点:能进一步减少平均等待时间。
  • 缺点:实时性差,长任务可能长期等待。
  • 适用场景:与 SJF 类似,适合批处理系统。

(  短作业优先 =》减少平均等待时间 )

4. 优先级调度(Priority Scheduling)

  • 算法原理:为每个进程分配一个优先级,优先级高的进程优先执行。可以是抢占式或非抢占式。如果两个进程优先级相同,则采用 FCFS 的方式调度。
  • 优点:能保证高优先级任务及时执行。
  • 缺点:可能出现“优先级反转”(低优先级进程占用资源,导致高优先级进程无法执行)和“饥饿”(长时间得不到调度)问题。通过引入老化机制(逐渐提高长时间等待的进程优先级)可以缓解饥饿。
  • 适用场景:适用于需要根据任务优先级灵活分配资源的系统,如实时系统。

5. 时间片轮转调度(Round Robin)

  • 算法原理:为每个进程分配一个固定的时间片,超出时间片则切换到下一个进程,未完成的进程会被放回队列等待下一次轮到。
  • 优点:简单公平,适合多任务系统,能保证每个任务都能得到处理。
  • 缺点:时间片长度设置不当可能导致较频繁的上下文切换,增加了系统开销;时间片过长又会导致响应变慢。需要根据系统的负载和应用场景来调整,一般在几毫秒到几十毫秒之间。
  • 适用场景:广泛应用于分时系统、交互式系统,适合多用户环境。

6. 多级反馈队列调度(Multilevel Feedback Queue Scheduling)

  • 算法原理:进程被分配到多个优先级队列中,每个队列有不同的时间片长度和优先级。优先级高的队列时间片较短,优先处理高优先级队列的进程。在任务执行过程中,可以动态优先级调整,即长时间等待的低优先级进程会被提升到更高的优先级队列,以避免长作业饥饿。
  • 优点:结合了 短作业优先时间片轮转 的优点,能够高效地处理不同类型的任务。它通过根据任务的执行时间动态调整优先级,可以有效地减少平均等待时间,同时避免长时间的任务阻塞短任务。
  • 缺点:算法复杂,管理多个队列需要额外开销。
  • 适用场景:适用于需要处理不同类型任务的系统,尤其是需要高响应速度和公平性的操作系统。

7. 实时调度算法

       实时系统中需要特殊的调度算法,以确保任务在特定时间完成。以下是常见的实时调度算法:

  • 最早截止时间优先(EDF: Earliest Deadline First):优先执行最接近截止时间的任务,适用于动态优先级实时系统。
  • 最低松弛时间优先(LST: Least Slack Time):计算任务的松弛时间(截止时间减去剩余执行时间),选择松弛时间最小的任务执行。

       这些实时调度算法保证了系统在特定时间内完成高优先级任务,适合控制系统和嵌入式系统等需要精确时序控制的场景。

拓展:

现代操作系统通常会根据实际需求,将多种调度算法结合起来使用,以实现最佳的性能和响应速度。例如,Windows 和 Linux 中使用的调度算法结合了优先级、时间片轮转和多级反馈队列,以适应不同类型的任务和用户需求。

1). Windows 操作系统的调度算法

Windows 的调度算法基于优先级调度多级反馈队列,同时结合了抢占式调度。Windows 中将进程分为不同优先级级别,从 0 到 31,其中:

  • 0 级用于系统空闲进程(Idle Process),
  • 1 到 15 级用于普通进程(普通用户进程),
  • 16 到 31 级用于实时进程(Real-Time Processes)。

Windows 调度算法的关键特点

  1. 优先级调度

    • Windows 会根据进程的优先级来进行调度,高优先级的进程优先获得 CPU。优先级包括 静态优先级动态优先级,动态优先级在进程执行过程中可能会发生调整,例如长时间没有获得 CPU 的低优先级进程会被提升优先级,以避免饥饿现象。
  2. 抢占式调度

    • 如果一个高优先级进程准备运行,那么操作系统会立即中断当前低优先级进程的执行,并将 CPU 资源分配给高优先级进程。
  3. 时间片轮转调度

    • Windows 为普通优先级的进程分配了固定长度的时间片(时间片长度基于系统的设置和进程的优先级)。在同一优先级的进程间,采用时间片轮转方式来保证公平性。实时进程则不会被时间片轮转机制影响。
  4. 多级反馈队列

    • Windows 的调度器使用多级反馈队列,使系统能灵活管理不同类型的进程,并保证高优先级进程的快速响应。

调度算法的应用场景

Windows 的调度算法设计适合桌面环境交互式系统,确保高优先级任务快速响应,用户操作流畅,同时可以保证普通应用的并行执行。对于实时任务,例如某些驱动程序和系统服务,高优先级可确保其在需要时立即得到 CPU 资源。

2). Linux 操作系统的调度算法

Linux 的调度算法发展经历了多个版本,不同版本的调度算法特性有所不同。目前,Linux 采用的是基于完全公平调度器(CFS, Completely Fair Scheduler)算法,并结合了优先级和抢占式调度特性。

Linux 调度算法的关键特点

  1. 完全公平调度器 (CFS)

    • CFS 的核心思想是分时公平,即每个进程都能够公平地获得 CPU 时间。CFS 采用一个 红黑树 数据结构来组织进程,红黑树中的节点按照进程的 虚拟运行时间 排序。CFS 会优先调度虚拟运行时间最少的进程,保证每个进程能够平等地获得 CPU 资源。
    • CFS 不使用时间片的概念,而是计算每个进程的虚拟运行时间来实现公平调度。虚拟运行时间会受到进程优先级的影响,优先级越高的进程,其虚拟运行时间的增加速率越慢,从而优先获得调度机会。
  2. 抢占式调度

    • CFS 支持抢占式调度,当有优先级较高或虚拟运行时间较少的进程进入就绪状态时,操作系统会抢占当前正在运行的进程。
  3. 实时调度类

    • 除了普通进程,Linux 还支持 实时进程。实时进程分为 SCHED_FIFO 和 SCHED_RR 两种调度策略:
      • SCHED_FIFO(先进先出调度):实时进程根据优先级进行调度,优先级高的先执行,没有时间片限制。
      • SCHED_RR(时间片轮转调度):在同优先级的实时进程间轮流分配 CPU 时间片。
    • 实时进程的优先级高于普通进程,在系统资源紧张的情况下,实时进程会优先获得 CPU 调度。

调度算法的应用场景

Linux 的 CFS 适合服务器环境,其设计目标是确保系统的公平性和高吞吐量,适合长时间运行的任务。在实时性需求较高的场景中,Linux 也提供了实时调度策略,可以保证高优先级的实时任务得到优先调度。

=》 Windows 与 Linux 调度算法的对比:

特性Windows 调度Linux 调度
调度策略 优先级调度、多级反馈队列 完全公平调度 (CFS) + 实时调度
优先级范围 0-31 普通优先级进程 + 实时优先级进程
时间片 支持时间片轮转调度 CFS 没有时间片概念,实时进程使用时间片
抢占机制 高优先级任务抢占低优先级任务 高优先级任务抢占低优先级任务
数据结构 多级反馈队列 红黑树(CFS)
适用场景 桌面环境、交互式应用 服务器环境、高吞吐量、多任务并发

总结来说,Windows 更侧重于交互式用户体验的优化,强调响应速度;而 Linux 的 CFS 则更加关注任务的公平性和系统的高吞吐量,适合长时间运行的后台任务。此外,Linux 中的实时调度选项也使其在实时系统中更具灵活性。

标签:优先级,操作系统,调度,实时,算法,时间,进程
From: https://www.cnblogs.com/luckyyys/p/18538671

相关文章

  • 【操作系统】3.并发和并行
       并行是指多个任务在同一时刻在多个处理器或者多核处理器上同时执行。并发是指多个任务在同一时间间隔内交替执行,但在任意时刻只有一个任务在执行。   并行需要硬件上的支持,而并发需要软件上的支持。并行是物理上的同时发生,而并发是逻辑上的同时发生。1.定义并......
  • 一文搞定回溯算法
    回溯算法基础入门“尝试”与“回退”剪枝全排列问题 子集和问题 n皇后问题 相关题解leetcode104.二叉树的最大深度 法一:深度优先遍历法二:广度优先遍历leetcode113.路径总和Ⅱ法一:深度优先遍历leetcode46.全排列法一:回溯 leetcode47.全排列Ⅱ法一:回溯 l......
  • c++ 回溯算法
    概念回溯算法(Backtracking)是一种用于寻找所有可能解的算法。它通过递归构建解,并在发现当前解不符合条件时进行“回溯”撤销部分选择,直到找到有效的解或没有更多可能性时停止。回溯算法常用于求解组合、排列、子集、图的遍历等问题。基本思想选择:在某个阶段做出一个选择。......
  • 【优化参数】粒子群算法PSO求解三轴稳定航天器姿态控制PD参数优化问题【含Matlab源码
    ......
  • 【优化求解】蚁群算法ACO求解经济损失的航班延误恢复优化问题(目标函数:航班延误成本最
    ......
  • 哈希算法(开散列)- 支持string(this指针指向的理解)
    一.开散列的定义闭散列(开放地址法)的缺点是线性探测和二次探测都会存在哈希冲突的问题,数据越多冲突就会越明显,导致查询数据的时间复杂度大幅度提升个人思路:创建一个指针数组,当某个位置要插入一个数据,就再创建一个数组,指针数组对应位置的指针指向此数组的首元素(数组地址),......
  • P2123 皇后游戏 / [USACO12JAN] Mountain Climbing S / P1248 加工生产调度 题解
    P2123皇后游戏/[USACO12JAN]MountainClimbingS/P1248加工生产调度先来看P2123。我们把这个特别重要的公式打出来:\[c_{i}=\begin{cases}a_{1}+b_{1}&,i=1\\\displaystyle\max\left\{c_{i-1},\sum_{j=1}^{i}a_{j}\right\}+b_{i}&,2\leqi\leqn\end{......
  • (5)---【DDA画线算法】C语言-OpenGL库-计算机图形学
    本次实验项目         DDA画线算法理解与运用。算法介绍        DDA(DigitalDifferentialAnalyzer)画线算法是一种基于数值微分原理的直线生成算法。它主要用于在光栅系统中绘制直线,即在像素点阵中生成直线。DDA算法的核心思想是从一个端点开始,通过增量,逐......
  • 课程讲解--深入探究二分算法
     一、二分查找算法的基本概念定义与原理二分查找,也被称为折半查找,是一种在有序数据集合中查找特定元素的高效算法。其原理基于分治思想,每次查找都将查找区间缩小一半。例如,在一个有序数组中查找一个特定的数字,我们先比较数组中间位置的元素与目标元素的大小。如果中间元素......
  • [luogu1248] 加工生产调度 题解
    考虑\(i\)排在\(j\)前的条件是\(a_i+\max(a_j,b_i)+b_j\lea_j+\max(a_i,b_j)+b_i\),然后发现这一坨东西是皇后游戏中的倒数第三个式子,直接转化为\(\min(a_j,b_i)\ge\min(a_i,b_j)\),然后就按皇后游戏中的排序方法就可以了……#include<bits/stdc++.h>#defineintlonglong......