操作系统 -- 进程调度知识详解

操作系统 -- 进程调度

    • 基本概念
    • 调度标准
    • 调度算法
    • 线程调度

介绍进程调度,它是多程序操作系统的基础

描述各种过程调度算法

讨论了为特定系统选择过程调度算法的评价标准

基本概念

通过多路编程获得的最大CPU利用率

CPU - I/O突发周期——进程执行由CPU执行和I/O等待周期组成

CPU破裂分布

  • cpu突发次数直方图

CPU调度程序

从内存中准备执行的进程中选择,并将CPU分配给其中一个进程

CPU调度决策可能发生在一个进程:

  1. 从运行状态切换到等待状态(I/O请求)

  2. 从运行状态切换到就绪状态(定时器超时)

  3. 从等待切换到就绪(I/O完成)

  4. 终止

低于1和4的调度是不可抢占的

所有其他的调度都是优先的

调度员

Dispatcher模块将CPU的控制权交给短期调度程序选择的进程;这包括:

上下文切换

切换到用户模式

跳到用户程序中的适当位置重新启动该程序

调度延迟——调度程序停止一个进程并启动另一个进程所花费的时间

调度标准

CPU利用率—保持CPU尽可能繁忙

吞吐量——每个时间单位完成其执行的进程的数量

周转时间——执行特定流程的时间总量

等待时间——进程在就绪队列中等待的时间

响应时间——从提交请求到产生第一个响应(而不是输出)所花费的时间(用于分时环境)

调度算法

马克斯CPU利用率

最大吞吐量

分钟周转时间

最小等待时间

最小响应时间

  • 先到先得(FCFS)的安排

​ Process Burst Time
​ P1 24
​ P2 3
​ P3 3
Suppose that the processes arrive in the order: P1 , P2 , P3 The Gantt Chart for the schedule is:

Waiting time for P1 = 0; P2 = 24; P3 = 27
Average waiting time: (0 + 24 + 27)/3 = 17

假设流程按照顺序到达

P2, P3, P1

时间表的甘特图是:

P1等待时间= 6;P2 = 0;P3 = 3

平均等待时间:(6 + 0 + 3)/3 = 3

比以前的情况好多了

护航效果:短进程后长进程

  • Shortest-Job-First (SJF)调度

与每个进程关联其下一个CPU突发的长度。使用这些长度以最短的时间安排流程

SJF是最优的——为给定的一组进程提供最小的平均等待时间

困难在于知道下一个CPU请求的长度

  • 确定下一个CPU突发长度

只能估计长度吗

可以通过使用先前CPU爆发的长度,使用指数平均来完成吗

  • 指数平均的例子

= 0

n + 1 =n

近代史不算数

= 1

n + 1 = tn

只有实际的最后一次CPU突发计数

如果我们展开公式,我们得到:

n+1 =tn+(1 -)tn 1 +…

+(1 -)jtn -j +…

+(1 -)n +10

因为和(1 -)都小于或等于1,所以每一个连续的项的权重都小于它的前一个项

下一个CPU突发长度的预测

线程调度

优先调度

优先级数(整数)与每个进程相关联

CPU分配给优先级最高的进程(最小的整数优先级最高)。

先发制人的

无优先

SJF是一种优先级调度,优先级是预测的下一个CPU突发时间

问题饥饿—低优先级进程可能永远不会执行

解决方案老化—随着时间的推移,增加进程的优先级

轮循

每个进程得到一个很小的CPU时间单位(时间量),通常是10-100毫秒。

在此时间过后,进程将被抢占并添加到就绪队列的末尾。

如果有n个进程在就绪队列中,并且时间量为q,那么每个进程一次最多获得1/n的CPU时间块,时间单位为q。没有进程等待超过(n-1)q个时间单位。

性能

q大FIFO

Q小Q关于上下文切换必须大,否则开销太高

  • 时间量子= 4的RR示例

过程破裂时间

p1 24

p2 3

p3 3

甘特图为:

一般来说,比SJF高的平均周转时间,但更好的反应

  • 时间量子和上下文切换时间

多级队列

就绪队列被划分为多个单独的队列:

前台(互动)

背景(批处理)

每个队列都有自己的调度算法

前台- RR

背景:先

调度必须在队列之间进行

固定优先级调度;(即,服务所有从前台,然后从背景)。饥饿的可能性。

时间片——每个队列获得一定数量的CPU时间,它可以在其进程之间调度;即,在RR中80%到前景,在FCFS中20%到背景

多级队列调度

多级反馈队列

进程可以在各个队列之间移动;老化可以通过这种方式实现

多级反馈队列调度器由以下参数定义:

队列的数量

每个队列的调度算法

用于确定何时升级流程的方法

用于确定何时降级进程的方法

方法,用于确定当进程需要服务时将进入哪个队列

三个队列:

Q0 - RR与时间量子8毫秒

Q1 - RR时间量子16毫秒

Q2 -先

调度

一个新的作业进入FCFS服务的队列Q0。当它获得CPU时,作业收到8毫秒。如果它没有在8毫秒内完成,作业将被移动到队列Q1。

在Q1作业再次使用FCFS服务,并收到额外的16毫秒。如果它仍然没有完成,它将被抢占并移动到队列Q2。

线程调度

用户级线程由线程库管理,并且内核不知道它们

要在CPU上运行,用户级线程最终必须映射到相关的内核级线程,尽管这种映射可能是间接的,并且可能使用LWP(轻量级进程)。

竞争范围

process-contention范围(个人电脑)

system-contention范围(SCS)

用户级线程和内核级线程之间的一个区别在于它们的调度方式。

多对一和多对多模型,线程库调度用户级线程运行在一个可用的LWP(轻量级进程)上

这称为进程争用范围(PCS),因为调度竞争是属于同一进程的线程之间的竞争

当我们说线程库将用户线程调度到可用的lwp时,我们并不是说线程实际上在CPU上运行;这将要求操作系统将内核线程调度到物理CPU上。

为了决定将哪个内核线程调度到CPU上,内核使用系统争用作用域(SCS)

系统中所有线程都在竞争SCS调度的CPU。

系统采用一对一模型,仅使用SCS调度线程。

通常,PCS是根据优先级来执行的——调度程序选择优先级最高的可运行线程来运行。用户级线程优先级是由程序员设定的,而不是由线程库调整的。

PCS通常会抢占当前运行的线程,以有利于高优先级线程;然而,并不能保证在同等优先级的线程之间进行时间切片。

API允许在线程创建期间指定PCS或SCS

PTHREAD SCOPE进程使用PCS调度来调度用户级线程

PTHREAD SCOPE SYSTEM使用SCS调度调度线程。

将为多对多系统上的每个用户级线程创建和绑定一个LWP,使用一对一策略有效地映射线程。

  • Pthread调度API

你可能感兴趣的:(操作系统,队列,算法,操作系统,python,java)