在多道程序环境下,进程数目往往多于处理机数目,致使它们争用处理机。这就要求系统能按某种算法,动态地把处理机分配给就绪队列中的一个进程,使之执行。分配处理机的任务是由进程调度程序完成的。

三级调度

一个作业从提交开始直到完成,往往要经历下述三级调度:

  • 高级调度:又称为作业调度或宏观调度。其主要功能是根据一定的算法,从输入的一批任务(作业)中选出若干个作业(从磁盘的作业后备队列中选择作业调入内存),分配必要的资源并建立与作业相对应的进程,如内存、外设等,为它建立相应的用户作业进程和为其服务的系统进程(如输入/输出进程),最后把它们的程序和数据调入内存,等待进程调度程序对其执行调度,并在作业完成后作善后处理工作。
  • 中级调度:又称为中程调度,引入中级调度的主要目的是为了提高内存的利用率和系统的吞吐量。内存中不能有太多的进程,把进程从内存移到外存,当内存有足够空间时,再将合适的进程换入内存,等待进程调度。中级调度实际上就是存储器管理中的对调功能。
  • 低级调度:又称为进程调度、短程调度,它决定就绪队列中的哪个进程将获得处理机,然后由分派程序执行把处理机分配给该进程的操作。在批处理,分时,实时三类系统中,进程调度必须被配置,因而是一种最基本的调度。

低级调度的功能:

  • 保存处理机的现场信息
  • 按某种算法选取进程
  • 把处理器分配给进程

在上述三个调度中,低级调度是各类操作系统必备的功能。在纯粹的分时操作系统或实时操作系统中,通常不需要高级调度。一般的操作系统都具有高级调度和低级调度。而功能完善的操作系统,为了提高系统主存的利用率和作业吞吐量,引进中级调度。

进程调度方式

  • 非剥夺方式:分派程序一旦把处理机分配给某进程后便让它一直运行下去,直到进程完成或发生某事件而阻塞时,才把处理机分配给另一个进程。
  • 剥夺方式:又称抢先式调度。当进程/线程正在处理器上运行时,系统可根据所规定的原则剥夺分配给此进程/线程的处理器,并将其移入就绪列队,选择其他进程/线程运行。有两种常用的处理器剥夺原则,一是高优先级进程/线程可剥夺低优先级进程/线程;二是当运行进程/线程的时间片用完后被剥夺,在动态改变进程/线程优先级的系统中,经常会出现这样的情况

 剥夺式的开销比非剥夺式的开销通常要大,很多操作系统适用两种策略结合使用的方式,内核关键程序是非剥夺式的,用户级别是剥夺式的。

进程调度算法

先来先服务(FCFS)

策略:该算法总是把处理机分配给最先进入就绪队列的进程,一个进程一旦分得处理机,便一直执行下去,直到该进程完成或阻塞时,才释放处理机。这是一种非剥夺式算法。

性能:算法容易实现,效率不高,只顾及作业等候时间,没考虑作业要求服务时间的长短,不利于短作业而优待了长作业。有利于CPU繁忙型作业而不利于I/O繁忙型作业。

短进程优先(SPF)

策略:该算法从就绪队列中选出“下一个CPU执行期”最短的进程,为之分配处理机。这是一种非剥夺式调度算法。

性能:算法易于实现,效率不高(相对于剥夺式算法),弱点是需要预先知道进程所需的CPU时间,而这个时间只能靠估计,估计值很难精确,若估计过低,系统可能提前终止该进程。忽视了进程等待时间,会出现饥饿现象。由于缺少剥夺机制,对分时、实时处理很不理想。

最短剩余时间优先(SRT)

策略:把SJF算法改为抢占式的调度算法。当一个进程正在执行时,一个新进程进入就绪状态,如果新进程需要的CPU时间比当前正在执行的进程剩余下来还需的CPU时间短,SRT强行赶走当前正在执行进程。

性能:不像FCFS偏向长进程,也不像轮转法那样产生额外的中断,从而减少了开销。另一方面,它必须记录过去的服务时间,从而又增加了开销。从周转时间上看,较SPF有更好的性能。

最高响应比优先(HRN)

策略:同时考虑每个进程的等待时间长短和估计需要的执行时间长短,从中选出响应比最高的进程投入执行。

响应比R定义:

        R=(W+T)/T=1+W/T

T——该进程估计需要的执行时间

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

性能:吞吐量小于SPF。另外由于每次调度之前要计算响应比,系统开销也要相应增加。

最高优先权优先(FPF)

策略:该算法总是把处理机分配给就绪队列中具有最高优先权的进程。常用以下两种方法来确定进程的优先权:

  • 静态优先级:在创建进程时确定的,在整个运行期间不再改变。依据有:进程类型、进程对资源的要求、用户要求的优先权。
  • 动态优先级:基于某种原则,使进程的优先权随时间改变而改变。

轮转法(RR)

  • 时间片轮转法:系统将所有就绪进程按FIFO规则排队,按一定的时间间隔把处理机分配给队列中的进程。这样,就绪队列中所有进程均可获得一个时间片的处理机而运行。
  • 多级反馈轮转法:多级反馈队列方式是在系统中设置多个就绪队列,并赋予各队列以不同的优先权。

