计算机操作系统 (第四版汤小丹老师) 复习笔记第二章

教材为西安电子科技大学 汤小丹老师 第四版

2.1前趋图和程序执行

2.1.1前趋图
2.1.2程序顺序执行时的特征
  • 顺序性:每一操作必须在上一个操作结束之后开始。
  • 封闭性:程序运行时独占全机资源,资源的状态(除初始状态外)只有本程序才能改变它。执行结果不受外界因素影响。
  • 可再现性:程序重复执行,结果相同。
2.1.3程序并发执行

程序并发执行时的特征

  • 间断性: 程序在并发执行时,由于它们共享系统资源,以及为完成同一项任务而相互 合作,致使在这些并发执行的程序之间,形成了相互制约的关系,相互制约 将导致并发程序具有“执行—暂停—执行”这种间断性的活动规律。
  • 失去封闭性: 程序在并发执行时,是多个程序共享系统中的各种资源,因而这些资源的状态将由多个程序来改变,致使程序的运行失去了封闭性。
  • 不可再现性: 程序在并发执行时,由于失去了封闭性,也将导致其再失去可再现性。

2.2 进程的描述

2.2.1进程的定义和特征

进程的定义

传统OS中的进程定义为:“进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位”。

进程控制块(Process Control Block,PCB) 操作系统用于管理进程的专门的数据结构。

进程实体(进程映像)就是由代码、数据、进程控制块PCB这三部分构成。

进程的特征:

  • 动态性:由创建而产生,由调度而执行,由撤销而消亡。
  • 并发性:多个进程实体同存于内存之中,且能在一段时间内同时执行。
  • 独立性:独立执行、独立获得资源、独立接受调度的基本单位。
  • 异步性:按各自独立的、不可预知的速度向前推进。
2.2.2进程的基本状态及转换
  1. 进程的三种基本状态定义
  • 就绪(Ready)状态 (进程已处于准备好运行的状态,即进程已分配到除 CPU 以外的所有必要资源)
  • 执行(Running)状态 (进程已获得 CPU,其程序正在执行的状态)
  • 阻塞(Block)状态 (正在执行的进程由于发生某事件如 IO 请求, 暂时无法继续执行时的状态)
  1. 三种基本状态的转换
    (图图图图)

  2. 创建状和终止状态

  • 1)创建状态
    创建工作:分配PCB,并填写必要信息;其次将其转入就绪队列。
  • 2)终止状态
    终止工作:OS做善后处理;PCB清空并归还给系统。

进程的五种基本状态及其转换
(图图图图)

2.2.3挂起操作和进程状态的转换

挂起操作的引入

  • 终端用户的请求
  • 父进程请求
  • 负荷调节的需要
  • 操作系统的需要

引入挂起原语操作后,基本进程状态的改变:

  • 活动就绪→静止就绪
  • 活动阻塞→静止阻塞
  • 静止就绪→活动就绪
  • 静止阻塞→活动阻塞
2.2.4进程管理中的数据结构
  1. 操作系统中用于管理控制的数据结构

  2. 进程控制块PCB的作用:
    进程控制块的作用是使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位,一个能与其它进程并发执行的进程。或者说,OS是根据PCB来对并发执行的进程进行控制和管理的。

  • 作为独立运行基本单位的标志
  • 能实现间断性运行方式
  • 提供进程管理所需要的信息
  • 提供进程调度需要的信息
  • 实现与其它进程的同步与通信
  1. 进程控制块中的信息
  • 进程标识符:进程标识符用于唯一地标识一个进程。一个进程通常有两种标识符

    • 内部标识符。在所有的操作系统中,都为每一个进程赋予一个唯一的数字标识符,它通常是一个进程的序号。 设置内部标识符主要是为了方便系统使用。

    • 外部标识符。它由创建者提供,通常是由字母、数字组成,往往是由用户(进程)在访问该进程时使用。为了描述进程的家族关系。还应设置父进程标识及子进程标识。此外,还可设置用户标识,以指示拥有该进程的用户。

  • 处理机状态:处理机状态信息主要是由处理机的各种寄存器中的内容组成的

    • 通用寄存器,又称为用户可视寄存器,它们是用户程序可以访问的, 用于暂存信息,在大多数处理机中,有 8~32个通用寄存器,在RISC结构的计算机中可超过 100 个;
    • 指令计数器,其中存放了要访问的下一条指令的地址;
    • 程序状态字PSW,其中含有状态信息,如条件码、执行方式、中断屏蔽标志等;
    • 用户栈指针,指每个用户进程都有一个或若干个与之相关的系统栈,用于存放过程和系统调用参数及调用地址。栈指针指向该栈的栈顶。
  • 进程调度信息:在PCB中还存放一些与进程调度和进程对换有关的信息,包括:

    • 进程状态,指明进程的当前状态,作为进程调度和对换时的依据。
    • 进程优先级,用于描述进程使用处理机的优先级别的一个整数, 优先级高的进程应优先获得处理机。
    • 进程调度所需的其它信息,它们与所采用的进程调度算法有关, 比如,进程已等待CPU的时间总和、 进程已执行的时间总和等。
    • 事件,是指进程由执行状态转变为阻塞状态所等待发生的事件, 即阻塞原因。
  • 进程控制信息,包括:

    • 程序和数据的地址, 是指进程的程序和数据所在的内存或外存地 (首)址,以便再调度到该进程执行时,能从PCB中找到其程序和数据。
    • 进程同步和通信机制,指实现进程同步和进程通信时必需的机制, 如消息队列指针、信号量等,它们可能全部或部分地放在PCB中
    • 资源清单,是一张列出了除CPU以外的、进程所需的全部资源及已经分配到该进程的资源的清单。
    • 链接指针, 它给出了本进程(PCB)所在队列中的下一个进程的PCB的首地址。
  1. 进程控制块的组织方式
  • 线性方式
  • 链接方式
  • 索引方式

2.3进程控制

进程控制是用来管理从进程诞生、运行、到结束过程中的一切事情,故而要由操作系统内核中的原语来实现。

原语是由若干条指令组成的,用于完成一定功能的一个过程。它与一般过程的区别在于:它们是“原子操作”。所谓原子操作,是指一个操作中的所有动作要么全做,要么全不做。换言之, 它是一个不可分割的基本单位,因此,在执行过程中不允许被中断。原子操作在管态(核态,相对用户态)下执行,常驻内存。

