第三章:进程线程模型

提高CPU的利用率

  • 进程是对正在运行程序的一个抽象。
  • 通过进程,可以使系统具有支持并发操作的能力,可将一个单独的CPU变成多个虚拟的CPU
  • 线程是进程中的运行实体

3.1 多道程序设计模型

1.1 程序的顺序执行

程序:一个在时间上按严格次序前后相继的机器指令或高级语言编写的语句的操作序列

程序的顺序执行的特点 : 顺封确可
  • 顺序性
    程序和机器执行的活动严格按顺序执行
  • 封闭性
    资源的状态只有程序本身的动作才可以改变
  • 确定性
    程序执行的结果与它的执行速度无关,也成为程序执行结果与时间无关性。CPU在执行程序时,两个动作间停顿对程序计算结果不产生影响
  • 可再现性
    程序在不同时间执行,只要初始条件相同,何时重复执行都得到相同结果

1.2 多道程序系统中程序执行环境的变化

1. 多道程序设计技术的引入

多道程序设计技术的应用:提高计算机系统各资源的利用率,缩短作业周期时间,多硬件资源并行工作。
单CPU : 并发程序按给定的时间片交替在处理机执行,执行时间重叠
多CPU : 并发程序在各自处理机上运行

2. 多道程序设计环境的特点
  • 多道程序设计
    就是允许多个程序同时进入内存并运行
  • 系统吞吐量
    用来衡量系统效率的尺度。指单位时间内系统所处理作业(程序)的道数(数量)

资源利用率高,单位时间完成有效工作多,吞吐量大
资源利用率低,单位时间完成有效工作小,吞吐量小

多道程序设计后 :提高设备资源利用率,提高内存资源利用率,提高了处理机资源利用率,最终,提高了系统吞吐量。

多道程序设计环境的特点 : 独随资
  • 独立性
    每道程序都是逻辑独立的
  • 随机性
    程序和数据的输入与执行开始时间都是随机的
  • 资源共享性
    资源共享将导致对进程执行速度的制约
1.3 程序的并发执行

指两个或两个以上程序在计算机系统中同处于已开始执行且未结束的状态
并发程序:参与并发执行的程序

特点

1)并发程序在执行期间具有相互制约关系 :执行-暂定-执行
2)程序与计算不再一一对应 : 允许多个作业调用一个共享程序段
3) 并发程序执行结果不可再现 :宏观同步 ,在单CPU还是顺序执行

二. 进程模型

2.1 进程的概念

进程(Process)是计算机的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位

分类

系统进程的优先级通常高于一般用户进程的优先级

  • 系统进程
    执行操作系统程序,完成操作系统的某些功能
  • 用户进程
    运行用户程序,直接为用户服务
1. 进程与程序的联系和区别
相同:
  • 都有数据
  • 都有指令代码
联系:
  • 程序是构成进程的组成部分之一,一个进程的运行是执行它对应的程序
  • 进程是由程序、数据和进程控制块PCB三部分组成
区别
  • 程序是静态,进程是动态的
  • 程序的存在是永久的,而进程是暂时的
  • 一个进程可以执行一个或多个程序,一个程序也可以由多个进程构成
  • 进程具有创建其它进程的功能
  • 被创建的进程称为子进程,创建者称为父进程
  • 进程树是一种进程关系表示法,由父进程和子进程两部分组成
  • 一个进程树由若干个系统进程和它们之间的关系构成。进程树中的每个进程是树的节点。如果进程A创建了进程B,就称A是B的父进程,B是A的子进程。若一个进程不是任何其他进程的子进程,就称之为根进程或进程家族的祖先。
2. 进程的特性:并动独交异
  • 并发性 ❄❄
    一个进程的第一个动作可以在另一个进程的最后一个动作结束前开始
    指微观上看是不同的进程交替占用资源向前推进,宏观上看是不同的进程一起向前推进,在一段时间内用户感觉到是多个进程同时在运行
  • 动态性 ❄❄
    进程动态产生动态消亡;在进程生命周期内状态动态变化
  • 独立性 ❄❄
    一个进程是一个相对完整的资源分配单位
  • 交往性 ❄❄
    一个进程在运行过程中可能会与其它进程发生直接或间接作用
  • 异步性 ❄❄
    每个进程按照各自独立的、不可预知的速度向前推进

2.2 进程的状态及其状态转换

1. 三状态进程模型

