第二章 进程与线程
前言
进程以及它的扩展——线程是计算机中的活动计算单元。进程可以看作是执行着的程序,需要占有一定的资源,如CPU、内存、文件和I/O设备,所以进程是分配资源的基本单位。
在大多数计算机系统中,进程是并发活动的单位。系统由一组进程组成,操作系统进程执行系统代码,用户进程执行用户代码。所有这些进程可以并发执行。
现代计算机系统中,操作系统支持多线程。
操作系统的进程管理提供大量服务,用来定义、支持和管理系统中的进程和线程。它除了负责进程和线程的管理之外,还负责用户进程和系统进程的创建与撤销、进程调度等。
2.1 进程的引入
现代操作系统允许多道程序同时调入内存并发执行,这就要求对各种程序提供更严格的控制和功能划分,这样的需求产生了进程的概念,即执行着的程序。
2.1.1 单道程序的顺序执行
1.程序的顺序执行
2.程序顺序执行的特征
顺序执行的程序具有以下特征:
(1)顺序性。程序在处理及上执行时,其操作严格按照规定的顺序执行,即只有前一个操作结束后,才能执行后一个操作。
(2)封闭性。程序是在封闭的环境中运行的。即程序在执行时独占系统中的全部资源,因而系统内资源的状态只有该程序才能改变它,与外界环境无关。
(3)可再现性。当程序被重复执行时,只要其初始条件相同,其执行结果必须相同。
2.1.2 多道程序的并发执行
1.程序的并发执行
为了提高计算机内各种资源的利用率,提高计算机系统的处理能力,并发处理技术得到广泛的应用。
2.程序并发执行的特征
程序的并发执行,提高了系统的吞吐量,但也产生了一些与顺序执行时不同的特征。
1)间断性。程序在并发执行时,由于它们共享系统中
2)失去封闭性。
3)失去再现性。
2.1.3 程序并发执行的条件
程序并发执行是有条件的,并不是所有程序都可以并发执行。
2.1.4 进程的概念
1.进程的概念
1)进程是程序的一次执行
2)进程是可以和别的计算并发执行的计算
3)进程可定义为一个数据结构及能在其上进行操作的一个程序
4)进程是一个程序及其数据在处理机上顺序执行时所发生的活动
5)进程是程序在一个数据集合上的运行程序,是系统进行资源分配和调度的一个独立单位
6)一个进程就是一个正在执行的程序,包括指令计数器、寄存器和变量的当前值
综上所述,进程可以定义为——并发执行的程序在一个数据集合上的执行过程
2.进程和程序的关系
进程和程序之间是既有密切联系又有区别的两个完全不同的概念。
主要区别在于以下方面:
1)进程的动态性和程序的静态性
2)进程的并发性和程序的顺序性
3)进程的暂时性和程序的永久性
4)结构特征
5)进程与程序是密切相关的
2.2 进程的状态及组成
进程的动态性是由它的状态及状态转换来体现的。
2.2.1 进程的基本状态
1.进程的3种基本状态
为了描述进程的运动规律,人们给进程定义了3种基本状态,即运行状态、就绪状态和阻塞状态。
1)运行状态
运行状态即进程正在处理机上运行的状态。在单处理机的系统中,只有一个进程处于运行状态。在多处理机的系统中,则有可能多个进程处于运行状态,但处于运行状态的进程数小于或等于处理机的数目,在没有可处理的进程时,处理机自动执行系统的空闲进程。
2)就绪状态
就绪状态即进程已经获得了除处理及之外的所有必要资源,只要获得了处理机就可以运行的状态。
3)阻塞状态
当进程由于等待输入输出操作或某个同步事件而暂停运行时,就处于阻塞状态。
2.3种基本状态的转换
1)就绪状态→ 运行状态
2)运行状态 → 就绪状态
3)就绪状态→ 阻塞状态
4)阻塞状态 → 就绪状态
3.创建状态和退出状态
1)创建状态
2)退出状态
2.2.2 进程的挂起状态
1.挂起状态的引入
引入挂起状态基于如下几个方面的需要:
1)内外存对换的需要
2)用户调试程序的需要
3)实时系统中调节负载的需要
2.进程状态的转换
(1)阻塞 → 阻塞挂起
(2)就绪 → 就绪挂起
(3)运行 → 就绪挂起
(4)就绪挂起→ 就绪
(5)阻塞挂起 → 就绪
2.2.3 进程控制块
1.进程映像
进程映像通常由程序、数据、栈和PCB四部分组成。
2.进程控制块的作用
使一个在多道程序环境下不能独立运行的程序成为一个能独立运行的基本单位,是一个能与其他进程并发执行的进程。
3.进程控制块中的内容
1)进程描述信息
(1)进程名
(2)进程标识符·
(3)用户名
2)处理机状态信息
(1)通用寄存器
(2)指令计数器
(3)程序状态字寄存器
(4)栈指针
3)进程调用信息
(1)进程的状态
(2)进程的优先级
(3)进程统计信息
(4)进程阻塞的原因
4)进程控制和资源占用信息
(1)程序入口地址
(2)程序的外存地址
(3)进程同步及通信机制
(4)资源占用信息
(5)链接指针
4.进程控制块的组织
进程控制块的组织方式目前常用的是链接方式
2.3 进程控制
进程控制的职能就是对系统中的全部进程实行有效的管理,其主要表现是对一个进程进行创建、撤销以及在某些进程状态之间的转换控制。
2.3.1 操作系统内核
1.核心态和用户态
核心态又称为系统态,具有较高的特权,能执行一切指令,能访问所有寄存器及内存的所有区域。
用户态是具有较低特权的执行状态。在这种状态下,只能执行规定的指令、访问指定的寄存器和内存的指定区域。
2.内核与原语
内核是在计算机硬件上扩充的第一层软件,操作系统要对这部分软件进行保护。内核是利用原语来实现的。
原语由若干条指令构成,是用于完成一定功能的过程。原语由原子操作构成。原子操作又是一个不可分割的操作。因此,原语在被执行时是不可以被中断的。
大多数操作系统内核包含以下功能
1)时钟管理
2)中断处理
3)原语操作
3.进程家族树
2.3.2 进程的创建与撤销
1.进程的创建
1)引起创建进程的事件
(1)用户登录
(2)新作业进入系统
(3)提供服务
(4)应用请求
2)创建原语要做的工作
(1)申请空白PCB
(2)初始化进程描述信息
(3)为进程分配资源、分配存储信息
(4)将新进程插入就绪队列
2.进程的撤销
1)引起进程撤销的事件
(1)进程正常结束
(2)进程异常结束
(3)外界干预
2)撤销原语要做的工作
(1)查找撤销进程的PCB
(2)若进程处于运行状态,予以终止,并进行进程调度,以重新挑选其他进程运行
(3)若进程有子孙,予以终止
(4)归还资源
(5)从所在队列移出
2.3.3 进程的阻塞与唤醒
进程在执行状态中,常常会因为等待I/O操作完成或等待某个事件出现而进入阻塞状态。当处于阻塞状态的进程所等待的操作完成或事件出现时,进程会从阻塞状态唤醒进入就绪状态。
1.引起进程阻塞和唤醒的事件
1)请求系统服务
2)启动某种操作
3)新数据尚未到达
4)无新工作可做
2.阻塞原语需要做的工作
1)停止进程的执行
2)将进程插入阻塞队列
3)重新调度
3.唤醒原语需要做的工作
1)将进程从阻塞队列解下
2)把进程插入就绪队列
3)改变进程在PCB中的状态
2.3.4 进程的挂起与激活
进程的挂起主要是将进程从内存中移出。当出现挂起事件时,进程可以将自己挂起或者由父进程将其某个子进程挂起。相反,当内存有足够的空间时,将处于挂起状态的进程从外存调回内存,激活进程。
1.挂起原语要做的工作
1)检查被挂起进程的状态
2)若进程处于就绪状态,将进程从就绪状态变为就绪挂起状态
3)若进程处于阻塞状态,将进程从阻塞状态变为阻塞挂起状态
4)若进程正在运行,则将进程从运行状态变为就绪挂起状态,并调用进程程序重新进行调度。
2.激活原语要做的工作
1)检查被激活进程的状态
2)若进程处于就绪挂起状态,将进程从就绪挂起状态变为就绪状态
3)若进程处于阻塞挂起状态,将进程从阻塞挂起状态变为阻塞状态
4)若系统采用的是抢占式进程调度,则有新的进程进入就绪队列时,要检查是否要重新调度。如果激活进程的优先级比正在运行进程的优先级高,则会立即剥夺正在进行的进程,把处理机分配给被激活的进程。
2.4 线程
2.4.1 线程的概念
1.线程的引入
线程是一个可以拥有资源的独立单位。
进程是一个可以独立调度和分派的基本单位。
由于线程是一个资源的拥有者,因此在线程的创建、撤销以及状态转换中,系统要为之付出较大的空间和时间开销。也正是因为如此,系统中所设置的进程数目不宜过多,进程切换的频率也不宜过高,但这样就限制了进程并发程度的进一步提高。
2.线程的组成
线程有时要也被称为轻型进程。
3.线程的状态
4.线程的控制
1)线程的创建
2)线程的撤销
3)线程等待
4)线程让权
2.4.2 线程与进程的比较
1.线程与进程的关系
2.引入线程的重要性
3.线程与进程的比较
1)调度
2)并发性
3)拥有资源
4)系统开销
2.4.3 线程的实现
1.用户级线程
2.内核级线程
3.组合方法
2.4.4 多线程的问题
1.线程取消
2.信号处理
3.线程池
线程池的优点如下所述
(1)用现有线程处理请求要比创建新线程快。
(2)线程池限制了可用线程的数量,这对那些不能支持大量并发线程的系统影响比较明显。