内核的实现是通过原语实现的,而原语又是由原子操作构成的。

2.3.1操作系统内核

操作系统内核:操作系统中与硬件紧密相关的模块(如中断处理程序、设备驱动程序等)以及运行频率较高(如时钟管理、进程调度等)的模块,它们常驻内存。

设置操作系统内核的作用:

  • 便于对软件进行保护,防止被其它程序破坏
  • 提高操作系统的运行效率

处理机执行状态:

  • 系统态(管态或内核态)
  • 用户态(目态)

操作系统内核两大功能:

支撑功能

  • 中断处理:内核对中断进行“有限处理”后,转入相关进程接续后续处理。
  • 时钟管理:定时产生时钟信号。
  • 原语操作:原语是完成一定功能的过程,具有不可分割性。

资源管理功能

  • 进程管理:运行频率较高的模块(如进程调度、创建与撤销等),常被调用模块如同步原语等均放入内核。
  • 存储器管理:运行频率较高也要放入内核。
  • 设备管理:与硬件相关也要放入内核。
2.3.2 进程的创建

进程的层次结构体现为进程创建过程中生成的进程家族树,如unix下的进程树。
windows中不存在进程层次结构的概念,进程之间(通过句柄)只有控制与被控制的关系。

引起创建进程的事件

  • 用户登录
  • 作业调度
  • 提供服务
  • 应用请求

进程的创建(Creation of Progress)
OS 调用进程创建原语 Creat

  1. 申请空白PCB
  2. 为新进程分配资源
  3. 初始化进程控制块
  4. 将新进程插入就绪队列,如果进程就绪队列能够接纳新进程,便将新进程插入就绪队列
2.3.3进程的终止

引起进程终止的事件:

  • 正常结束

  • 异常结束:在进程运行期间,由于出现某些错误和故障而迫使进程终止。

    • 越界错误
    • 保护错,访问不当;
    • 非法指令,把数据当成了指令
    • 特权指令错
    • 运行超时
    • 等待超时
    • 算术运算错,例如被0除
    • I/O故障
  • 外界干预:外界干预并非指在本进程运行中出现了异常事件,而是指进程应外界的请求而终止运行。这些干预有:

    • 操作员或操作系统干预。 例如,发生了死锁
    • 父进程请求。
    • 父进程终止。 当父进程终止时,OS也将他的所有子孙进程终止。

进程的终止过程

  1. 根据被终止进程的标识符,从 PCB 检索出该进程的 PCB
  2. 若被终止进程正处于执行状态,应立即终止该进程的执行, 并置调度标志为真,用于指示该进程被终止后应重新进行调度。
  3. 终止该进程的所有子孙进程,以防他们成为不可控的进程。
  4. 将被终止进程所拥有的全部资源,或者归还给其父进程, 或者归还给系统。
  5. 将被终止进程(它的PCB)从所在队列(或链表)中移出, 等待其他程序来搜集信息。
2.3.4进程的阻塞与唤醒

引起进程阻塞和唤醒的事件

  1. 向系统请求共享资源失败
  2. 等待某种操作的完成
  3. 新数据尚未到达
  4. 等待新任务的到达

进程阻塞过程:
正在执行的进程,当发现阻塞事件时,由于无法继续执行,于是进程便通过调用阻塞原语block把自己阻塞。可见,进程的阻塞是进程自身的一种主动行为
进入block过程后,由于此时该进程还处于执行状态,所以应先立即停止执行,把进程控制块中的现行状态由“执行”改为阻塞,并将PCB插入阻塞队列。 最后,转调度程序进行重新调度,将处理机分配给另一就绪进程,并进行切换。

进程唤醒过程:
当被阻塞进程所期待的事件出现时,如I/O完成或其所期待的数据已经到达,则由有关进程(比如,用完并释放了该I/O设备的进程)调用唤醒原语wakeup(),将等待该事件的进程唤醒。
唤醒原语执行的过程是:首先把被阻塞的进程从等待该事件的阻塞队列中移出,将其PCB中的现行状态由阻塞改为就绪,然后再将该PCB插入到就绪队列中。

2.3.5进程的挂起与激活

进程的挂起:
当出现了引起进程挂起的事件时,系统将利用挂起原语suspend()将指定进程或处于阻塞状态的进程挂起。

进程的激活:当发生激活进程的事件时,系统将利用激活原语active()将指定进程激活。

2.4 进程同步

2.4.1进程同步的基本概念

两种形式的制约关系:

(1) 间接相互制约关系。 —- 进程共享某种系统资源

(2) 直接相互制约关系。 —- 进程合作加工资源

临界资源 — 采取互斥方式实现共享

临界区:每个进程中访问临界资源的那段代码

同步机制应遵循的规则:

  1. 空闲让进–临界资源空闲状态,应允许请求进入临界区
  2. 忙则等待–临界资源正被访问,进入临界区进程必须等待
  3. 有限等待–有限时间内能进入自己的临界区
  4. 让权等待–不能进入临界区时,应立即释放处理机
2.4.2 硬件同步机制

为防止多个进程同时测试到锁为打开的状态,测试与关锁操作必须是连续的,不允许分开进行。

  1. 关中断:锁测试之前关闭中断,上锁后再打开中断。这样进程在临界区内,不响应中断。

关中断的缺点:

  • 滥用关中断后果严重(不能及时响应);
  • 关中断时间长,影响系统效率;
  • 该方法不适应多CPU系统。
  1. 利用test-and-set指令实现互斥(测试并建立)

  2. 利用swap指令实现互斥

2.4.3 信号量机制

整型信号量
把整型信号量定义为一个整型量,除初始化外,仅能通过两个标准的原子操作 wait(S) 和 signal(S) 来访问。这两个操作一直被分别称为P、V操作。

wait(S)和signal(S)是两个原子操作,因此,它们在执行时是不可中断的。

  • 当一个进程在修改某信号量时,没有其他进程可同时对该信号量进行修改。此外,在wait操作中,对S值的测试和做S=S-1操作时都不可中断。
  • 在wait操作中,只要是信号量S≤0,就会不断地测试。
  • 该机制并未遵循“让权等待”的准则,而是使进程处于“忙等”的状态。

记录型信号量

  • 记录型信号量机制采取了“让权等待”的策略,又会出现多个进程等待访问同一临界资源的情况。
  • 除了需要一个用于代表资源数目的整型变量value外,还应增加一个进程链表指针,用于链接上述的所有等待进程。
  • 整数值 s.count 为了计该信号代表资源的数;
  • s.queue存储的是阻塞在该信号量的各个进程的标识, 构成一个进程等待队列;