1)运行状态(Running)
指进程已获得CPU,并且在CPU上执行的状态。单CPU最多一个进程处于运行态

2)就绪状态(Ready)
指一个进程已具备运行条件,但由于没有获得CPU而不能运行所处的状态。一旦把CPU分配给它,该进程就可运行,允许有多个就绪进程

3)等待状态(Waiting)
也称阻塞状态或封锁状态。指进程因等待某种事件发生而暂时不能运行的状态。
引起进程阻塞的事件有:1) 请求系统服务; 2) 启动某种操作; 3) 新数据尚未到达; 4) 无新工作可做

  • 就绪 --> 运行
    未能获得处理机,故不能运行
  • 运行 --> 就绪
    由于规定的时间片用完而超时,状态修改为就绪状态
  • 等待 --> 就绪
    解除阻塞原因后,因处理机满足不了进程需要,将其状态由等待变成就绪,仅当进程调度进程处理机再次分配它才可恢复
2. 五状态模型

1)运行状态(Running)
进程占用处理机资源;处于此状态的进程数目小于等于处理机数目,在没有其它进程执行时,自动执行系统的空闲进程。

2)就绪状态(Ready)
进程已获得除处理机外的所需资源,等待分配处理机资源;只要分配处理机就可执行

3)阻塞状态(Blocked)
由于进程等待I/O操作或进程同步等条件而暂停运行时处于阻塞状态。即使处理机分配该进程,也无法继续执行。

4)创建状态(New)
进程正在创建过程中还不能运行,如分配和建立进程控制块表项、建立资源表格并分配资源,加载程序并建立地址空间等

5)结束状态(Exit)
进程已经结束运行,回收除进程控制块外其它资源,并让其它进程从进程控制块中收集有关信息

操作系统中多个进程的并发执行是通过进程交替进入运行状态实现的

主要状态转换
  • 创建进程
    创建一个新进程运行一个程序

  • 提交
    完成一个新进程的创建过程,新进程进入就绪状态

  • 调度运行
    从就绪进程表中选择一个进程进入运行状态

  • 释放
    由于进程完成或失败而终止进程运行进入结束状态
    运行到结束的转换分为正常退出和异常退出(超时、内存不够等)

  • 超时(Timeout):
    由于用完时间片或高优先级进程就绪等原因导致进程暂停运行。如规定时间没有做完工作要加班或火车中K要给T让车等

  • 事件等待(Event Wait):
    进程要求的事件未出现而进入阻塞,原因包括:申请系统服务或资源、通信、I/O操作等,如忘带身份证不能买票等

  • 事件出现(Event Occurs):
    进程等待的事件出现,如操作完成

3. 七状态进程模型

五状态进程模型没有区分进程地址空间位于内存还是外在,而在操作系统中引入虚拟存储管理技术后,需要进一步区分进程的地址空间状态。

好处:

(1)提高处理机效率:就绪进程表为空时有空闲空间用于提交新进程

(2)可为运行进程提供足够内存:资源紧张时可把某些进程换到外存

(3)有利于调试:在调试时挂起被调试进程,方便对其地址空间读写

四种意义有变化或新的状态:

(1)就绪状态:进程在内存且可立即进入进行状态

(2)阻塞状态:进程在内存并等待某事件的出现

(3)阻塞挂起状态:进程在外存并等待某事件的出现

(4)就绪挂起状态:进程在外存,但只要进入内存,即可运行

新引入的状态转换有挂起和激活两类:

挂起:把一个进程从内存转到外存,可能有以下情况:

  • 阻塞到阻塞挂起:没有进程处于就绪状态或要求更多内存资源时

  • 就绪到就绪挂起:当有高优先级阻塞进程加入时

  • 运行到就绪挂起:当有高优先级阻塞挂起时因事件出现而进入就绪挂起时,系统把运行进程转到就绪挂起状态

激活:把一个进程从外存转到内存,可能有以下情况:

  • 就绪挂起到就绪:就绪挂起进程优先级高于就绪进程等

  • 阻塞挂起到阻塞:当一个进程释放足够内存时,系统会把一个高优先级阻塞挂起激活

意义有变化的转换有事件出现和进程提交两类:
  • 事件出现:进程等待的事件出现,如操作完成选装,可能有以下情况

  • 阻塞到就绪:针对内存进程的事件出现

  • 阻塞挂起到就绪挂起:针对外存进程的事件出现

  • 提交:完成一新进程的创建过程,新进程进入就绪状态或就绪挂起状态

