(一) 进程与线程
- 进程概念
- 进程的状态与转换
- 进程控制
- 进程组织
- 进程通信
进程间通信方式:共享存储系统;消息传递系统;管道通信(管道属于一种共享文件)。
管道:一时刻只能单向通信。
6.线程概念与多线程模型
(1)程序顺序执行的特点
1顺序性 2封闭性 3可再现性
(2)程序并发执行的特点
1失去程序的封闭性
2程序与计算不再一一对应
3程序并发执行的相互制约
(3)进程的定义、进程与程序的区别: 进程即是一个具有独立功能的程序在某个数据集合的一次运行活动。
- 进程的基本特征:动态性,并发性,独立性,异步性,结构性。
(4)进程和程序是既有联系又有区别的两个概念:
1程序是指令的有序集合,本身没有任何运行的含义是一个静态的概念。而进程是程序在处理机上的一次执行过程,是个动态的概念。 2进程是一个能独立运行的单位,能与其他进程并行活动 3进程是竞争计算机系统有限资源的基本单位 4同一程序同时运行若干不同的数据集合上将属于不同的进程。
(5)进程的基本状态及其变迁
三种基本状态:就绪、运行、等待。状态变迁是有方向的。
(6)进程的描述
用进程控制块(PCB)来描述一个进程。
从结构上来说,进程由一个程序段和一个进程控制块组成。
(7)进程控制
所谓进程控制,就是系统使用一些具有特定功能的程序段来创建、撤消进程以及完成进程各状态间的转换,从而达到多进程高效率并发执行和协调、实现资源共享的目的。
进程创建、进程撤消、进程等待和进程唤醒等。由操作系统内核来实现。
把系统态下执行的某些具有特定功能的程序段称为原语。原语可分为两类:一类是机器指令级的,其特点是执行期间不允许中断,正如在物理学中的原子一样,在操作系统中,它是一个不可分割的基本单位。另一类是功能级的,其特点是作为原语的程序段不允许并发执行。
- 进程组织
常用的组织方式有两种:链接方式、索引方式。
- 进程通信:指进程间的信息交换。
按通信内容可以划分为2种:低级通信,高级通信高级通讯机制类型:
-
- 共享存储器系统(Shared-Memory System):相互通讯的进程通过共享数据结构和存储区进行通讯
- 消息传递系统(Message passing System):在消息传递系统中,进程间的数据交换是以消息(message,在计算机网络中又称报文)为单位。程序员直接利用系统提供的一组通讯命令(原语)来实现通讯。消息缓冲机制,信箱通信方式
- 管道(pipe)通信系统
管道(pipe)通讯由UNIX首创的一种借助文件和文件系统形成的一种通信方式,。由于其有效性,一些系统继UNIX之后相继引入了管道技术,如pc-dos,管道通信将成为进程通讯的一种重要方式。消息缓冲通信机构是以内存缓冲区为基础。
管道是以文件系统为基础。有名管道,无名管道
- 线程概念与多线程模型 线程是进程中的一个实体,是被系统独立调度和分配的基本单位,故又称为轻权(轻型)进程(Light Weight Process),它由线程控制表、存储线程上下文的用户栈以及核心栈组成。
{传统的进程称为重型进程(Heavy Weight Process)。}
习题
- 什么是进程?
答:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。(在Windows NT等采用微内核结构的现代操作系统中,进程的功能发生了变化:它只是资源分配的单位,而不再是调度运行的单位,其调度运行的基本单位是线程。)
- 什么是线程?它与进程有什么关系?
答:线程是进程中执行运算的 小单位,即处理机调度的基本单位。它与进程的关系是:一个线程只能属于一个进程,而一个进程可以有多个线程;资源分配给进程,同一进程的所有线程共享该进程的所有资源;处理机分给线程,即真正在处理机上运行的是线程;线程在运行过程中,需要协作同步,不同进程的线程间要利用消息通信的办法实现同步。
特别注意的是:传统操作系统中的进程概念与现代操作系统中的进程概念不同——简单说,传统操作系统中进程具有分配资源、调度运行两大功能,而现代操作系统中进程只作为分配资源单位,线程才作为调度运行单位。
- 一个进程入睡时其断点落在何处?它被唤醒后从何处继续原来的执行?
答:一个进程入睡是指该进程由于缺乏资源不能占用CPU,进入等待状态。一个进程由程序、数据集合和进程控制块(PCB)组成。PCB是进程存在的唯一标志。PCB中包括如下内容:进程标志号、进程状态(执行/就绪/等待)、进程标志、进程优先数、程序地址、现场保护区(通常被保护的信息有程序计数器、程序状态字、各个工作寄存器等)、通信机构、其他信息等。
处于睡眠状态的进程,它的断点在它的PCB中的现场保护区中保护起来。保存程序运行的CPU现场,以便在将来的某一时刻恢复并继续原来的运行。它被唤醒后,把它从等待进程队列中摘下,将进程状态改为就绪,然后将它插入到就绪队列中;等它占用CPU进入执行状态时,从断点处继续执行。
- 进程之间有哪些基本的通信方式?它们分别有什么特点?适用于哪些场合?
答:进程通信根据交换信息量的多少分为高级通信和低级通信。低级通信一般只传送一个或几个字节的信息,以达到控制进程执行速度的作用(如PV操作);高级通信则要传送大量数据,目的不是为了控制进程的执行速度,而是为了交换信息。
高级进程通信方式有很多种,大致可归并为三类:共享存储器、管道文件和消息传递。共享存储器:在内存种分配一片空间作为共享存储区。需要进行通信的进程把它附加到自己的地址空间中,不需要时则把它取消。
管道文件:它是连接两个命令的一个打开文件。一个命令向该文件中写入数据,为写者;另一个命令从该文件中读出数据,为读者。
消息传递:它以消息为单位在进程间进行数据交换。具体说明见教材 “消息缓冲”。
- 程序的并发执行是现代操作系统的基本特征之一,为了更好地描述这一特征而引入了进程这一概念。
- 进程存在的标志是进程控制块PCB。
- 进程的静态实体由程序,数据集合和进程控制块PCB三部分组成。
- 用于进程控制的原语主要有建立原语、撤消原语,挂起原语和激活原语。
- 进程被创建后, 初处于就绪状态,然后经进程调度程序选中后进入执行 状态。
- 进程创建工作主要完成的是创建进程控制块(PCB),并把它挂到就绪队列中。
- 如果系统中有n个进程,则在就绪队列中进程的个数 多为n-1。
- 通常,线程的定义是是进程中执行运算的 小单位。在现代操作系统中,资源的分配单位是进程,而处理机的调度单位是线程,一个进程可以有多个线程。
- 计算机系统一般都设计有两种运行状态:用户态和核心态。
- 操作系统中,可以并行工作的基本单位是[1],[1]也是系统核心调度及资源分配的基本单位,它是由[2]组成的,它与程序的主要区别是[3]。
供选择的答案:
[1]: A.作业 B. 函数 C. 进程 D.过程
[2]: A.程序、数据和PCB B. 程序、数据和标识符
C.程序、标识符和PCB D. 数据、标识符和PCB
[3]:A.程序有状态,而它没有 B. 它有状态,而程序没有
C.程序可占用资源,而它不可 D.它可占用资源,而程序不可
- 下列进程状态的转换中,哪一个是不正确的( )。
A.就绪执行 B. 执行就绪
C.就绪等待 D. 等待就绪
- 下列各项步骤中,哪一个不是创建进程所必须的步骤( )。
- 建立一个进程控制块PCB B. 由CPU调度程序为进程调度CPU
C.为进程分配内存等必要的资源 D.将PCB链入进程就绪队列
- 在下列特性中,哪一个不是进程的特性( )。
A.异步性 B. 并发性 C. 静态性 D. 动态性
- 进程就是可与其他程序共行执行的程序段的一次执行过程,它是系统进行资源分配和调度的一个基本单位。进程具有[1]、[2]、调度性、异步性和结构性5个基本特征。进程是一次执行过程,具有生命期体现了进程的[1]特征。进程由程序段、[3]、[4]组成,其中[4] 是进程在系统中存在的唯一标识。
供选择的答案:
[1][2] A、动态性 B、静态性 C、共行性
D、并发性 E、可执行性 F、易用性
-
- A、过程 B、数据 C、进程标识符 D、函数
- A、FCB B、FIFO C、PCB D、JCB
- 进程执行时的间断性,决定了进程可能具有多种状态。进程的基本状态有三种,在分时系统中,当一个进程拥有的时间片到时,则该进程即由[1]进入[2]。如果出现因某种原因使得处理机空闲时,则需要从就绪队列中选择一进程,并将处理机分配给它,此时该进程进入[3],这个过程是由[4]来完成。
供选择的答案:
[1][2][3] A、就绪状态 B、静止状态 C、等待状态 D、执行状态
[4] A、进程控制程序 B、资源分配程序
C、进程调度程序 D、处理机分配程序
- 为了描述进程的动态变化过程,采用了一个与进程相联系的( )系统,根据它而感知进程的存在。
A.进程状态字 B. 进程优先数 C.进程控制块 D. 进程起始地址
- 已经获得除( )以外的所有运行所需资源的进程处于就绪状态。
A.存储器 B. 打印机 C.CPU D. 磁盘空间
- 进程是( )。
A.与程序等效的概念 B. 并发环境中程序的执行过程
C.一个系统软件 D. 存放在内存中的程序
- 进程具有并发性和( )两大重要属性。
A.动态性 B. 静态性
C.易用性 D. 封闭性
- 操作系统在控制和管理进程过程中,涉及到( )这一重要数据结构,这是进程存在的唯一标103、 志。 A.FCB B. FIFO
C.FDT D. PCB
- 并发性是指若干事件在( )发生。
A.同一时刻 B. 同一时间间隔内
C.不同时刻 D. 不同时间间隔内
- 顺序程序和并发程序的执行相比,( )。
A.基本相同
-
- 有点不同
C.并发程序执行总体上执行时间快
D. 顺序程序执行总体上执行时间快
- 在单一处理机上,将执行时间有重叠的几个程序称为( )。
A.顺序程序 B. 多道程序
C.并发程序 D. 并行程序
- 引入多道程序技术后,处理机的利用率( )。
A.降低了 B. 有所改善
C.大大提高 D. 没有变化,只是程序的执行方便了
- 在单一处理机上执行程序,多道程序的执行是在( )进行的。
A.同一时刻 B. 同一时间间隔内
C.某一固定时刻 D. 某一固定时间间隔内
- 在单处理机系统中,处于运行状态的进程( )。
A.只有一个 B. 可以有多个
C.不能被挂起 D. 必须在执行完后才能被撤下
- 如果某一进程获得除CPU外的所有所需运行资源,经调度,分配给它CPU,该进程将进入( )。
A.就绪状态 B. 运行状态
C.等待状态 D. 活动状态
- 如果某一进程在运行时,因某种原因暂停,此时将脱离运行状态,而进入( )。
A.自由状态 B. 停止状态
C.等待状态 D. 静止状态
- 一个进程被唤醒意味着( )。
A.该进程重新占有了CPU B.进程状态变为就绪
C.它的优先权变为 大 D.其PCB移至就绪队列的队首
- 进程从运行状态变为等待状态的原因是( )。
A.输入或输出事件发生 B.时间片到
C.输入或输出事件完成 D.某个进程被唤醒
- 在操作系统中同时存在多个进程,它们( )。
A.不能共享系统资源
B.不能调用同一段程序代码
C.可以共享允许共享的系统资源
D.可以共享所有的系统资源
36、 操作系统中有一组常称为特殊系统调用,它不能被系统中断,在操作系统中称为( )。
A.初始化程序 B. 原语
C.子程序 D. 控制模块
47、 进程和程序的本质区别是( )。
A.存储在内存和外存 B.顺序和非顺序执行机器指令
C.分时使用和独占使用计算机资源 D.动态和静态特征
(二)处理机调度
1.调度的基本概念
2.调度时机、切换与过程
3.调度的基本准则
4.调度方式
5.典型调度算法
先来先服务调度算法;短作业(短任务、短进程、短线程)优先调度算法;时间片轮转调度
算法;优先级调度算法;高响应比优先调度算法;多级反馈队列调度算法。
- 一般来说,计算机中的调度可分为4级
作业调度:又称为“宏观调度”、“高级调度”。按一定的原则对外存输入井上的大量后备作业进行选择,给选定的作业分配内存、输入输出设备等必要的资源,并建立相应的进程,使得该作业的进程获得竞争处理机的权利。
交换调度:又称为“中级调度”。按照给定的原则和策略,将处于外存交换区中的就绪状态或就绪准等待状态的进程调入内存,或把处于内存就绪或内存等待状态的进程交换到外存交换区。
进程调度:又称为“微观调度”、“低级调度”。按照某种策略和方法选取一个处于就绪状态的进程占用处理机。
线程调度:类似进程调度
- 进程调度的时机
(1)正在执行的进程执行完毕。这时,如果不选择新的就绪进程执行,将浪费处理机资源。
(2)执行中进程自己调用阻塞原语将白己阻塞起来进入睡眠等状态。
(3)执行中进程调用了P原语操作,从而因资源不足而被阻塞;或调用了v原语操作激活了等待资源的进程队列。
(4)执行中进程提出I/O请求后被阻塞。
(5)在分时系统中时间片已经用完。
(6)在执行完系统调用等系统程序后返回用户进程时,这时可看作系统进程执行完毕,从而可调度选择一新的用户进程执行。
以上都是在可剥夺方式下的引起进程调度的原因。在CPU执行方式是可剥夺时.还有
(7)就绪队列中的某进程的优先级变得高于当前执行进程的优先级,从而也将引发进程调度。
- 进程的上下文切换过程: 用户态执行进程A代码--进入OS核心(通过时钟中断或系统调用)保存进程A的上下文,恢复进程B的上下文(CPU寄存器和一些表格的当前指针)用户态执行进程B代码
注:上下文切换之后,指令和数据快速缓存cache通常需要更新,执行速度降低
- 调度的基本准则
1) 面向用户的准则:为了满足用户的需求所应遵循的一些准则
(1)周转时间短(从提交到完成的时间间隔)
Ti = Tei - Tsi
作业平均周转时间为(有n个作业,n>=1) n
T=1/n ∑ Ti
i=1
一个作业的周转时间说明了该作业在系统内停留的时间
包含两部分:一是等待时间;二为执行时间
Ti (停留时间) = Twi + Tri 带权周转时间 :
(等待时间+执行时间)/执行时间
Wi: Wi=Ti/Tri
平均带权周转时间为:
n
W=1/n ∑ Wi
i=1
- 响应时间快
分时系统,用户通过键盘提交一个请求开始,直至系统首次产生响应为止的时间。
- 截止时间的保证 实时系统
- 优先权准则
2 )面向系统的准则
- 系统的吞吐量高
- 处理机利用率好
- 各类资源的平衡利用
- 调度方式 是指当某一进程正在处理机上执行时,若有某个更为重要或紧迫的进程需要进行处理,此时如何分配处理机。通常有剥夺调度和非剥夺调度。
- 调度算法
- 先来先服务(FCFS)调度算法
将用户作业和就绪进程按提交顺序或变为就绪状态的先后排成队列,并按照先来先服务的方式进行调度处理,是一种 普遍和 简单的方法。它优先考虑在系统中等待时间长的作业,而不管要求运行时间的长短。
-
- 短作业优先法(SJF) 该算法总是优先调度要求运行时间 短的作业
- 高响应比作业优先算法(HRN)
高响应比作业优先算法是对FCFS方式和SJF方式的一种综合平衡响应比R定义为系统对作业的响应时间与作业要求运行时间的比值
R=响应时间 / 要求运行时间
=(作业等待时间+需运行时间)/ 需运行时间
=1+已等待时间 / 需运行时间
=1+W/T
-
- 轮转法(Round Robin)
采用此算法的系统,其程序就绪队列往往按进程到达的时间来排序。进程调度程序总是选择就绪队列中的第一个进程,也就是说按照先来先服务原则调度,但一旦进程占用处理机则仅使用一个时间片。在使用先一个时间片后,进程还没又完成其运行,它必须释放出处理机给下一个就绪的进程,而被抢占的进程返回到就绪队列的末尾重新排队等待在次运行。
-
- 优先级调度算法
一种常用的进程调度算法是把处理机分配给具有 高优先数的进程(用于实时系统) 在这种算法中,首先考虑的问题是如何确定进程的优先数。 一种是静态优先数,另一种是动态优先数。
-
- 多级反馈队列
设置多个就绪队列,分别赋予不同的优先级,如逐级降低,队列1的优先级 高。每个队列执行时间片的长度也不同,规定优先级越低则时间片越长,如逐级加倍
新进程进入内存后,先投入队列1的末尾,按FCFS算法调度;若按队列1一个时间片未能执行完,则降低投入到队列2的末尾,同样按FCFS算法调度;如此下去,降低到 后的队列,则按"时间片轮转"算法调度直到完成。
仅当较高优先级的队列为空,才调度较低优先级的队列中的进程执行。如果进程执行时
有新进程进入较高优先级的队列,则抢先执行新进程,并把被抢先的进程投入原队列的末尾。习题
- 单道批处理系统,采用短作业优先调度算法。当第一个作业进入后开始调度,现有3个作业,进入和计算时间如图所示,求:(1)完成下表;(2)计算平均周转时间。
序号 | 进入时间 | 需计算时间 | 开始执行时间 | 完成时间 | 周转时间 |
1 | 9:00 | 60分钟 |
|
|
|
2 | 9:10 | 45分钟 |
|
|
|
3 | 9:15 | 25分钟 |
|
|
|
答:平均周转时间83分钟20秒。(3分)
序号 | 进入时间 | 需计算时间 | 开始执行时间 | 完成时间 | 周转时间 |
1 | 9:00 | 60分钟 | 9:00 | 10:00 | 60分钟 |
2 | 9:10 | 45分钟 | 10:25 | 11:10 | 120分钟 |
3 | 9:15 | 25分钟 | 10:00 | 10:25 | 70分钟 |
- 某多道程序设计系统配有一台处理器和两台输入输出设备IO1和IO2。现有优先数从高到
低3个进程P1、P2和P3同时存在,他们使用资源的先后顺序和占用时间分别是:进程P1:IO2(30ms),CPU(10ms),IO1(30ms),CPU(10ms),IO2(10ms) 进程P2: IO1(20ms),CPU(20ms),IO2(40ms)
进程P3:CPU(30ms),IO1(20ms)
忽略调度等所需时间,回答下列问题:(1)进程调度采用非抢占式的优先数算法时3个进程从开始到完成所用的时间分别是多少?CPU的利用率为多少?(2)进程调度采用可抢占的优
先数算法时,3个进程从开始到全部完成总共用了多少时间?CPU的利用率为多少?
答:
- 三个进程从开始到完成所用的时间分别为:进程P1 110ms ;进程P2 100ms;进程P3
50ms 。 处理器的利用率为(30+20+10+10)/110 =63.6%;
- 3个进程从开始到全部完成总共用了100ms时间,此时CPU的利用率为
(20+10+10+10+10+10)/100=70%。
- 某分时系统中的进程可能出现如图所示状态变化,回答下列问题:(1)根据图示,该系统采用的是什么进程调度策略?(2)写出图示中每一个状态变化的原因。
答:(1)分析图可知,图中2变化是时间片到的时候才会发生,又考虑到是分时系统,所以进程调度采用的是时间片轮转算法。(3 分)(2)变化原因如下表所示:
变化 | 原因 |
1 | 进程被选中运行 |
2 | 运行满一个时间片(时间片到)(1 分) |
3 | 启动打印机工作后等待 (1 分) |
4 | 等待磁盘工作结束 (1 分) |
5 | 打印机工作结束 (1 分) |
6 | 磁盘传输信息结束 (1 分) |
- 5个进程P1、P2、P3、P4、P5同时依次进入就绪队列,它们的优先数和需要的处理器时
间如图所示:
进程 | 所需处理器时间 | 优先数 |
P1 | 10 | 3 |
P2 | 1 | 1 |
P3 | 2 | 3 |
P4 | 1 | 4 |
P5 | 5 | 2 |
忽略进程调度所花费时间,回答下列问题:
(1)写出分别采用先来先服务和非抢占式的优先数调度算法选中进程执行的顺序(2)分别计算上述两种算法使各进程在就绪队列中的等待时间以及两种算法下的平均等待时间。
答:(1)先来先服务次序:P1、P2、P3、P4、P5;(2分)非抢占式优先数: P1、P4、P3、 P5、P2;(2分)(2)各进程在就绪队列中的等待时间如下表:先来先服务算法的平均等待时间:9.6;(2分)非抢占式优先数算法的平均等待时间:10.4。(2分)
(进程P1进来时cpu空闲无需使用调度算法,直接得到CPU)
进程 | 处理器时间 | 优先数 | 等待时间(先来先服务) | 等待时间(非抢占式优先数) |
P1 | 10 | 3 | 0 | 0 |
P2 | 1 | 1 | 10 | 18 |
P3 | 2 | 3 | 11 | 11 |
P4 | 1 | 4 | 13 | 10 |
P5 | 5 | 2 | 14 | 13 |
- 一个具有两道作业的批处理系统中,作业调度采用先来先服务的调度算法,作业一旦被调度运行就不再退出,作业对应的进程调度采用内存中的就绪进程平分CPU时间,不计作业对换及其他系统开销。如下表的作业序列。
①计算平均周转时间和平均带权周转时间
作业号 进入时刻 估计运行时间 JOB1 8:00 25 分钟
JOB2 8:20 30 分钟 JOB3 8:25 25 分钟
JOB4 8:30 15 分钟
答:
提交时刻 | 运行时间 | 结束时刻 | 周转时间 | 带权周转时间 |
1 | 10 | 15 | 14 | 1.4 |
2 | 2 | 4 | 2 | 1 |
3 | 2 | 6 | 3 | 1.5 |
4 | 1 | 21 | 17 | 17 |
5 | 5 | 20 | 15 | 3 |
(1)周转时间=14+2+3+17+15=51;平均周转时间=51/5=10.2 (4分)
(2)带权周转时间=1.4+1+1.5+17+3=23.9;平均带权周转时间=23.9/5=4.78 (4分)
- 某系统采用不能移动正在主存中作业的可变分区方式管理主存,现有供用户使用的主存空间100K,系统配有4台磁带机(静态分配),采用多道程序设计技术,忽略设备工作时间和系统进行调度所花时间,若对计算时间短的作业进程赋予高优先数,作业调度采用“可抢占的优先数”调度算法,则平均周转时间为多少。作业如下:
序号 | 入井时间 | 要求计算时间 | 需要主存量 | 申请磁带机数 |
1 | 10:00 | 25分钟 | 15 K | 2台 |
2 | 10:20 | 30分钟 | 60 K | 1台 |
3 | 10:30 | 10分钟 | 50 K | 3台 |
4 | 10:35 | 20分钟 | 10 K | 2台 |
5 | 10:40 | 15分钟 | 30 K | 2台 |
答:平均周转时间为43分钟(4分)。列表如下:(4分)
序号 | 选中次序 | 选中时间 | 开始执行时间 | 完成时间 | 周转时间 |
1 | 1 | 10:00 | 10:00 | 10:25 | 25分钟 |
2 | 2 | 10:20 | 10:25 | 11:15 (10:35暂停20分) | 55分钟 |
3 | 4 | 11:15 | 11:15 | 11:25 | 55分钟 |
4 | 3 | 10:35 | 10:35(抢占) | 10:55 | 20分钟 |
5 | 5 | 11:25 | 11:25 | 11:40 | 60分钟 |
请分别写出采用“先来先服务调度算法”和“计算时间 短优先算法”选中作业执行顺序以及它们的平均周转时间。
答:两种调度算法相同,平均周转时间为44分钟(4分)。列表如下:(4分)
作业序号 | 选中次序 | 选中时间 | 开始执行时间 | 完成时间 | 周转时间 |
1 | 1 | 10:00 | 10:00 | 10:25 | 25分钟 |
2 | 2 | 10:20 | 10:25 | 10:55 | 35分钟 |
3 | 5 | 10:30 | 11:30 | 11:40 | 75分钟 |
4 | 3 | 10:35 | 10:55 | 11:15 | 40分钟 |
5 | 4 | 10:55 | 11:15 | 11:30 | 50分钟 |
- 某单道系统中有3个作业正在输入井中等待处理,每个作业估计的计算时间均为2小时,那么这3个作业的平均周转时间至少为( )小时。
A.2 B.4 C.6 D.8
解:(2+4+6)/3=4
- 某分时系统采用时间片轮转调度算法分配处理器,对每个用户的请求需花费200毫秒可给出应答。那么,要保证响应时间不超过4秒,该系统 多可同时接收( )个终端用户。
A.5 B.20 C.50 D.200
解:4s/200ms=20
(9)( )算法综合考虑了作业的等待时间和计算时间。
A.先来先服务 B.计算时间短的优先
C.均衡调度 D.响应比 高者优先
D:响应比高者优先算法:响应比=(等待时间+运行时间)/运行时间。
(10)为了对紧急进程或重要进程进行调度,调度算法应采用( )。
A.先进先出调度算法 B. 优先数法
C. 短作业优先调度 D. 定时轮转法
- 进程调度的关键问题是选择合理的( ),并恰当地进行代码转换。
A.时间片间隔 B. 调度算法
C.CPU速度 D. 内存空间
- 采用时间片轮转法进行进程调度是为了( )。
A. 多个终端都能得到系统的及时响应
- 先来先服务
- 优先级较高的进程得到及时响应
D.需要CPU 短的进程先做
(三)进程同步
- 进程同步的基本概念
- 实现临界区互斥的基本方法软件实现方法;硬件实现方法。
- 信号量
- 管程
- 经典同步问题
生产者-消费者问题;读者-写者问题;哲学家进餐问题。
- 进程同步的基本概念
进程同步:它主要源于进程合作,是进程间共同完成一项任务时直接发生相互作用的关系。为进程之间的直接制约关系。在多道环境下,这种进程间在执行次序上的协调是必不可少的。
进程互斥:它主要源于资源共享,是进程之间的间接制约关系
在多道系统中,每次只允许一个进程访问的资源称为临界资源,进程互斥就是保证每次只有一个进程使用临界资源。
- 临界区
每个进程中访问临界资源的那段程序称为临界区(临界资源是一次仅允许一个进程使用
的共享资源)。每次只准许一个进程进入临界区,进入后不允许其他进程进入。
临界资源:一次仅允许一个进程使用的资源。
软件方法教材中提到四种算法。(西电的教程)
硬件法采用硬件指令的方式:(1)Test-and-Set(测试并设置指令) (2)Swap(交换指令)
- 信号量——用于表示资源数目或请求使用某一资源的进程个数的整型量.
S是与临界区内所使用的公用资源有关的信号量。
S≥0 可供并发进程使用的资源数
S<0 正在等待使用临界区的进程数
- P原语操作的主要动作
S-1
如果S-1以后仍大于等于零,则进程继续进行
如果S-1以后小于零,则将该进程阻塞以后插入阻塞队列,然后转进程调度
- V原语操作的主要动作
S+1
如果相加后结果大于零,则继续进行 相加后结果小于等于零,则从该信号的等待队列中唤醒一个等待进程,然后返回原进程继续执行或者转进程调度。
- 管程的定义:管程是关于共享资源的数据结构及一组针对该资源的操作过程所构成的软件模块。1973年,Hoare和Hanson所提出;其基本思想是把信号量及其操作原语封装在一个对象内部。即:将共享变量以及对共享变量能够进行的所有操作集中在一个模块中。
- 用信号量解题的关键
步骤:(1)信号量的设置;(2) 给信号量赋初值(常用的互斥和同步信号量值的
大小);(3) P、V操作安排的位置(其中,P的顺序不能颠倒,V的顺序任意) 注意区分1)公用信号量,互斥时使用的信号量(二元信号量):它仅允许取值为
“0”与“1”,用作互斥。它联系着一组互斥进程,初值为1,每个进程均可对之施加P、V操作。 2)私用信号量:一般信号量(资源信号量):它联系着一组并发进程,但其初值为0,或为某个正整数n,表示资源的数目,主要用于进程同步。只允许拥有它的进程对之施加P操作。
习题
- 利用P、V原语实现进程互斥 smaphore mutex=1; cobegin
Pa: { Pb: { while(true){ while(true){
p(mutex) p(mutex)
临界区代码 临界区代码
v(mutex) v(mutex)
… …
} } } } coend
- 用P、V操作描述以下三个进程共享两个缓冲区的问题。
- 利用信号量来描述前趋图关系
Struct smaphore a,b,c,d,e,f,g,h,I,j=0,0,0,0,0,0,0,0,0,0
cobegin
{S1;V(a);V(b);V(c);} {P(a);S2;V(d);}
{P(b);S3;V(e);V(f);} {P(c);S4;V(g);}
{P(d);P(e);S5;V(h);} {P(f);P(g);S6;V(i)}
{P(h);P(i);S7;V(j);} {P(j);S8;}
coend
4、生产者—消费者问题(the producer-consumer problem)
问题描述:若干进程通过有限的共享缓冲区交换数据。其中,"生产者"进程不断写入,而" 消费者"进程不断读出;共享缓冲区共有N个;任何时刻只能有一个进程可对共享缓冲区进行操作。 full是"满"数目,初值为0,empty是"空"数目,初值为N。 mutex用于访问缓冲区时的互斥,初值是1
Producer:
P(empty); P(mutex); one unit --> buffer;
V(mutex);
V(full);
Consumer:
P(full); P(mutex); one unit <-- buffer;
V(mutex);
V(empty);
5、读者-写者问题(the readers-writers problem)
一个文件可能被多个进程共享,为了保证读写的正确性和文件的一致性,系统要求,当有读者进程读文件时,不允许任何写者进程写,但允许多读者同时读;当有写者进程写时,不允许任何其它写者进程写,也不允许任何读者进行读。 为了解决读者和写者问题,需设置两个信号量:
(1)读互斥信号量rmutex,用于使读者互斥地访问共享变量readcount,这里 readcount是记录有多少读者正在读;
(2)写互斥信号量wmutex,用于实现读写互斥和写写互斥地访问共享文件。读者— 写者问题进行如下描述:
semapore rmutex,wmutex=1,1;
int readcount:=0;
cobegin vord readeri(vord)(i=1,2,…k)
{
while(true){
p(rmutex);
if readcount=0 then
p(wmutex);
readcount:=readcount+1;
v(rmutex);
读文件;
…
p(rmutex);
readcount:=readcount-1;
if readcount=0 then v(wmutex);
v(rmutex);
}
}
vord writerj(vord)(j=1,2,…,m)
{
while(true){
p (wmutex);
写文件;
v(wmutex);
}
}
Coend
第二类读者写者问题:写者优先条件:
- 多个读者可以同时进行读(N)
- 写者必须互斥(只允许一个写者写,也不能读者写者同时进行)
- 写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者)
写法一:
S,sn:semaphore;
S:=1;//用于写者与其他读者/写者互斥的访问共享数据
sn:=n;//该信号量初始值设为n ,表示 多允许n个读者进程同时进行读操作
Cobegin
Reader I(I:=1,2,…n);
{
P(s); //读者、写者互斥
P(sn);
V(s); // 释放读写互斥信号量,允许其它读、写进程访问资源
Read file f;
V(sn);
}
Writer I (I=1,2,…,n);
{
P(s);
For I:=1 to n do p(sn); //禁止新读者,并等待已进入的读者退出
Write file f;
For I:=1 to n do v(sn); // 恢复允许rmutex 值为n
V(s);
}
Coend;
写法二:仅在前面读者优先中的代码中均添加一个W信号,用于实现写进程优先
semaphore rmutex,wmutex=1,1;
int readcount:=0;
semaphore w=1;
cobegin vord readeri(vord)(i=1,2,…k)
{
while(true){
P(w);
p(rmutex);
if readcount=0 then
p(wmutex);
readcount:=readcount+1;
v(rmutex);
V(W);
读文件;
…
p(rmutex);
readcount:=readcount-1;
if readcount=0 then v(wmutex);
v(rmutex);
}
}
vord writerj(vord)(j=1,2,…,m)
{
P(w);
while(true){
p (wmutex);
写文件;
v(wmutex);
V(w);
}
}
Coend
- 哲学家进餐问题 问题描述:(由Dijkstra首先提出并解决)5个哲学家围绕一张圆桌而坐,桌子上放着5 支筷子,每两个哲学家之间放一支;哲学家的动作包括思考和进餐,进餐时需要同时拿起他左边和右边的两支筷子,思考时则同时将两支筷子放回原处。如何保证哲学家们的动作有序进行?如:不出现相邻者同时要求进餐;不出现有人永远拿不到筷子;
Var S:array[0..4] of :semaphore;
S[I]:=1;
Repeat
P(s[I]);
P(s[(I+1) % 5]); Eat; v (s[I]); v (s[(I+1) %5]); Until false;
上面代码会出现所有哲学家均拿起自己左边的筷子而出现死锁的情况,应该加一个信号确保两只筷子同时拿起才能吃饭,且哲学家不能同时拿筷子
Var S:array[0..4] of :
semaphore; S[I]:=1 ,mutex=1;
while(1){
P(mutex);
P(s[I]);
P(s[(I+1) % 5]);
Eat;
P(mutex);
v (s[I]);
v (s[(I+1) %5]);
Until false;
}
思考如何用AND信号量实现哲学家吃饭问题?
(10)图书馆阅览室问题 问题描述:假定阅览室 多可同时容纳100个人阅读,读者进入时,必须在阅览室门口的一个登记表上登记,内容包括姓名、座号等,离开时要撤掉登记内容。用P、V操作描述读者进程的同步算法。
#define CHAIRS 100
Semophore mutex=1;
Int Readers=0;
Void Reader( )
{while (1) {
P(mutex);
If (readers< CHAIRS) {
登记;
Readers++; V(mutex);
阅读;
P(mutex);
撤销登记;
Readers--;
V(mutex); }else
V(mutex);
}
}
另一种解法:答:读者的动作有两个,一是填表进入阅览室,这时要考虑阅览室里是否有座位;一是读者阅读完毕,离开阅览室,这时的操作要考虑阅览室里是否有读者。读者在阅览室读书时,由于没有引起资源的变动,不算动作变化。
seats和reader信号量类似于生产者消费者中记录资源的full和empty;
算法的信号量有三个:seats——表示阅览室是否有座位(初值为100,代表阅览室的空
座位数);readers——表示阅览室里的读者数,初值为0;用于互斥的mutex,初值为1。
读者进入阅览室的动作描述getin:
while(TRUE){
P (seats); /*没有座位则离开*/ P(mutex) /*进入临界区*/ 填写登记表; 进入阅览室读书;
V(mutex) /*离开临界区*/
V(readers)
}
读者离开阅览室的动作描述getout:
while(TRUE){
P(readers) /*阅览室是否有人读书*/ P(mutex) /*进入临界区*/ 消掉登记;离开阅览室;
V(mutex) /*离开临界区*/
V(seats) /*释放一个座位资源*/
}
提问:这两种解法有什么不同。
8、理发师问题(Dijkstra 1965)
问题描述:一个理发店由一个有几张椅子的等候室和一个放有一张理发椅的理发室组成。若没有要理发的顾客,则理发师就去睡觉;若一顾客走进理发店且所有的椅子都被占用了,则该顾客就离开理发店;若理发师正在为人理发,则该顾客就找一张空椅子坐下等待;若理发师在睡觉,则顾客就唤醒他,设计一个协调理发师和顾客的程序。
#define CHAIRS 5 Semaphore
customers=0;babers=0;mutex=1;
Int waiting=0;
Void barber() {while (1){
P(customers);
P(mutex);
Waiting--;
V(barbers); V(mutex);
Cut_hair();
}
}
Void customer()
{p(mutex);
If (waiting<CHAIRS){
Waiting++;
V(customers);
V(mutex);
P(barbers);
Get_haicut();
}else{
V(mutex);
}
}
- 吃水果问题 问题描述:桌上有一只盘子,每次只能放一个水果,爸爸专向盘中放苹果,妈妈专向盘中放桔子,儿子专等吃盘里的桔子,女儿专等吃盘里的苹果。只要盘子空,则爸爸或妈妈可向盘中放水果,仅当盘中有自己需要的水果时,儿子或女儿可从中取出,请给出四人之间的同步关系,并用PV操作实现四人正确活动的程序。
- 司机—售票员问题
semaphore s1=0;//是否启动车辆,0表示不能启动
s2=0;//是否可以开车门,0表示不可以开
Main() {cobegin driver(); busman(); coend;} Driver()
{while (1)
{p(s1);
启动车辆; 正常行车; 到站停车;
V(s2);
} } busman()
{while (1)
{
关车门;
v(s1); 售票;
p(s2);
开车门;
上下乘客;
}
}
11、 假设有一个成品仓库,总共能存放8台成品。生产者进程生产产品放入仓库,消费者进程从仓库中取出成品消费。为了防止积压,仓库满的时候就停止生产。由于仓库搬运设备只有一套,故成品的存入和取出只能分别执行,使用PV操作来实现方案。 begin mutex , full , empty :semaphore; (1 分) mutex:= 1 ; (1 分) empty:= 8 ; (1 分) full:= 0 ; (1 分) cobegin processor producer (3 分) begin
生产一个成品;
P(empty); P(mutex);
将成品存入仓库;
V(mutex); V(full); end
processor consumer (3 分) begin
P(full);
P(mutex);
将成品从仓库取出;
V(mutex); V(empty);
消费成品;
end
coend; end.
12、生产围棋的工人不小心将相等数量的黑子和白子混合装在一个盒子里,现要用自动分拣系统把黑子和白子分开,该系统由两个并发执行的进程PA和PB组成,系统功能如下:PA 专拣黑子,PB 专拣白子;每次只拣一个子,当一个进程拣子时,不许另一个进程去拣子;当一个进程拣子后,必须让另一个进程拣子。
试回答:(1)两个进程间是同步还是互斥?(2)写出用PV定义的信号量及其初值。(3)写出PV管理的两个并发进程的程序。答:(1)同步关系。(2 分)(2)两个信号量:S1允许拣黑子;S2允许拣白子;初值为:0、
1或1、0;(2 分)(3)程序如下:
begin
S1,S2 : semaphore;
S1:=1;
S2:=0; Cobegin process PA (3 分) begin
L1: P(S1); 拣黑子;
V(S2);
Goto L1;
end
process PB (3 分) begin
L2 : P(S2); 拣白子;
V(S1);
goto L2; end; coend ; end.
13、试说明进程互斥、同步和通信三者之间的关系。
答:进程的同步与互斥是指进程在推进时的相互制约关系。在多道程序系统中,由于资源共享与进程合作,这种进程间的制约称为可能。为了保证进程的正确运行以及相互合作的进程之间交换信息,需要进程之间的通信。
进程之间的制约关系体现为:进程的同步和互斥。
进程同步:它主要源于进程合作,是进程间共同完成一项任务时直接发生相互作用的关系。为进程之间的直接制约关系。在多道环境下,这种进程间在执行次序上的协调是必不可少的。
进程互斥:它主要源于资源共享,是进程之间的间接制约关系。在多道系统中,每次只允许一个进程访问的资源称为临界资源,进程互斥就是保证每次只有一个进程使用临界资源。
进程通信是指进程间的信息交换。PV操作作为进程的同步与互斥工具因信息交换量少,效率太低,称为低级通信。而高级通信则以较高的效率传送大批数据。
- 每执行一次P操作,信号量的数值S减1。若S 0,则该进程继续执行;若S<0,则该进程等待 。
- 每执行一次V操作,信号量的数值S加1。若S>0 ,则该进程继续执行;否则,从对应的等待队列中移出一个进程并将就绪状态赋予该进程。
- 利用信号量实现进程的互斥,应为临界区设置一个信号量mutex,其初值为1,表示该资源尚未使用,临界区应置于P(mutex)和V(mutex)原语之间。
- 在操作系统中,对信号量S的P原语操作定义中,使进程进入相应等待队列等待的条件是( )。
A.S>0 B. S=0 C. S<0 D. S≠0
- 在一段时间内,只允许一个进程访问的资源称为( )。
A.共享资源 B. 临界区
C.临界资源 D. 共享区
- 并发性是指若干事件在( )发生。
A.同一时刻 B. 同一时间间隔内
C.不同时刻 D. 不同时间间隔内
- 顺序程序和并发程序的执行相比,( )。
A.基本相同
B. 有点不同
C.并发程序执行总体上执行时间快
D. 顺序程序执行总体上执行时间快
- 在单一处理机上,将执行时间有重叠的几个程序称为( )。
A.顺序程序 B. 多道程序
C.并发程序 D. 并行程序
- 在单一处理机上执行程序,多道程序的执行是在( )进行的。
A.同一时刻 B. 同一时间间隔内
C.某一固定时刻 D. 某一固定时间间隔内
- 进程间的基本关系为( )。
A.相互独立与相互制约 B.同步与互斥
C.并行执行与资源共享 D. 信息传递与信息缓冲
- 进程间的同步与互斥,分别表示了各进程间的( )。
A.相互独立与相互制约 B.协调与竞争
C.不同状态 D. 动态性与独立性
- 两个进程合作完成一个任务,在并发执行中,一个进程要等待其合作伙伴发来信息,或者建立某个条件后再向前执行,这种关系是进程间的( )关系。
A.同步 B. 互斥
C.竞争 D. 合作
- 如何理解进程的顺序性与并发性? 答:进程的顺序性与并发性:
- 顺序性
顺序性包括两层含义:(1)内部顺序性,对于一个进程来说,它的所有指令是按序执行的;(2)外部顺序性,对于多个进程来说,所有进程是依次执行的。
例如,假如有P1和P2两个进程,其活动分别为:
P1活动:a1 a2 a3 a4 P2活动:b1 b2 b3 b4
顺序执行时,有如下两种情形:
情形1:a1 a2 a3 a4 b1 b2 b3 b4 情形2:b1 b2 b3 b4 a1 a2 a3 a4
-
- 并发性
并发性包括如下两层含义:(1)内部顺序性,对于一个进程来说,它的所有指令是按序执行的;(2)外部并发性,对于多个进程来说,所有进程是交叉执行的。
例如,对于上面P1和P2两个进程来说,并发执行有许多情形,如:情形1:a1 b1 b2 a2 a3 b3 a4 b4 情形2:b1 b2 a1 a2 a3 b3 b4 a4
并发进程在其执行过程中,出现哪种交叉情形是不可预知的,这就是并发进程的不确定性,操作系统应当保证:无论出现何种交叉情形,每个进程运行的结果都应当是唯一的,正确的。
- 什么是进程的同步与互斥? 答:进程的同步与互斥是指进程在推进时的相互制约关系。在多道程序系统中,由于进程合作与资源共享,这种进程间的制约称为可能。我们把前者称为进程同步,后者称为进程互斥。
进程同步是进程间共同完成一项任务时直接发生相互作用的关系。为进程之间的直接制约关系。在多道环境下,这种进程间在执行次序上的协调是必不可少的。同步进程之间的关系如同接力赛跑中的运动员,或生产流水线的每一道工序。
进程互斥是进程之间的间接制约关系。在多道系统中,每次只允许一个进程访问的资源称为临界资源,进程互斥就是保证每次只有一个进程使用临界资源。互斥进程之间的关系如同汽车在交叉路口争用车道,篮球比赛中双方争抢篮板球。
- 设系统中有两类生产者消费者进程 第一类:生产者A生产的数据类型为AB,供对应的消费者B 消费; 第二类:生产者P生产的数据类型为PQ,供对应的消费者Q消费;
消费者 B 只能消费AB型数据,不能消费PQ型数据,同样,消费者Q只能消费
PQ型数据,不能消费AB型数据。
系统仅使用唯一的一个公共缓冲区BUFFER,用于A->B和P->Q的数据传送,并且该缓冲区仅能容纳一个AB型后PQ型数据。系统中有多个A类和多个P类生产者进程,以及多个B类和多个Q类消费者进程,如图所示:
用 P.V操作描述出生产者A消费者B,以及,生产者P,消费者Q的算法。并阐述所设计的算法是如何达到系统要求的。
要求:由于系统者两类生产者 -消费者进程都异常活跃,唯一的公共缓冲区,可能会成为瓶颈,因此,算法要避免类似下述情况发生,即:当某一生产者 A 将生产出的数据放入 buffer 后,由于所有的消费者 B 进程都忙于消费先前得到的数据而无法立即将数据从 buffer 中取出,从而导致 buffer 长期被占用,使得一个空闲的消费者 Q 进程无法收到生产者 P 已经生产出的数据。