信号量只能通过初始化和两个标准的原语来访问——作为 OS 核心代码执行,不受进程调度的打断。

信号量在始化时被指定一个非负整数值,表示空闲资源总数(又称为“资源信号量”),在进程执行过程中, 信号量的值(即其计数值)可能发生变化:

  • 若为非负值,表示当前的空闲资源数。
  • 若为负值,其绝对值表示当前等待临界区的进程数。

AND型信号量

AND同步机制的基本思想是:

  • 将进程在整个运行过程中需要的所有资源,一次性全部地分配给进程
  • 待进程使用完后再一起释放。
  • 只要尚有一个资源未能分配给进程,其它所有可能为之分配的资源,也不分配给他。
  • 亦即,对若干个临界资源的分配,采取原子操作方式:要么全部分配到进程,要么一个也不分配。
  • 由死锁理论可知,这样就可避免上述死锁情况的发生。为此,在wait操作中,增加 了一个“AND”条件,故称为AND同步,或称为同时wait操作。

信号量集

  • 在记录型信号量机制中,wait(S)或signal(S)操作仅能对信号量施以加1或减1操作,意味着每次只能获得或释放一个单位的临界资源。而当一次需要N个某类临界资源时,便要进行N次wait(S)操作,显然这是低效的。
  • 在有些情况下,要求当资源数量低于某一下限值时,便不予以分配。因而,在每次分配之前,需要测试该资源的数量,看其是否大于其下限值。

基于上述两点,可以对AND信号量机制加以扩充,形成一般化的“信号量集”机制。

2.4.4信号量的应用

利用信号量实现进程互斥
利用信号量实现前趋关系

(2.5重新开一个新的章节进行记录)

2.6进程通信

信号量通信不够理想:

  • 效率低
  • 通信不够透明

进程间传送大量数据,就要用到高级通信工具,其特点:

  • 使用方便
  • 高效地传送大量数据
2.6.1 进程通信的类型
  1. 共享存储器系统
  • 基于共享数据结构的通信方式:传递少量数据,效率低
  • 基于共享存储区的通信方式
  1. 管道通信系统
    所谓“管道”,是指用于连接一个读进程和一个写进程以实现他们之间通信的一个共享文件(内存页), 又名pipe文件。向管道(共享文件)提供输入的发送进程 (即写进程), 以字符流形式将大量的数据送入管道;而接受管道输出的接收进程(即读进程),则从管道中接收(读)数据。由于发送进程和接收进程是利用管道进行通信的,故又称为管道通信。
    这种方式首创于UNIX系统,由于它能有效地传送大量数据,因而又被引入到许多其它操作系统中。

为了协调双方的通信,管道机制必须提供以下三方面的协调能力:

  • 互斥,即当一个进程正在对pipe执行读/写操作时,其它(另一)进程必须等待。
  • 同步,指当写(输入)进程把一定数量(如4 KB)的数据写 入pipe,便去睡眠等待, 直到读(输出)进程取走数据后,再把他唤醒。当读进程读一空pipe时,也应睡眠等待,直至写进程将数据写入管道后,才将之唤醒。
  • 确定对方是否存在,只有确定了对方已存在时,才能进行通信。
  1. 消息传递系统
    在消息传递系统中,进程间的数据交换,是以格式化的消息 (message)为单位的;在计算机网络中,又把message称为报文。

程序员直接利用系统提供的一组通信命令(原语)进行通信。操作系统隐藏了通信的实现细节,大大减化了通信程序编制的复杂性,而获得广泛的应用。

因其实现方式的不同而进一步分成直接通信方式和间接通信方式两种:

  • 直接通信方式:发送进程利用OS所提供的发送原语,直接把消息发送给目标进程。
  • 间接通信方式:发送和接收进程,都通过共享中间实体的方式完成进程间的通信。
  1. 客户机-服务器系统
    客户机-服务器系统的通信机制,已成为网络环境下各种应用的主流,其主要实现方式分为三类:套接字、远程过程调用和远程方法调用。

(1)套接字
套接字就是一个通信标识类型的数据结构,包含了通信目的的地址、通信使用的端口号、通信网络的传输协议、进程所在的网络地址,以及针对客户或服务器程序提供的不同系统调用(或API函数等),是进程通信和网络通信的基本构件。

套接字是为客户/服务器模型而设计的,通常套接字包括两类:

  • 基于文件型:本地通信,类似于管道;
  • 基于网络型:通信双方被分配一对套接字,通信结束时,系统通过关闭接收进程(或服务器端)的套接字撤销连接。

套接字的优势: 本地及网络均可; 套接字号具有唯一性,易于区分; 隐藏了通信设施及实现细节。

(2)远程过程调用和远程方法调用

远程过程(函数)调用RPC,是一个通信协议,用于通过网络连接的系统。
负责处理远程过程调用的进程有两个:本地客户进程以及远程服务器进程。也被称为网络守护进程,通常二者处于阻塞状态、等待消息。
RPC通过引入存根而实现透明性,即在本地客户端每个能够独立运行的远程过程都拥有一个客户存根,本地进程调用远程过程实际是调用该过程关联的存根;同样,即在服务器端每个能够独立运行的远程过程都拥有一个服务器存根,远程过程主要 步骤参见P76。

2。6.2 消息传递通信的实现方式

直接消息传递系统
(1) 直接通信原语

①对称寻址方式 —— 一对一
要求发送进程和接收进程都以显示方式提供对方的标识符, 系统提供下述两条通信命令(原语) :
send(receiver, message) 发送一个消息给接收进程;
receive(sender, message); 接收Sender发来的消息;
例如,原语Send(P2, m1)表示将消息m1发送给接收进程P2; 而原语Receive(P1,m1)则表示接收由P1发来的消息m1。

该方法的不足:一旦进程更名,通信调用都要更改。

②非对称寻址方式 ——多对一
接收进程可能需要与多个发送进程通信,不需要命名发送进程;
例如,用于提供打印服务的进程,它可以接收来自任何一个进程的“打印请求”消息。
发送原语:send(P, message); //发送需要命名接收进程P
接收原语:receive (id, message); //可以接收来自任何进程的消息,id变量为发送方进程的 id 或名字。