2.3 进程控制块

进程控制块(Process Control Block,PCB):操作系统核心中,为进程定义一个专门的数据结构。
这里写图片描述

这里写图片描述

进程控制块(Process Control Block,PCB):

这里写图片描述

1. PCB的内容: 名号存自由,消息队列来当家
  • 调度信息:
    供进程调度时使用的,描述了进程当前所处的状况,
    包括进程名、进程号、存储信息、优先级、当前状态、资源清单、
    “家族”关系、消息队列指针、进程队列指针和当前打开文件等。

  • 现场信息:记录了进程的运行情况。
    只记录那些可能会被其它进程改变的寄存器,如程序状态字、时钟、界地址寄存器等

进程控制块的基本内容:进程标识符,进程调度状态,进程相应的程序和数据地址,进程优先级,CPU现场保护区,进程同步与通信机制,进程所在队列文件句柄,与进程有关的其他信息.

2.进程的组成
  • 指令
    指令是可再入程序。所谓"可再入程序"是纯代码程序,特点:运行中不需要修改
  • 数据
  • 进程控制块(PCB)
3. PCB组织 线索链队
  • 线性方式:将所有PCB不分状态组织在一个连续表(PCB表)。

    优点:简单且不需要额外的开销,适用于进程数目不多的系统

    缺点:往往需要扫描整个PCB表

  • 索引方式:
    对于具有相同状态的进程,分别设置各自的PCB索引表,表目为PCB在PCB表(线性表)中的地址,
    构成了就绪索引表和等待索引表

  • 链接方式:
    对于具有相同状态进程的PCB,通过PCB中的链接字构成一个队列。
    按先进先出原则出队,若队列指针为0时,表示队尾(空)

4.进程的队列
  • 就绪队列:进程入队和出队次序与处理机调试算法有关

  • 等待队列:每一个等待事件一个队列

  • 运行队列:在单CPU系统中整个系统有一个运行队列

2.4. 进程控制

  • 作用:
    对进程在整个生命周期中各种状态间的转换进行有效的控制通过原语实现

  • 原语:
    由若干条指令组成,用来实现某个特定的操作,通过一段不可分割的或不可中断的程序实现其功能
    ,原语的执行必须是连续的,一旦开始执行就不能间断,直到执行结束。
    原语是在管态下执行,并且常驻内存。

  • 原语和系统调用都可以被进程调用,两者差别在于原语有不可中断性,它是通过在其执行过程中关闭中断实现的,且一般由系统进程调用。

1. 进程控制原语: 创撤挂机阻唤优❄❄❄❄❄

用于进程控制的原语一般有:创建进程、撤销进程、挂起进程、激活进程、阻塞进程、唤醒进程以及改变进程优先级等。

  • 创建原语:
    一个进程可以使用创建原语创建一个新的进程,前者称为父进程,后者称为子进程,子进程又可以创建新的子进程,构成新父子关系

    创建一个进程的主要任务:建立进程控制块PCB
    先申请一空闲PCB区域,将有关信息填入PCB,置该进程为就绪状态,最后把它插入就绪队列中。

    导致进程创建的事件:

    • 系统初始化;
    • 执行了正在运行的进程所调用的进程创建系统调用;
    • 用户请求创建一个新进程;
    • 一个批处理作业的初始化。

    1.用户登录.在分时系统中,用户在终端键入登录命令后,如果是合法用户,系统将为该终端建立一个进程,并把它插入到就绪队列中.
    2.系统初始化.在批处理系统中,会创建0号,1号系统进程.
    3.用户系统调用.用户采用系统调用创建进程
    4.初始化批处理作业.在初始化批处理时,采用一个后台进程以便使新进程以并发的运行方式完成特定任务.
    5.设备分配不是会引起创建新的进程

    当用户在编程中需要创建一个进程时,他可以采用下列哪一种方法(调用进程创建原语由操作系统创建进程)

  • 撤销原语

    找到要被撤销进程的PCB,将它所在队列中消去,撤销属于该进
    程的一切“子孙进程”,释放被撤销进程所占用的全部资源,并消去被撤销进程的PCB

