第二章 进程与线程(一)
【考纲内容】
(一)进程与线程(★★★☆☆)
进程与线程的基本概念;进程/线程的状态与转换
线程的实现:内核支持的线程,线程库支持的线程
进程与线程的组织与控制
进程间通信:共享内存,消息传递,管道
(二) CPU 调度与上下文切换(★★★★☆)
调度的基本概念;调度的目标;
调度的实现:调度器/调度程序 (scheduler), 调度的时机与调度方式(抢占式/非抢占式),闲逛进程,内核级线程与用户级线程调度
典型调度算法:先来先服务调度算法;短作业(短进程、短线程)优先调度算法,时间片轮转调度算法,优先级调度算法,高响应比优先调度算法,多级队列调度算法,多级反馈队列调度算法
上下文及其切换机制
(三)同步与互斥(★★★★★)
同步与互斥的基本概念
基本的实现方法:软件方法;硬件方法
锁;信号量;条件变量
经典同步问题:生产者-消费者问题,读者-写者问题;哲学家进餐问题
(四)死锁(★★★★☆)
死锁的基本概念;死锁预防
死锁避免;死锁检测和解除(!!!银行家算法)
【复习提示】进程管理是操作系统的核心,也是每年必考的重点。其中,进程的概念、进程调度、信号量机制实现同步和互斥、进程死锁等更是重中之重,必须深入掌握。其中信号量机制实现同步和互斥、进程调度算法和死锁等都可能命制综合题,如利用信号量进行进程同步就在往年的统考中频繁出现。
2.1 进程与线程
2.1.1 进程的概念和特征
1. 进程的概念
进程的定义:
- 进程是程序的一次执行过程。
- 进程是一个程序及其数据在处理机上顺序执行时所发生的活动。
- 进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。
系统利用为进程控制块 (Process Control Block, PCB) 来描述进程的基本情况和运行状态,进而控制和管理进程。
进程映像:由程序段、相关数据段和 PCB 三部分构成的进程实体
2. 进程的特征
1) 动态性。进程是程序的一次执行,它有着创建、活动、暂停、终止等过程,具有一定的生命周期,是动态地产生、变化和消亡的。动态性是进程最基本的特征。
2) 并发性。指多个进程实体同存千内存中,能在一段时间内同时运行。
3) 独立性。指进程实体是一个能独立运行、独立获得资源和独立接受调度的基本单位。
4) 异步性。由于进程的相互制约,使得进程按各自独立的、不可预知的速度向前推进。异步性会导致执行结果的不可再现性,为此在操作系统中必须配置相应的进程同步机制。
2.1.2 进程的状态与转换
1) 运行态。进程正在处理机上运行。在单处理机中,每个时刻只有一个进程处千运行态。
2) 就绪态。进程获得了除处理机外的一切所需资源,一且得到处理机,便可立即运行。系统中处于就绪状态的进程可能有多个,通常将它们排成一个队列,称为就绪队列。
3) 阻塞态,又称等待态。进程正在等待某一事件而暂停运行,如等待某资源为可用(不包括处理机)或等待输入/输出完成。即使处理机空闲,该进程也不能运行。系统通常将处千阻塞态的进程也排成一个队列,甚至根据阻塞原因的不同,设置多个阻塞队列。
4) 创建态。进程正在被创建,尚未转到就绪态。创建进程需要多个步骤:首先申请一个空PCB, 并向 PCB 中填写用千控制和管理进程的信息;然后为该进程分配运行时所必须的资源;最后把该进程转入就绪态并插入就绪队列。但是,如果进程所需的资源尚不能得到满足,如内存不足,则创建工作尚未完成,进程此时所处的状态称为创建态。
5) 结束态。进程正从系统中消失,可能是进程正常结束或其他原因退出运行。进程需要结束运行时,系统首先将该进程置为结束态,然后进一步处理资源释放和回收等工作。
2.1.3 进程的组织
进程是一个独立的运行单位,也是操作系统进行资源分配和调度的基本单位。它由进程控制块 (PCB)、程序段、数据段三部分组成,其中最核心的是进程控制块 (PCB)。
2.1.4 进程控制
进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能。在操作系统中,一般把进程控制用的程序段称为原语,原语的特点是执行期间不允许中断,它是一个不可分割的基本单位。
2.1.5 进程的通信
进程通信是指进程之间的信息交换。 PV 操作是低级通信方式,高级通信方式是指以较高的效率传输大量数据的通信方式。高级通信方法主要有共享存储、消息传递、管道通信三类
1. 共享存储
在通信的进程之间存在一块可直接访问的共享空间,通过对这片共享空间进行写/读操作实现进程之间的信息交换。
2. 消息传递
1) 直接通信方式。发送进程直接把消息发送给接收进程,井将它挂在接收进程的消息缓冲队列上,接收进程从消息缓冲队列中取得消息。
2) 间接通信方式。发送进程把消息发送到某个中间实体,接收进程从中间实体取得消息。这种中间实体一般称为信箱。
3. 管道通信
管道通信是消息传递的一种特殊方式 。所谓“管道”,是指用于连接一个读进程和一个写进程以实现它们之间的通信的一个共享文件,又名 pipe 文件。
2.1.6 线程和多线程模型
1. 线程的基本概念
线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发执行。
2. 线程与进程的比较
I) 调度。在传统的操作系统中,拥有资源和独立调度的基本单位都是进程,每次调度都要进行上下文切换,开销较大。在引入线程的操作系统中,线程是独立调度的基本单位,而线程切换的代价远低千进程。在同一进程中,线程的切换不会引起进程切换。但从一个进程中的线程切换到另一个进程中的线程时,会引起进程切换。
2) 并发性。在引入线程的操作系统中,不仅进程之间可以并发执行,而且一个进程中的多个线程之间亦可并发执行,甚至不同进程中的线程也能并发执行,从而使操作系统具有更好的并发性,提高了系统资源的利用率和系统的吞吐显。
3) 拥有资源。进程是系统中拥有资源的基本单位,而线程不拥有系统资源(仅有一点必不可少、能保证独立运行的资源),但线程可以访问其隶属进程的系统资源,这主要表现在属千同一进程的所有线程都具有相同的地址空间。要知道,若线程也是拥有资源的单位,则切换线程就需要较大的时空开销,线程这个概念的提出就没有意义。
4) 独立性。每个进程都拥有独立的地址空间和资源,除了共享全局变儒,不允许其他进程访问。某进程中的线程对其他进程不可见。同一进程中的不同线程是为了提高并发性及进行相互之间的合作而创建的,它们共享进程的地址空间和资源。
5) 系统开销。在创建或撤销进程时,系统都要为之分配或回收进程控制块 PCB 及其他资源,如内存空间、 I/0 设备等。操作系统为此所付出的开销,明显大于创建或撤销线程时的开销。类似地,在进程切换时涉及进程上下文的切换,而线程切换时只需保存和设置少扯寄存器内容,开销很小。此外,由千同一进程内的多个线程共享进程的地址空间,因此这些线程之间的同步与通信非常容易实现,甚至无须操作系统的干预。
6) 支持多处理机系统。对千传统单线程进程,不管有多少处理机,进程只能运行在一个处理机上。对千多线程进程,可以将进程中的多个线程分配到多个处理机上执行。
3. 线程的属性
- 线程是一个轻型实体,它不拥有系统资源,但每个线程都应有一个唯一的标识符和一个线程控制块,线程控制块记录了线程执行的寄存器和栈等现场状态。
- 不同的线程可以执行相同的程序,即同一个服务程序被不同的用户调用时,操作系统把它们创建成不同的线程。
- 同一进程中的各个线程共享该进程所拥有的资源。
- 线程是处理机的独立调度单位,多个线程是可以并发执行的。在单 CPU 的计算机系统中,各线程可交替地占用 CPU; 在多 CPU 的计算机系统中,各线程可同时占用不同的 CPU,若各个 CPU 同时为一个进程内的各线程服务,则可缩短进程的处理时间。
- 一个线程被创建后,便开始了它的生命周期,直至终止。线程在生命周期内会经历阻塞态、就绪态和运行态等各种状态变化。
4. 线程的状态与转换
与进程一样,各线程之间也存在共享资源和相互合作的制约关系,致使线程在运行时也具有间断性。相应地,线程在运行时也具有下面三种基本状态。
执行状态:线程已获得处理机而正在运行。
就绪状态:线程已具备各种执行条件,只需再获得 CPU 便可立即执行。
阻塞状态:线程在执行中因某事件受阻而处千暂停状态。
线程这三种基本状态之间的转换和进程基本状态之间的转换是一样的。
5. 线程的组织与控制
6. 线程的实现方式
线程的实现可以分为两类:用户级线程 (User-Level Thread, ULT) 和内核级线程 (Kernel-Level Thread, KLT) 。内核级线程又称内核支持的线程。
(1) 用户级线程 (ULT)
在用户级线程中,有关线程管理(创建、撤销和切换等)的所有工作都由应用程序在用户空间中完成,内核意识不到线程的存在。应用程序可以通过使用线程库设计成多线程程序。
用户级线程的优点:①线程切换不需要转换到内核空间,节省了模式切换的开销。②调度算法可以是进程专用的,不同的进程可根据自身的需要,对自己的线程选择不同的调度算法。③用户级线程的实现与操作系统平台无关,对线程管理的代码是属千用户程序的一部分。
用户级线程的缺点:①系统调用的阻塞问题,当线程执行一个系统调用时,不仅该线程被阻塞,而且进程内的所有线程都被阻塞。②不能发挥多处理机的优势,内核每次分配给一个进程的仅有一个 CPU, 因此进程中仅有一个线程能执行。
(2) 内核级线程 (KLT)
在操作系统中,无论是系统进程还是用户进程,都是在操作系统内核的支持下运行的,与内核紧密相关。**内核级线程同样也是在内核的支持下运行的,线程管理的所有工作也是在内核空间内实现的。**内核空间也为每个内核级线程设置一个线程控制块,内核根据该控制块感知某线程的存在,并对其加以控制。
内核级线程的优点: ① 能发挥多处理机的优势,内核能同时调度同一进程中的多个线程并行执行。②如果进程中的一个线程被阻塞,内核可以调度该进程中的其他线程占用处理机,也可运行其他进程中的线程。③内核支持线程具有很小的数据结构和堆栈,线程切换比较快、开
销小。④内核本身也可采用多线程技术,可以提高系统的执行速度和效率。
内核级线程的缺点:同一进程中的线程切换,需要从用户态转到核心态进行,系统开销较大。这是因为用户进程的线程在用户态运行,而线程调度和管理是在内核实现的。
(3) 组合方式
7. 多线程模型
1)多对一模型
优点:线程管理是在用户空间进行的,因而效率比较高。
缺点:如果一个线程在访问内核时发生阻塞,则整个进程都会被阻塞;在任何时刻,只有一个线程能够访问内核,多个线程不能同时在多个处理机上运行。
2)一对一模型
优点:当一个线程被阻塞后,允许调度另一个线程运行,所以并发能力较强。
缺点:每创建一个用户线程,相应地就需要创建一个内核线程,开销较大。
3)多对多模型
特点:既克服了多对一模型并发度不高的缺点,又克服了一对一模型的一个用户进程占用太多内核级线程而开销太大的缺点。此外,还拥有上述两种模型各自的优点。