(2) 消息的格式
定长消息格式,可以减少对消息的处理和存储开销。这种方式可用于办公自动化系统中,为用户提供快速的便笺式通信;

变长的消息格式,系统在处理和存储时,须付出更多的开销,但方便了用户

这两种消息格式各有其优缺点,故在很多系统(包括计算机 网络)中,是同时都用的。

(3) 进程的同步方式
进程之间通信,同样需要有进程同步机制,有3种方式:
• 阻塞发送、阻塞接收。用于进程间双向通信,发送进程和接收进程之间无缓冲。即通信双方联系非常紧密,得到对方的应答才能推进。
• 不阻塞发送、阻塞接收。普遍,适合于那些不等待消息的到来就无法继续工作的进程。如服务器上的服务进程,平时总是处于阻塞状态,只有在请求服务的消息到达时,它们才会被唤醒以便提供服务。
• 既不阻塞发送也不阻塞接收。常用于分布式系统中,因为采用阻塞方式进行通信时,一旦传递的数据丢失,将会使阻塞进程无限期地等待下去。而采用非阻塞、接收的方式就可以避免这种情况。接收进程有消息时就处理消息,无消息时继续执行。

(4) 通信链路
为使在发送进程和接收进程之间能进行通信,必须在两者之间建立一条通信链路。 有两种方式建立通信链路:

第一种方式是:由发送进程在通信之前,用显式的“建立连接”命令(原语)请求系统为之建立一条通信链路;在链路使用完后,也用显式方式拆除链路。这种方式主要用于计算机网络中。

第二种方式是:发送进程无须明确提出建立链路的请求,只须利用系统提供的发送命令(原语),系统会自动地为之建立一条链路。这种方式主要用于单机系统中。

根据通信链路的连接方法,又可把通信链路分为两类:
① 点—点连接通信链路,这时的一条链路只连接两个结点(进程);
② 多点连接链路,指用一条链路连接多个( n >2)结点(进程)。

而根据通信方式的不同,则又可把链路分成两种:
① 单向通信链路,只允许发送进程向接收进程发送消息;
② 双向链路,既允许由进程A向进程B发送消息,也允许进程B同时向进程A发送消息。

信箱通信----间接通信方式
(1) 信箱的结构信箱定义为一种数据结构,在逻辑上,可将其分为2个部分:
①信箱头:信箱的描述信息;
②信箱体:由存放消息的消息格组成。
双向信箱示意图
(2) 信箱通信原语
系统为信箱通信提供了若干条原语, 有:

①信箱的创建和撤消。进程可利用信箱创建原语来建立一个新信箱。创建者进程应给出信箱名字、信箱属性(公用、私用或共享);对于共享信箱, 还应给出共享者的名字。当进程不再需要该信箱时,可用信箱撤消原语将之撤消。
②消息的发送和接收。当进程之间要利用信箱进行通信时,必须使用共享信箱,并利用系统提供的下述通信原语进行通信。
Send(mailbox, message); 将一个消息发送到指定信箱;
Receive(mailbox, message); 从指定信箱中接收一个消息;

(3) 信箱的类型
信箱可由操作系统创建,也可由用户进程创建,创建者是信箱的拥有者。 据此,可把信箱分为以下三类:

① 私用信箱
用户进程可为自己建立一个新信箱,并作为该进程的一部分。信箱的拥有者有权从信箱中读取消息,其他用户则只能将自己构成的消息发送到该信箱中。这种私用信箱可采用单向通信链路的信箱来实现。 当拥有该信箱的进程结束时,信箱也随之消失。

②公用信箱
它由操作系统创建,并提供给系统中的所有核准进程使用。核准进程既可把消息发送到该信箱中,也可从信箱中读取发送给自己的消息。
显然,公用信箱应采用双向通信链路的信箱来实现。通常,公用信箱在系统运行期间始终存在。

③共享信箱
它由某进程创建,在创建时或创建后,指明它是可共享的,同时须指出共享进程(用户)的名字。信箱的拥有者和共享者,都有权从信箱中取走发送给自己的消息。

在利用信箱通信时,在发送进程和接收进程之间,存在以下四种关系:
①一对一关系。这时可为发送进程和接收进程建立一条两者专用的通信链路, 使两者之间的交互不受其他进程的干扰。
②多对一关系。允许提供服务的进程与多个用户进程之间进行交互,也称为客 户/服务器交互。
③一对多关系。允许一个发送进程与多个接收进程进行交互, 使发送进程可用广播方式,向接收者(多个)发送消息。
④多对多关系。允许建立一个公用信箱,让多个进程都能向信箱中投递消息;也可从信箱中取走属于自己的消息。

2.6.3直接消息传递系统实例
  1. 消息缓冲队列通信机制中的数据结构
    (1) 消息缓冲区
    在消息缓冲队列通信方式中,主要利用的数据结构是消息缓冲区。它可描述如下:

(2) PCB中有关通信的数据项
在利用消息缓冲队列通信机制时,还应增加用于对消息队列进行操作和实现同步的信号量,并将它们置入进程的PCB中。 在PCB中应增加的数据项可描述如下:

  1. 发送原语
  2. 接收原语

2.7 线程(Threads)的基本概念

2.7.1线程的引入

进程的2个基本属性

  • 拥有资源的独立单位
  • 独立调度和分派的基本单位

程序并发执行所需付出的时空开销
1)创建进程
2)撤消进程
3)进程切换

传统的进程“太重”,在多处理机环境(如对称多处理机SMP)下进程调度、分派和切换时都需花费较大的时间和空间开销。

线程作为调度和分派的基本单位

线程设计的指导思想:
若进程的两个属性分开,即对于作为调度和分派的基本单位,不同时作为拥有资源的单位,以做到“轻装上阵”;而对于拥有资源的基本单位,又不对之进行频繁的切换。

(1)轻型实体。

(2)可并发执行。

(3)共享进程资源。

适宜多处理机系统

2.7.2线程与进程的比较
2.7.3线程的状态和线程控制块

线程运行的三个状态
如同传统的进程一样,在各线程之间也存在着共享资源和相互合作的制约关系,致使线程在运行时也具有间断性。 相应地,线程在运行时,也具有下述三种基本状态:

① 执行状态,表示线程正获得处理机而运行;

② 就绪状态, 指线程已具备了各种执行条件,一旦获得CPU便可执行的状态;

③ 阻塞状态,指线程在执行中因某事件而受阻,处于暂停执行时的状态。