这里写图片描述

  • 阻塞原语:
    某进程执行过程中,需要执行I/O操作,则由该进程调用阻塞原语把进程从运行态转换为阻塞态

    中断CPU执行,把CPU的当前状态保存在PCB现场信息中,当前状态置为等待状态,插入到该事件的等待队列去。

  • 唤醒原语:
    一个进程因为等待事件的发生而处于等待状态,当等待事件完成后,就用唤醒原语将其转换为就绪状态。

    在等待队列中找到该进程,置进程的当前状态为就绪状态,然后将它从等待队列中撤出并插入到就绪队列中排队,等待调度执行。

2. UNIX的fork()函数及使用
作用

在UNIX类操作系统中,父进程通过调用fork()函数创建子进程。

fork()函数执行特点:

只被调用一次,却会返回两次:一个在调用进程(父进程)中,一次是在新创建的子进程中。
这里写图片描述

步骤:

1)为子进程分配一个空闲proc结构(进程描述符)

2)赋予子进程唯一标识pid

3)以一次一页的方式复制父进程用户地址空间

4)获得了进程继承的共享资源的指针,如打开的文件等

5)子进程就绪,加入调度队列

6)对子进程返回标识符0; 向父进程返回子进程的pid

新创建的子进程基本和父进程相同,包括文本、数据和BSS段、堆及用户栈,区别在于它们有不同的pid。

BSS(Block Started by Symbol)通常是指用来存放程序中未初始化的全局变量和静态变量的一块内存区域

三. 线程模型

3.1 线程的引入

目的:
1) 提高并发度,
2) 线程之间的切换时间短,
3) 减少通信开销,
4) 每个线程可以拥有独立的栈

进程:通过并发执行,改善资源利用率及提高系统效率

线程:减少程序并发执行时所付出的时间和空间开销,有更好并发性.

进程有两个基本单位:

1)是一个可拥有资源的独立单位

2)是一个可以独立调度和分派的基本单位

并发执行的操作:

1)创建进程:必须为其分配所需的所有资源(除CPU外),包括内存空间、I/O设备以及建立相应的数据结构PCB(进程控制块)

2)撤销进程:必须先对这些资源进行回收操作,再撤销PCB

3)进程切换:由于要保留当前进程的CPU环境和设置新选中进程的CPU环境,为此需要花费不少CPU时间

进程是一个资源拥有者,因而在进程的创建、撤销和切换中,系统必须为之付出较大的时间开销。
线程的产生背景:

如果可以将调度和分派的基本单位不同时作为独立分配资源单位;而拥有资源的基本单位,又不频繁对之进行切换。

3.2 线程的基本概念

线程的概念:

是进程中的一个实体,是CPU调度和分派的基本单位。

一个线程可以创建和撤销另一个线程,同一个线程中的多个线程间可以并发执行,线程同样拥有就绪、等待、运行三种基本状态。(终止状态)

1. 线程的属性

1)每个线程有一个唯一的标识符和一张线程描述表,记录了线程执行的寄存器(指令地址寄存器,处理器寄存器,硬件设备寄存器)和栈等现场状态。 线程自己基本上不拥有资源,只拥有 一点在运行中必不可少的资源(如程序计数器、一组寄存器、栈)

2)不同线程可以执行相同程序,同一服务程序被不同用户调用时操作系统可以为它们创建不同的线程

3)同一进程中的各个线程共享该进程的内存地址空间

4)线程是处理器的独立调度单位,多个线程是可以并发执行的。在单CPU计算机系统中,各线程可交替地占用CPU;在多CPU计算机系统中,各线程可同时占用不同的CPU,若各个CPU同时为一个进程内的各线程服务则可缩短进程的处理时间

5)一个线程被创建后便开始它的生命周期,直到终止,线程在生命周期内会经历等待、就绪和运行等各种状态变化

2. 引入线程的好处

1)创建一个新线程花费时间少。因不需另行分配资源,因此创建线程比创建进程要快,且系统的开销也少

2)两个线程的切换花费时间少

3)由于同一进程内的线程共享内存和文件,线程间相互通信无须调用内核,故不需要额外的通信机制,使通信更简便,信息传送速度也快

4)线程能独立执行,充分利用和发挥处理器与外围设备并行工作能力

3. 线程与进程的比较

线程具有许多传统进程所具有的特征

故也称为轻量级进程(Light-Weight Process)或进程元

把传统的进程称为重量级进程(Heavy-Weight Process)

1)调度:线程作为调度和分派的基本单位,进程作为资源的基本单位

同一进程中的线程的切换不会引起进程切换

非同一进程中的线程切换将会引起进程切换