引起进程调度的原因

  • 正在执行的进程执行完毕。这时,如果不选择新的就绪进程执行,将浪费处理机资源
  • 执行中进程自己调用阻塞原语将自己阻塞起来进入睡眠等状态
  • 执行中进程调用了P原语操作,从而因资源不足而被阻塞或调用了V原语操作激活了等待资源的进程队列
  • 执行中进程提出I/O请求后被阻塞
  • 在分时系统中时间片已经用完
  • 在执行完系统调用等系统程序后返回用户进程时,这时可看作系统进程执行完毕,从而可调度选择一新的用户进程执行

以上都是在不可剥夺方式下的引起进程调度的原因。在CPU执行方式是可剥夺时,就绪队列中的某进程的优先级变得高于当前执行进程的优先级,从而也将引发进程调度。

 
 
 

<Operating System>进程调度的更多相关文章

  1. DBCC CHECKDB 遭遇Operating system error 112(failed to retrieve text for this error. Reason: 15105) encountered

    我们一个SQL Server服务器在执行YourSQLDBa的作业YourSQLDba_FullBackups_And_Maintenance时遇到了错误: Exec YourSQLDba.Maint ...

  2. The World's Only Advanced Operating System

    The World's Only Advanced Operating System

  3. Unable to open the physical file xxxx. Operating system error 2

    在新UAT服务器上,需要将tempdb放置在SSD(固态硬盘)上.由于SSD(固态硬盘)特性,所以tempdb的文件只能放置在D盘下面,而不能是D盘下的某一个目录下面. ALTER  DATABASE ...

  4. CREATE FILE encountered operating system error 5(Access is denied.)

    这篇博文主要演示"CREATE FILE encountered operating system error 5(Access is denied.)"错误如出现的原因(当然只是 ...

  5. Linux启动报错missing operating system

    用UltraISO制作了一个Red Hat Enterprise Linux Server release 5.7系统的U盘启动盘,然后在一台PC上安装,由于安装过程中在干别的事情,有些选项没有细看. ...

  6. Learning Roadmap of Robotic Operating System (ROS)

    ROS Wiki: http://wiki.ros.org/ Robots Using ROS Textbooks: A Gentle Introduction to ROS Learning ROS ...

  7. Full exploitation of a cluster hardware configuration requires some enhancements to a single-system operating system.

    COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION Operating System Desi ...

  8. Multiprocessor Operating System Design Considerations SYMMETRIC MULTIPROCESSORS

    COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION An SMP operating syst ...

  9. u盘安装CENTOS后,启动missing operating system ,只能用U盘才能启动系统

    好久之前就想把家里闲置的那台老的不能再老的笔记本换成linux的,用来学习 从N久之前用光盘安装的时候发现光驱坏掉了之后就没有再装过,最近又想安装于是就试了U盘安装 U盘安装过程也很简单,只需要制作一 ...

随机推荐

  1. java 的SPI机制

    今天看到spring mvc 使用Java Validation Api(JSR-303)进行校验,需要加载一个 其具体实现(比如Hibernate Validator), 本来没有什么问题,但是突然 ...

  2. WCF在tcp通道下启用httpget

    关于tcp通道下,启用httpget,必须启用一个http的基地址,如果要启用元数据交换,host中必须开启服务描述. //01 create host Uri tcpBaseAddress = ne ...

  3. 试一下CANVAS

    // 此应用源代码如下: document.getElementById("codetext").innerHTML = document.getElementById(" ...

  4. 纯css来画图-border应用

    基础知识: Css画图大部分是使用了css中的border来绘画图形,那首先我们就来看下border的基础知识,至于其他的遇到了再讲吧! Border的基础知识: 一般我们这样简写: border: ...

  5. 如何进入IT行业?

    其实IT行业就如一个具有标准配件的机一样是开放的行业,无论你是否科班出身,无论你是什么学历,只要你掌握相关的针对性很强的计算机知识,想在IT行业发展随时可以即插即用,这主要由IT行业的特点确PC定的. ...

  6. mysql从零开始

    常用的数据库有哪些? oralce,sqlserver,mysql,db2 有钱就用oracle吧 oracle和mysql的区别:https://zhidao.baidu.com/question/ ...

  7. JS的prototype

    初步理解: 在说prototype和constructor之前我们先得看几个例子. 1 2 3 4 function name(obj){     alert(obj)//"uw3c&quo ...

  8. Python SQLAlchemy --1

    本文為 Python SQLAlchemy ORM 一系列教學文: SQLAlchemy 大概是目前 Python 最完整的資料庫操作的套件了,不過最令人垢病的是它的文件真的很難閱讀,如果不搭配個實例 ...

  9. 选择c3p0作为连接池

    <hibernate-configuration>     <session-factory>         <property name="dialect& ...

  10. LVS_DR模式构建配置

    一.环境准备 lvs负载均衡器 系统:centos6.8 ip:192.168.2.203 vip:192.168.2.17 web服务器RS1 系统:centos6.8 ip:192.168.2.2 ...