线程控制块TCB
在OS中的每一个线程都可以利用线程标识符和一组状态参数进行描述,即线程控制块。通常有这样几项:

  • 线程标识符
  • 寄存器状态, 它包括程序计数器PC和堆栈指针中的内容;
  • 堆栈, 在堆栈中通常保存有局部变量和返回地址;
  • 线程运行状态, 用于描述线程正处于何种运行状态;
  • 优先级, 描述线程执行的优先程度;
  • 线程专有存储器, 用于保存线程自己的局部变量拷贝;
  • 信号屏蔽, 即对某些信号加以屏蔽。

多线程OS中的进程属性
在多线程OS中,进程是作为拥有系统资源的基本单位,通常的进程都包含多个线程并为它们提供资源,但此时的进程就不再作为一个执行的实体。 多线程OS中的进程有以下属性:

(1) 作为系统资源分配的单位。

(2) 可包括多个线程。

(3) 进程已不是一个可执行的实体。

多线程进程模块

2.8 线程的实现

2.8.1线程的实现方式

内核支持线程:这里所谓的内核支持线程,即无论是用户进程中的线程,还是系统进程中的线程,他们的创建、撤消和切换等,也是依靠内核实现的。此外,在内核空间还为每一个内核支持线程设置了一个线程控制块,内核是根据该控制块而感知某线程的存在的,并对其加以控制。

内核支持线程的优缺点

  • 优点
    • (1)多处理器系统中,同一进程中的线程可以并行;

    • (2)内核知道进程中的线程运行情况;

    • (3)线程切换开销小;

    • (4)内核本身也可以采用多线程技术,以提高系统的执行速度和效率。

  • 缺点
    同一进程下的线程切换开销比较大。

用户级线程
用户级线程是与内核无关。用户级线程仅存在于用户空间中。对于这种线程的创建、撤消、线程之间的同步与通信等功能,都无须利用系统调用来实现。对于用户级线程的切换,通常是发生在一个应用进程的诸多线程之间,无须内核的支持。 由于切换的规则远比进程调度和切换的规则简单,因而使线程的切换速度特别快。

系统仍然是以进程为单位进行调度的。容易发生线程当前状态与实际状态不相吻合的情况。如某线程运行过程中请求I/O,于是系统将该线程所在的进程置入阻塞状态。同一进程下的线程即使具备运行条件,也不会被调度;而当前线程理应是阻塞状态,但实际上仍是运行状态,因为系统不对线程进行操作。再比如系统采用时间片轮转法,A、B两个进程轮流执行,但是A进程只有两个线程,而B进程则有20个线程,显然这种调度对B进程而言就是不公平的。若想以线程为单位进行调度,系统就应该识别线程,这就得采用内核支持级线程。

用户级线程的优缺点

  • 优点
    • (1)同一进程下的线程切换开销小,不用内核状态;
    • (2)调度算法可以是进程专用的;
    • (3)用户级线程的实现与OS平台无关;
  • 缺点
    • (1)系统调用导致同一进程下的所有线程阻塞;
    • (2)不能利用多处理机进行多重处理,进程中仅有一个线程能执行,其他线程只能等待。

组合方式:将用户级线程和内核支持级线程进行组合。 组合方式中,内核支持内核支持级线程的建立、调度和管理, 同时也允许用户应用程序建立、调度和管理用户级线程。

用户级线程与内核控制线程的连接(3种连接模型)

1)一对一模型 为每一个用户线程都设置一个内核控制线程与之连接。
优势:开销小,效率高
劣势:一个线程阻塞,整个进程阻塞;映射到一个内核的多线程不能使用多处理机

2)多对一模型 将多个用户线程映射到一个内核控制线程。
优势:更好的并发性,一个线程阻塞,允许调度另一个线程执行;
劣势:开销大;整个系统线程数有限;

3)多对多模型 将多个用户线程映射到多个内核控制线程。
结合上述两种方式的优势
多线程模型

2.8.2线程的实现

内核支持线程的实现
系统在创建一个新进程时,便为它分配一个任务数据区PTDA(Per Task Data Area),其中包括若干个线程控制块TCB空间。

内核支持线程的创建、撤销、调度与切换,与进程管理相类似。
任务数据区空间

用户级线程的实现 (两种方式实现)
1)运行时系统(Runtime System)
所谓“运行时系统”,实质上是用于管理和控制线程的函数(过程)的集合, 其中包括用于创建和撤消线程的函数、 线程同步和通信的函数以及实现线程调 度的函数等。正因为有这些函数,才能使用户级线程与内核无关。运行时系统中的所有函数都驻留在用户空间,并作为用户级线程与内核之间的接口。

线程是通过运行时系统来请求系统的资源的。

2)内核控制线程
这种线程又称为轻型进程LWP(Light Weight Process)。 每一个进程都可拥有多个LWP,同用户级线程一样,每个LWP都有自己的数据结构(如TCB),其中包括线程标识符、优先级、状态,另外还有栈和局部存储区等。它们也可 以共享进程所拥有的资源。LWP可通过系统调用来获得内核提供的服务,这样,当一个用户级线程运行时,只要 将它连接到一个LWP上,此时它便具有了内核支持线程的所有属性。

用户级线程共享LWP,把LWP做成线程池
利用轻型进程作为中间系统

2.8.3线程的创建和终止

线程的创建
在多线程OS环境下,应用程序在启动时,通常仅有一个线程在执行,该线程被人们称为“初始化线程”。它可根据 需要再去创建若干个线程。在创建新线程时,需要利用一个线程创建函数(或系统调用),并提供相应的参数,如指向线程主程序的入口指针、堆栈的大小,以及用于调度的优先级等。在线程创建函数执行完后,将返回一个线程标识符供以后使用。
线程的终止

终止线程的方式有两种:一种是在线程完成了自己的工作后自愿退出;另一种是线程在运行中出现错误或由于某种原因而被其它线程强行终止。


  • 计算机操作系统 (第四版汤小丹老师) 复习笔记第一章
  • 计算机操作系统 (第四版汤小丹老师) 复习笔记第二章
  • 计算机操作系统 (第四版汤小丹老师) 复习笔记第三章
  • 计算机操作系统 (第四版汤小丹老师) 复习笔记第四章
  • 计算机操作系统 (第四版汤小丹老师) 复习笔记第五章
  • 计算机操作系统 (第四版汤小丹老师) 复习笔记第六章
    计算机操作系统 (第四版汤小丹老师) 复习笔记第二章_第1张图片