2)并发性:在引入线程的操作系统中,不仅进程间或以并发执行,而且在一个进程中的多个线程间也可以并发执行,提升系统的吞吐量。

3)拥有资源:线程自己不拥有系统资源,但可以访问其隶属进程的资源,可供同一进程的其它所有线程共享

4)系统开销:由于在创建或撤销进程时,系统都要为之分配或回收资源,因此,操作系统所付出的开销将显著大于在创建或撤销线程时的开销。

3.3 线程实现机制

1. 用户级线程(User-Level Threads):不依赖于内核

用户级线程只存在于用户态中对它的创建、撤销和切换不会通过系统调用来实现,因而该线程与内核无关。

内核也不知道有用户级线程的存在,内核按正常方式管理,叫单线程进程,支持用户级线程的典型操作系统是LINUX。

线程在一个运行时系统的顶部运行,是一个管理线程的过程的集合

在用户空间管理线程时,每个进程需要有其专用的线程表,用来跟踪该进程中的线程。该线程表由运行时系统管理。当一个线程转换到就绪状态或阻塞状态时,在该线程表中存放重新启动该线程所需信息,与内核在进程表中存放进程的信息一样。

2. 内核级线程(Kernel-Supported Threads):该线程依赖于内核

内核级线程依赖于内核,即无论是在用户进程中的线程还是系统进程中的线程,它们的创建、撤销和切换都由内核实现。在内核中保留一个线程控制块,系统根据该控制块而感知该线程的存在并对线程进行控制。支持内核级线程的典型操作系统是WINDOWS

内核的线程表保存了每个线程的寄存器、状态和其它信息。所有能够阻塞线程的调用都以系统调用的形式实现。

在内核级线程中,当一个线程阻塞时,内核可以选择运行同一进程中的另一个线程或运行另一个进程中的线程。

而在用户级线程中,运行时系统始终运行自己进程中的线程,直到内核剥夺它的CPU为止。

用户级线程和内核级线程的比较:

1)线程的调度与切换速度

核心级线程的调度和切换与进程的调度和切换相似。在线程调度时,同样采用抢占和非抢占两种方式。在线程调度算法上,也采用时间片轮转法、优先权算法等,

用户级线程的切换通常发生在一个应用进程的诸线程间,不仅不需通过中断进入操作系统内核,切换的规则也远比进程调度和切换的规则来得简单。

用户级线程的切换速度特别快。

2)系统调用:当传统的用户进程调用一个系统调用时,要由用户状态转入核心状态,用户进程将被封锁。

当内核完成系统调用返回时,才将该进程唤醒,继续执行。而在用户级线程调用一个系统时,由于内核并不知道有该用户级线程存在,因而把系统调用看作是整个进程的行为,于是使该进程等待,而调度另一个进程执行。

当一个线程调用一个系统调用时,内核把系统调用只看作是该线程的行为,因而封锁该线程,于是可以再调度该进程中的其它线程执行。

3)线程执行时间:对于只设置了用户级线程的系统,调度是以进程为单位进行的。

例:进程A包含一个用户级线程,进程B包含100个线程

进程A线程的运行时间是B线程运行时间的100倍

进程A线程的运行速度是B线程运行速度的100倍

例:假如系统中设置的是核心级线程,其调度是以线程为单位,进程B可以获得的CPU时间是进程A的100倍,进程B可使100个系统调用并发工作

3、混合实现方式

一个系统同时实现了用户级线程一内核级线程,支持混合方式线程的典型操作系统是SUN公司开发的solaris(梭拉瑞斯)。

Solaris 是Sun Microsystems研发的计算机操作系统。它被认为是UNIX操作系统的衍生版本之一。 目前Solaris仍旧属于私有软件。2005年6月14日,Sun公司将正在开发中的Solaris 11的源代码以CDDL许可开放,这一开放版本就是OpenSolaris。

3.4、Pthread线程包

IEEE1003.1C定义了线程标准,Pthread基于该标准实现的线程包。

POSIX线程(POSIX threads),简称Pthreads,是线程的POSIX标准。该标准定义了创建和操纵线程的一整套API。在类Unix操作系统(Unix、Linux、Mac OS X等)中,都使用Pthreads作为操作系统的线程。Windows操作系统也有其移植版pthreads-win32。

POSIX 表示可移植操作系统接口(Portable Operating System Interface ,缩写为 POSIX ),POSIX标准定义了操作系统应该为应用程序提供的接口标准,是IEEE为要在各种UNIX操作系统上运行的软件而定义的一系列API标准的总称,其正式称呼为IEEE 1003,而国际标准名称为ISO/IEC 9945。