练习题目:

1进程管理中,当(D),进程从阻塞态变成就绪态。

  • A、等待一个事件
  • B、时间片用完
  • C、进程被进程调度程序选中
  • D、等待的事件发生

2一个进程是( C )。

  • A、一个独立的程序+数据集
  • B、由协处理器执行的一个程序
  • C、PCB结构与程序和数据的组合
  • D、一个独立的程序

3进程的组成是( D )。

  • A、代码段、数据段和栈段
  • B、等价于程序
  • C、程序加上它所处理的数据
  • D、进程控制块PCB、程序和数据的组合

4操作系统是通过( C )对进程进行管理。

  • A、数据
  • B、进程号
  • C、PCB
  • D、代码

5在单处理器系统中,如果同时存在10个进程,则处于就绪队列中的进程最多有( C )个。

  • A、1
  • B、2
  • C、9
  • D、10

6进程创建原语的任务是( B ) 。

  • A、为进程分配CPU
  • B、为进程建立PCB表
  • C、为进程分配内存
  • D、为进程编制程序

7进程处于( C )时, 它是处于非阻塞状态。

  • A、等待从键盘输入数据
  • B、等待协作进程的一个信号
  • C、等待操作系统分配CPU时间
  • D、等待网络数据进入内存

8进程与程序的根本区别是( B )。

  • A、是不是占有处理器

  • B、静态和动态的区别

  • C、是不是具有就绪、运行和等待三种状态

  • D、是不是被调入到内存

    答案解析:进程是一个程序在某个数据集合上的执行,操作系统引入进程的概念是为了从变化的角度动态地分析和研究程序的执行。

9进程创建后的状态是( A )。

  • A、就绪态
  • B、运行态
  • C、阻塞态
  • D、核态

10当一个进程处于( B )状态时, 称为就绪状态。

  • A、等待输入数据
  • B、等待调度
  • C、等待分配进程控制块
  • D、等待进入内存

11PCB是进程存在的唯一标志,下列( D )不属于PCB。

  • A、进程ID
  • B、CPU状态
  • C、堆栈指针
  • D、全局变量

12进程操作的原语有( ABCD )

  • A、阻塞原语
  • B、唤醒原语
  • C、撤销原语
  • D、创建原语

13进程被挂起的原因,可能是( ABD )。

  • A、系统负荷过重,内存空间紧张
  • B、终端用户请求
  • C、I/O缓冲溢出
  • D、父进程请求

14父进程可以撤销子进程。答案:

15用于科学计算的进程一般都是偏CPU的进程。答案:

16一个进程由程序代码、数据集和进程控制块TCB组成。这三部分内容构成了进程的映像。答案:×

17子进程继承父进程的资源;父、子进程相互独立,各自独立占有资源、各自独立参与处理机调度。答案:×

18进程由进程控制块和数据集以及对该数据集进行操作的程序组成,进程上下文是进程执行活动全过程的静态描述。答案:×

19一个阻塞进程被唤醒意味着该进程重新占有了CPU。我的答案:×

20一个正在占用CPU的进程不能被挂起。答案:×

21在操作系统中,要对并发进程进行同步的原因是( D )。

  • A、进程具有结构性
  • B、进程具有动态性
  • C、进程必须在有限的时间内完成
  • D、并发进程是异步的

22当信号量用于进程同步时,它的初值为( )。

  • A、0
  • B、-1
  • C、正数
  • D、视信号量的含义和具体情况而定

23进程间的同步与互斥,分别表示出各个并发进程之间的( B )关系。

  • A、动态性与独立性
  • B、协作与竞争
  • C、竞争
  • D、相互独立与制约

24关于进程状态说法错误的是( )。

  • A、单CPU的系统中处于运行态的进程可以有多个
  • B、进程在整个生存期间会根据不同条件转换状态
  • C、阻塞态的进程即便给它CPU它也无法运行
  • D、处于就绪态的进程都在等待CPU

25如果一个进程在互斥信号量MUTEX上执行V操作后,能够唤醒另外一个因为等待这个资源而进入阻塞状态的进程,那么,执行V操作之前,信号量的值为( B )。

  • A、正数
  • B、负数
  • C、0
  • D、不确定

26若信号量S的初值为2,当前值为-1,则表示等待的进程个数是( B )。

  • A、0
  • B、1
  • C、2
  • D、3

27进程P1对信号量S执wait(S)操作,则信号量S的值应( A )。

  • A、减1
  • B、加1
  • C、不定
  • D、不变

28设与装资源关联的信号量(K)初值为3,当前值为1。若M表示该资源的可用个数,N表示等待该资源的进程数,则M、N分别是( B )。

  • A、0、1
  • B、1、0
  • C、1、2
  • D、2、0

29系统某资源总量为3,相应的信号量S的当前值为-2,则当前可用资源的数量和等待进程的数量分别为( A )

  • A、0, 2
  • B、1, 2
  • C、3, 1
  • D、2, 1

30当一进程因在记录型信号量S上执行signal(S)操作而导致唤醒另一进程前,S的值等于0。答案:×

31利用P-V机制控制并发过程时,如果信号量S小于0,其绝对值表示相应阻塞队列中进程的个数。答案:


一.单选题(共25题)

1( C )是操作系统必须提供的功能。

  • A、图形用户界面(GUI)
  • B、为进程提供系统调用命令
  • C、中断处理
  • D、编译源程序

答案解析:中断是操作系统必须提供的功能,因为计算机的各种错误都需要中断处理,核心态与用户态切换也需要中断处理

2一个进程映像是( C )。

  • A、由协处理器执行的一个程序
  • B、一个独立的程序+数据集
  • C、PCB结构与程序和数据的组合
  • D、一个独立的程序

答案解析:进程映像是PCB、程序段和数据的组合,其中PCB是进程存在的唯一标志。

3操作系统是根据 ( B )来对并发执行的进程进行控制和管理的。

  • A、进程的基本状态
  • B、进程控制块
  • C、多道程序设计
  • D、进程的优先权

答案解析:在进程的整个生命周期中,系统总是通过其PCB对进程进行控制的。亦即,系统是根据进程的PCB而不是任何别的来感知到进程存在的,PCB 是进程存在的唯一标志。 同时PCB常驻内存。A和D选项的内容都包含在进程PCB中。

4在单处理器系统中,如果同时存在10个进程,则处于就绪队列中的进程最多有( C )个。

  • A、1
  • B、2
  • C、9
  • D、10

答案解析:不可能出现这样一种情况, 单处理器系统10个进程都处于就绪状态,但是9个处于就绪状态,一个正在运行是可能存在的。 也要想到,可能10个进程都处于阻塞状态。

5一个进程的基本状态可以从其他两种基本状态转变过去,这个基本的状态一定是( C )。

  • A、执行状态
  • B、阻塞状态
  • C、就绪状态
  • D、完成状态

答案解析:只有就绪状态可以既由运行状态转变过去也能由阻塞状态转变过去。时间片到运行状态变为就绪状态,当所需要资源到达进程由阻塞状态转变为就绪状态。

6通常用户进程被建立后( B )。

  • A、便一直存在于系统中,直到被操作人员撤销
  • B、随着进程运行的正常或不正常结束而撤销
  • C、随着时间片轮转而撤销与建立
  • D、随着进程的阻塞或者唤醒而撤销与创建

答案解析:进程有它的生命周期,不会一直存在于系统中,也不一定需要用户显式地撤销。进程在时间片结束时只是就绪,而不是撤销。阻塞和唤醒是进程生存期的中间状态。进程可在完成时撤销,或者内存错误等引起撤销。

7支持多道程序设计的操作系统在运行过程中,不断地选择新进程运行来实现CPU的共享,但其中( D )不是引起操作系统选择新进程的直接原因。

  • A、运行进程的时间片用完
  • B、运行进程出错
  • C、运行进程要等待某一事件发生
  • D、有新进程进入就绪状态

答案解析:这道题实际上问的是,哪种情况不是进程从运行态转换成其他状态的。

8PCB是进程存在的唯一标志,下列( D )不属于PCB.

  • A、进程ID
  • B、CPU状态
  • C、堆栈指针
  • D、全局变量

答案解析:进程实体主要是代码、数据和PCB。因此,对于PCB内所含有的数据结构内容需要了解清楚,主要有四大类:进程标志信息、进程控制信息、进程资源信息、CPU现场信息。由上述可得,全局变量与PCB无关,它只与用户代码有关。

9下列选项中,导致创建新进程的操作是( B )。

I.用户登录成功 II.设备分配 III.启动程序执行

  • A、仅II和III
  • B、仅I和III
  • C、仅I和II
  • D、I,II,III

答案解析:用户登录成功后,系统要为此创建一个用户管理的进程,包括用户桌面、环境等。所有的用户进程会在该进程下创建和管理。II.设备分配是通过在系统中设置相应的数据结构实现的,不需要创建进程,这是操作系统中I/O核心子系统的内容。III.启动程序执行是典型的引起创建进程的事件。

10进程处于( C )时, 它是处于非阻塞状态。

  • A、等待从键盘输入数据
  • B、等待协作进程的一个信号
  • C、等待操作系统分配CPU时间
  • D、等待网络数据进入内存

答案解析:进程有三种基本状态,处于阻塞状态的进程是由于某个事件不满足而等待。这样的事件一般是I/0操作,如键盘等,或者是因互斥或同步数据引起的等待,如等待信号或等待进入互斥临界区代码段等,等符网络数据进入内存是为了进程问步。而等待CPU调度的进程处于就绪状态,只有它是非阻塞状态。

11下列选项中, 降低进程优先级的合理时机是( A )。

  • A、进程时间片用完
  • B、进程刚完成I/O操作, 进入就绪队列
  • C、进程长期处于就绪队列
  • D、进程从就绪状态转为运行状态

答案解析:A中进程时间片用完,可降低其优先级以让别的选程被调度进入执行状态。B中进陛刚完成I/O,进入就绪队列等待被处理机调度,为了让其尽快处理I/O结果,故应提高优先权,C中进程长期处于就绪队列,为不至于产生饥饿现象,也应适当提高优先级。D中进程的优先级不应该在此时降低,而应在时间片用完后再降低。

12下列选项中,会导致进程从执行态变为就绪态的事件是( D )

  • A、执行P(wait)操作
  • B、申请内存失
  • C、启动I/O设备
  • D、被高优先级进程抢占

答案解析:P(wait)操作表示进程请求某一资源,A、B和C都因为请求某一资源会进入阻塞态,而D只是被剥夺了处理机资源,进入就绪态,一旦得到处理机即可运行。

13

设与装资源关联的信号量(K)初值为3,当前值为1。若M表示该资源的可用个数,N表示等待该资源的进程数,则M、N分别是( B )。

  • A、0、1
  • B、1、0
  • C、1、2
  • D、2、0

答案解析:信号量表示相关资源的当前可用数量。当信号量K>0时,表示还有K个相关资源可用,所以该资源的可用个数是1。而当信号量K<0时,表示有[K]个进程在等待该资源。由于资源有剩余,可见没有其他进程等待使用该资源,故进程数为0。

14下列对临界区的论述中,正确的是( D )。

  • A、临界区是指进程中用于实现进程互斥的那段代码
  • B、临界区是指进程中用于实现进程同步的那段代码
  • C、临界区是指进程中用于实现进程通信的那段代码
  • D、临界区是指进程中用于访问共享资源的那段代码

答案解析:多个进程可以共享系统中的资源,一次仅允许一个进程使用的资源叫临界资源。访问临界资源的那段代码称为临界区。

15两个旅行社甲和乙为旅客到某航空公司订飞机票,形成互斥资源的是( C )。

  • A、旅行社
  • B、航空公司
  • C、飞机票
  • D、旅行社与航空公司

答案解析:一张飞机票不能售给不同的旅客,因此飞机票是互斥资源,其他因素只是为完成飞机票订票的中间过程,与互斥资源无关。

16进程A和进程B通过共享缓冲区协作完成数据处理,进程A负责产生数据并放入缓冲区,进程B从缓冲区读数据并输出。进程A和进程B之间的制约关系是( C ).

  • A、互斥关系
  • B、同步关系
  • C、互斥和同步关系
  • D、无制约关系

答案解析:并发进程因为共享资源而产生相互之间的制约关系,可以分为两类:①互斥关系,指进程之间因相互竞争使用独占型资源(互斥资源)所产生的制约关系;②同步关系,指进程之间为协同工作需要交换信息、相互等待而产生的制约关系。本题中两个进程之间的制约关系是同步关系,进程B必须在进程A将数据放入缓冲区之后才能从缓冲区中读出数据。此外,共享的缓冲区一定是互斥访问的,所以它们也具有互斥关系。