几个主要函数调用 ❄❄❄❄❄

线程调用描述
pthread_create创建一个新线程
pthread_exit结束调用的线程
pthread_join等待一个特定的线程退出
pthread_yield释放CPU来运行另外一个线程
pthread_attr_init创建并初始化一个线程的属性结构
pthread_attr_destroy删除一个线程的属性结构

四. 进程(线程)调度

调度是分层次的,一般分为高级调度、中级调度和低级调度。

1、高级调度:也称作业调度,按一定原则对磁盘中处于后备状态的作业进行选择并创建为进程

2、中级调度:按给定的原则和策略,将处于磁盘对换区中,且
具备运行条件的就绪进程调入内存,或将处于内存就绪状态或内存阻塞状态的进程交换到对换区

3、低级调度:进程(线程)调度是决定就绪队列中哪个进程将获得处理机,并实际将处理机分配给该进程的操作

进程(线程)调度即处理机调度。其任务是控制、协调进程(线程)对CPU的竞争,按一定调度算法,使某一就绪进程获得CPU的控制权,转换成运行状态。
进程调度最主要的原因是:是否有CPU资源让出来,有CPU资源让出来不一定能发生调度,当没有CPU资源让出,则一定不会发生进程调度

4.1. 概述

1. 进程(线程)调度的主要功能:

1)记录系统中所有进程(线程)执行状态;

2)根据一定调度算法,从就绪队列中选出一个把CPU分配给它;

3)把CPU分配后即选中控制块有关现场信息,如程序状态字、通用寄存器等内容送往处理器的寄存器中,让它占用CPU执行
4) 将换下CPU的进程(线程)的现场信息保存到进程控制块中

2. 进程(线程)调度的时机
  • 正在执行的进程(线程)运行完毕;

  • 正在执行的进程(线程)调用阻塞原语将自己阻塞进入等待状态;

  • 正在执行的进程(线程)调用阻塞原语操作,因资源不足而被阻塞,或调用了唤醒原语操作激活了等待资源的进程(线程);

  • 时间片用完;

  • 就绪队列中的进程(线程)优先级高于当前运行进程(线程)时,引发进程(线程)调度

可抢占方式:即就绪队列中一旦有优先级高于当前运行进程(线程)存在时,立即进行调度,转让CPU。

不可抢占方式:即一旦把CPU分配给一个进程(线程),就一直占用CPU,直到该进程(线程)自己因调用原语操作或等待I/O而进入阻塞状态,或时间片用完时才让出CPU,重新执行进程(线程)调度。

4.2. 调度算法设计原则

1. 进程行为:几乎所有进程的(磁盘)I/O请求或计算都是交替突发的

某些I/O活动可以看作是计算:当CPU向视频RAM复制数据以更新屏幕时,因为使用了CPU,所以这是计算,而不是I/O,当一个进程等待外部设备完成工作而被阻塞的行为属于I/O。

某进程花费大多数时间在计算上称为计算密集型,也称CPU密集型(该型具有较长时间的CPU集中使用和较小频度的I/O等待)

某进程在等待I/O上花费绝大多数时间称为I/O密集型(该型在I/O请求间较少进行计算)

2. 系统分类:批处理、交互式和实时系统

批处理系统:该处理减少了进程的切换从而改善了性能,如处理薪水册、存货清单、账目支出、利息计算(在银行)、索赔处理(保险公司)等周期性作业。

交互式系统:避免一个进程霸占CPU拒绝为其它进程服务,抢占是必需的。服务器属于此类系统,通常它们要服务多个远程用户。

实时系统:只运行那些用来推进现有应用的程序,而交互式是通用的,运行任意的非协作甚至是有恶意的程序。

3. 调度算法的设计目标:

吞吐量:系统每小时完成的作业数量

周转时间:指从一个批处理作业提交时刻开始直到该作业完成时刻为止的统计平均时间。数据度量了用户要得到输出所需的平均等待时间,越小越好

CPU利用率:用于对批处理系统的度量。

批处理的目标 : 吞吐量、周转时间以及CPU利用率。
交互式系统的目标 :最小响应时间,均衡的性能。
实时系统的目标 : 满足所有的(或大多数)截止时间要求,满足可靠性要求

4.3. 进程(线程)调度算法