17在操作系统中,P、V操作是一种( D )

  • A、机器指令
  • B、系统调用命令
  • C、作业控制命令
  • D、低级进程通信原语

答案解析:P、V操作时一种低级的进程通信原语,它是不能被中断的。 P操作即wait操作,表示等待某种资源直到可用。若这种资源暂时不可用,则进程进入阻塞状态。注意,执行P操作时的进程处于运行状态。

18原语是( D )。

  • A、运行在用户态的过程
  • B、操作系统的内核
  • C、可中断的指令序列
  • D、不可分割的指令序列

答案解析:原语(Primitive/Atomic Action),顾名思义,就是原子性的、不可分割的操作。严格定义为:由若干个机器指令构成的完成某种特定功能的一段程序,其执行必须是连续的,在执行过程中不允许被中断。

19在用信号量机制实现互斥时,互斥信号量的初值为( B )。

  • A、0
  • B、1
  • C、2
  • D、3

答案解析:互斥信号量初值为1,P操作成功则将其减1,禁止其他进程进入; V操作成功则将其加1,允许等待队列中的一个进程进入。

20有三个进程共享同一程序段,而每次只允许两个进程进入该程序段,若用PV操作同步机制,则信号量S的取值范围是( A )。

  • A、2,1 ,0,-1
  • B、3,2,1,0
  • C、2,1,0,-1,-2
  • D、1,0,-1,-2

答案解析:因为每次允许两个进程进入该程序段,信号量最大值取2。至多有三个进程申请,则信号量最小为1,则信号量最小为-1,所以信号量可以取2、1、0、-1。

21当一个进程因在互斥信号量mutex上执行V(mutex)操作而导致唤醒另一个进程时,则执行V操作后mutex的值为( D )。

  • A、大于0
  • B、小于0
  • C、大于等于0
  • D、小于等于0

答案解析:由题意可知,系统原来存在等待进入临界区的进程,故 mutex小于等于-1,故在执行V( mutex)操作后, mutex的值小于等于0。

22有一个计数信号量S:

  1. 假如若干个进程对S进行了28次P操作和18次V操作之后,信号量S的值为0。

  2. 假如若干个进程对信号量S进行了15次P操作和2次V操作。请问此时有多少个进程等待在信号量S的队列中 (B)。

  • A、2
  • B、3
  • C、5
  • D、7

答案解析:对S进行了28次P操作和18次V操作,即S-28+18=0, 得信号量的初值为10;然后,对信号量S进行了15次P操作和2次V操作,即S-15+2= 10-15+2=- 3, s信号量的负值的绝对值表示等待队列中的进程数。所以有3个进程等待在信号最s的队列中。

23有两个并发进程P1、P2, 其程序代码如下:

PI() {             
	x=1// A1         
	y=2;           
	z=x+y;     
	print z;
}
P2(){
	x=-3// B1
	c=x*x;
	print. c; // B2
	// A2       
}

可能打印出z的值有( B ) 可能打印出的C值有( B )(其中x为P1. P2的共享变量).

  • A、z=1,-3; c=-l,9

  • B、z=-1,3;c=1,9

  • C、z=-1,-3, c=-1,9

  • D、z=1,3;c=1,9

答案解析:本题关键是输出语句A2、B2中读取的x的值不同,由于Al、BI 执行有先后问题,使得在执行A2、B2前,x的可能取值有两个就是1、-3;这样输出z的值可能是1+2-3或者是(3)+2=1;输出c的值可能是1x1=1或者是(-3)*(-3)=9.

24下列关于管程的叙述中,错误的是( A )。

  • A、管程只能用于实现进程的互斥

  • B、管程是由编程语言支持的进程同步机制

  • C、任何时候只能有一个进程在管程中执行

  • D、管程中定义的变量只能被管程内的过程访问

答案解析:管程是由一组数据以及定义在这组数据之上的对这组数据的操作组成的软件模块,这组操作能初始化并改变管程中的数据和同步进程。管程不仅能实现进程间的互斥,而且能实现进程间的同步,故A错误、B正确;管程具有特性:1)局部于管程的数据只能被局部于管程内的过程所访问;2)一个进程只有通过调用管程内的过程才能进入管程访问共享数据;3)每次仅允许一个进程在管程内执行某个内部过程,故C和D正确。

25P操作可能导致( C )。

  • A、进程就绪

  • B、进程结束

  • C、进程阻塞

  • D、新进程创建

答案解析:P操作是申请资源,不成功就导致阻塞。

26n个并发进程通过初值为1的信号量s共享资源R,当n个进程都通过wait(s)申请访问资源R时,信号量s的值为( D)。

  • A、0
  • B、n
  • C、-n
  • D、-(n-1)

27有界缓冲问题中,“counter++”的伪机器语言为:

(S0)register1 = counter

(S1)register1 = register1 + 1

(S2)counter = register1

“counter–”的伪机器语言为:

(S3)register2 = counter

(S4)register2 = register2 – 1

(S5)counter = register2

当这两段代码并行执行时,有种不同的执行结果(A)。

  • A、3
  • B、2
  • C、1
  • D、4

28若有10个进程共享同一程序段,而且每次最多允许5个进程进入该程序段,则互斥信号量的变化范围是( D )。

  • A、(-5)~1
  • B、5~10
  • C、1~10
  • D、(-5)~5

答案解析:本题目考查信号量的取值范围。程序段最多允许三个进程进入,则表示资源的数目为3,因此,信号量初值为3,每进入一个进程,信号量的值减1,当信号量的值减为0时,表示三个进程均进入程序段,此时若再有一个进程请求进入执行P操作,则信号量的值减为-1,进程阻塞。一共有四个进程,所以信号量的值最小为-1。因此信号量的值取值范围为3,2,1,0,-1。因此应该选B。

29设某类资源有5个,由3个进程共享,要使系统不会死锁则每个进程最多可申请的资源数是( D )

  • A、3
  • B、1
  • C、4
  • D、2

答案解析:某系统有同类资源m个,供n个进程共享。如果每个进程最多申请x个资源(其中1<=x<=m),可以证明,当n(x-1)+1<=m时,系统不会发生死锁。

该题中,n=3,m=5,则5>=3*(x-1)+1,x=2

你可能感兴趣的:(杂)