进程(线程)调度算法解决以何种次序对各就绪进程(线程)进行处理机的分配以及按何种时间比例让进程(线程)占用处理机。

1. 先来先服务

最简单的是非抢占的先来先服务(First-Come First-Severed,FCFS)算法。进程按请求CPU的顺序使用CPU。

如:排队购物,排到付款时发现忘带钱包,只能停止你的业务(阻塞),你去拿钱包,拿来钱包重新到队列尾部排除购物!

2. 最短作业优先

当输入队列中有若干个同等重要的作业被启动时,调度程序应使用最短作业优先(Shortest Job First,SJF)算法。

先来先服务: A\B\C\D 8\4\4\4 8+4=12 12+4=16 16+4=20 平均14秒

最短作业优先:A\B\C\D 8\4\4\4 4+4=8 8+4=12 12+8=20 平均11秒

3. 最短剩余时间优先

最短作业优先的抢占式版本是最短剩余时间优先(Shortest Remaining Time Next,SRTN)算法。调度程序总是选择其剩余运行时间最短的那个进程运行。

4. 轮转法:

轮转(Round-Robin,RR)算法最早来自分时系统,
原基本思想是:将CPU的处理时间划分成一个个时间片,就绪队列中的诸进程轮流运行一个时间片。当时间片结束时,就强迫运行进程让出CPU,该进程进入就绪队列,等待下一次调度。

这里写图片描述

影响时间片值设置的主要因素

时间片即CPU分配给各个程序的时间,每个线程被分配一个时间段,称时间片,即该进程允许运行的时间,使各个程序从表面上看是同时进行的。

1)系统响应时间:当进程数一定时,时间片Q值的大小正比于系统对响应时间的要求,例如进程数目为N,要求的响应时间为T,则Q=T/N,Q值随T值的大或小而大或小。

案例:

进程数目有20个,响应时间为60,时间片为Q=60/20=3ms

进程数目有20个,响应时间为100,时间片为Q=100/20=5

Q值随T值的大或小而大或小

2)就绪进程的数目:当系统响应时间T一定时,时间片Q值的大小反比于就绪进程数。

案例:

响应时间为60,进程数目有30个,时间片为Q=60/30=2ms

响应时间为60,进程数目有60个,时间片为Q=60/60=1

3)计算机的处理能力:计算机的处理能力直接决定了每道程序的处理时间,处理速度越高,时间片值就越小。

案例:

响应时间为5,进程数目有40个,时间片为Q=5/40=0.13ms

响应时间为2,进程数目有20个,时间片为Q=10/60=0.1

时间片设置太短会导致过多进程切换,降低了CPU效率,而设置太长又可能引起对短的交互响应时间变长,将时间片设置为20~50ms通常是一个比较合理的折中区域。

5. 最高优先级算法

(Highest Priority First,HPF)进程(线程)调度每次将处理机分配给具有最高优先级的就绪进程(线程)。进程(线程)的优先级由进程(线程)优先数决定。

进程(线程)优先级的设置可以是静态的也可以是动态的。

静态优先级:是在进程(线程)创建时根据进程(线程)初始特性或用户要求而确定的,在进程(线程)运行期间不能再改变。

动态优先级:是在进程(线程)创建时先确定一个初始优先数,以后在进程(线程)运行中进程(线程)特性的改变(如等待时间增长),不断修改优先数。

在有的系统中,优先数小的进程(线程)优先级高!

如果不对优先级进行调整,则低优先级进程很可能会产生饥饿现象。

6. 多级反馈队列算法

调度模式结合算法:

先以最高优先级算法作为主要的调度算法,对于具有相同优先数的进程(线程)则按先进先出的调度算法处理。

多级队列算法综合了先进先出调度算法、时间片轮转算法和可抢占式最高优先级算法的一种进程(线程)调度算法。

基本算法思想:

1)被调度队列的设置:设置不同就绪队列;不同优先级别的队列有不同的时间片,对级别高的队列分配较小时间片。

案例:火车根据车型和车速设置不同就绪队列(高速列车G,动车列车D,特快列车T,直快列车Z,城际列车C,普通快速列车K,临时列车L,普通列车);不同列车有不同优先级(G>D>T>Z>C>K>L>P,让车)和时间片(运行速度(350~120)),级别高的列车分配较小时间片。

2)在同一个队列之内的调度原则。

案例:在游乐场玩,除了第N个小朋友(有特殊情况)按轮转RR法调度,其它小朋友按先进先出调度算法制度游玩(就绪队列排除轮流执行)。

3)在不同队列间的调度原则。系统总是先调度级别较高的队列,仅当级别较高的队列为空时才去调度次一级队列中的进程(线程)。

案例:在公路行驶时,特殊车辆道路行驶优先级较高的车先行通过。

以救护车>消防车>警车>公务车为最高级别车辆先行通过,当他们通过后其它车辆再通过!且一切车辆都要给它们让路!

4)进程(线程)优先级的调整原则。当正在执行的进程(线程)用完其时间片后,便被换出并进入次一级就绪队列。当等待进程(线程)被唤醒时,它进入与其优先级相同的就绪队列,若该进程(线程)优先级高于正在执行的进程(线程),便抢占CPU。

案例:!当一个警车去追犯罪份子时,车中途没有油了,便停车去加油,这时加油站有其它警车也在加油(没有执行公务,只要巡逻),那么正在执行公务的警车优先加油!(抢占加油)

7. 最短进程优先

如何从当前可运行进程中找出最短的那个进程

通过进程过去的行为进行推测,并执行估计运行时间最短那一个

通过当前测试值和先前估计值进行加权平均而得到下一个估计值的技术称作老化(Aging)

8. 实时系统中的调度算法

实时系统是一种时间起着主导作用的系统,即系统的正确性不仅取决于计算的逻辑结果,而且还依赖于产生结果的时间。

应用领域:实验控制、机器人、空中交通管制、空间站等

在实时系统中,某些任务是实时任务,具有一定紧急程序。

硬实时任务:指必须满足最后期限的限制,否则会给系统带来不可接受的破坏或致命的错误!

软实时任务:有一个与之关联的最后期限,并希望能满足这个期限的要求,但不是强制的,即使超过最后期限,调度和完成这个任务仍然有意义!

这里写图片描述

满足这个条件的实时系统称为可调度的!

案例:一个有三个周期性事件的软实时系统,其周期分别是100ms、200ms和300ms。如果这些事件分别需要50ms、30ms和100ms的CPU时间,那么该系统是可以调度的。

这里写图片描述

这个实时系统称为可调度

静态实时系统调度算法:在系统开始前作出调度决策

只有在可以提前掌握所完成的工作以及必须满足的截止时间等全部信息时,静态调度才能工作。

动态实时系统调度算法:在运行过程中进行调度决策

不需要这些限制

1)速率单调调度算法:适用于可抢先的周期性进程的经典静态实时调度算法是速率单调调度(Rate Monotonic Scheduling,RMS)。

适用于下列进程:

1.1)每个周期性进程必须在其周期内完成

1.2)没有进程依赖于任何其它进程

1.3)每一进程在一次突发中需要相同的CPU时间量

1.4)任何非周期性进程都没有最终时限

1.5)进程抢先即刻发生而没有系统开销

案例分析:

一个系统必须每30ms运行一次,每秒运行?次,优先级为?

1s=1000ms 1000/30=33 每秒运行33次,优先级为33

一个系统必须每40ms运行一次,每秒运行?次,优先级为?

1s=1000ms 1000/40=25 每秒运行25次,优先级为25

优先级与进程的速率(每秒运行进程的次数)呈线性关系

2)最早最终时限优先调度(Earliest Deadline First,EDF)算法。

EDF是一个动态算法,它不像速率调度算法要求进程周期性,也不像RMS要求每个CPU突发有相同的运行时间。而是只要一个进程需要CPU时间,它就宣布它的到来和最终时限。

举例:一个火车从进站开始计算时间,原计算停2分钟,发现人太多,最终停了5分钟,这样,下一列火车就不能抢先当前火车的停靠(进程);

如果一个高速列车(G)按原计划时间停靠2分钟,发现当前离站台最近的车是普通车,系统会认为,该普通车必须停车让路,等我们高速列车G停靠站台2分钟后你才可以进来,这就是最早最终时限优先算法!

备注

哪些调度算法适用于交互式系统

  • 多级反馈队列
  • 时间片轮转
  • 高优先级优先

关于进程调度d的描述中,正确的是

  • 任何进程必须通过调度才能运行
  • 操作系统可以根据不同情景分类应用多种进程调度算法
  • 交互式操作系统一般采用时间片轮转调度算法
  • 操作系统运行中不可以动态改变进程调度算法
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值