进程管理
进程的基本概念
- 进程的特征与定义
定义:作为资源分配和独立运行的基本单位,引入进程的目的是使多个程序能并发执行,且对并发执行的程序加以描述和控制
特征:
1)结构特征:进程实体对应于一个进程,进程实体的创建指的是进程实体中PCB(process control block:进程控制块)
2)并发性:进程实体(要创建了相应的PCB)存于内存中,在一段时间内同时运行
3)独立性:进程实体能独立运行 + 独立分配资源 + 独立调度
4)异步性:进程的执行顺序和执行时间的不确定性,但是可以引入进程同步机制,使得进程按我们想要的结果方式运行 - 进程的状态(三种基本状态和其它状态)
1)就绪状态:可以获得但还未获得CPU资源;有多个,形成就绪队列
2)执行状态:获得CPU,正在执行
3)阻塞状态:CPU无法继续执行该进程,进入阻塞状态,譬如IO请求,形成阻塞队列
4)挂起状态(人为)
中断用户的请求,将正在运行的程序停止下来,进程就处于挂起状态
5)创建状态
进程创建状态过程:为进程创建PCB,把进程转入就绪状态并插入就绪队列
6)终止状态:释放PCB所占用的资源
- 进程控制块PCB
1) PCB概述:系统会为每一个进程创建一个相应的数据结构PCB,操作系统就是根据PCB来对并发执行的进程进行控制和管理。PCB描述了一个进程当前状态及控制进程运行的全部信息
2) PCB中的信息(了解即可)
1、为了描述和控制进程的运行,系统为进程定义的数据结构
2、PCB常驻内存
进程控制
进程控制主要涉及到进程的创建、终止以及进程运行过程中状态的转换,它们一般是通过原语来实现的(原语:原子性操作,不可分割)
- 进程的创建
步骤为:申请空白的PCB—为进程分配相应的内存资源—初始化PCB—插入到就绪队列 - 进程的终止
步骤为:根据进程标识符,找出该进程对应的PCB—停止该进程及其子进程的运行—释放PCB所占用的资源 - 进程的阻塞与唤醒
阻塞步骤为:停止进程的运行——将进程从执行状态变为阻塞状态——插入到阻塞队列
唤醒步骤为:从阻塞队列中移出—将进程从阻塞状态变为就绪状态—插入到就绪队列 - 进程的挂起与激活
进程同步
在多道程序系统中,各进程以异步的方式执行,这就很容易导致程序执行结果的不可再现性,譬如说它们在争用临界资源的时候。因此用引入进程同步机制来协调各进程的执行,使程序的执行结果具有可再现性。
- 进程同步的基本概念
1) 进程间两种形式的制约关系
a、进程互斥关系:例如对临界资源的访问(打印机)
b、进程同步关系:进程间直接的相互制约关系(AB进程直接相关)
2) 临界资源:进程采用互斥的方式访问临界资源(生产者-消费者中的缓冲池)
3) 临界区:进程访问该临界区时,检查是否该临界资源现在是否被访问,如果没被访问则进入该临界区,并设置该临界区为访问状态,否则等待。 - 信号量机制
操作系统中采用信号量机制作为实现进程同步的有效工具
信号量集的发展过程:
1)整型信号量
S:资源数目
Wait(S):while S < 0 等待(忙等); S = S-1 获得资源
Signal(S):S= S+ 1 释放资源
缺点:忙等
2) 记录性信号量
S:是一种数据结构
S.value:绝对值为等待资源进程的个数
S.L:等待资源进程链表
缺点:只共享一种临界资源
3) AND型信号量
共享多个临界资源,一次性把所有临界资源分配给进程,进程使用完之后再一起释放
缺点:一次只能分配一个临界资源 + 当资源小于某个临界值时,不予分配
4)信号量集
之前的只能获取和释放一个临界资源
当资源数目小于某一下限值得时候不予分配
Swait(信号量i,下限值i,需求值i) - 管程机制
(一种新的进程同步进制)
1)管程:代表共享资源的数据结构 + 对共享资源的并发操作
2)管程每次只允许一个进程访问,从而实现进程互斥访问资源
3)假如一个进程调用了管程,在管程中挂起,如果在此期间不释放管程资源,则其他进程无法访问管程资源,这里采用了条件变量的方法解决这个问题
4)根据挂起或阻塞的条件不同,在管程中设置多个条件变量,对条件变量的操作仅仅是wait和signal,每个条件变量对应于一个链表
x.wait:正在调用管程的进程由于条件x而被阻塞或挂起,将进程插入到x条件的等待队列上
x.signal:x条件发生变化,重启一个因为x条件而阻塞或挂起的进程
经典的进程同步问题
1. 生产者-消费者
2. 哲学家进餐
3. 读者-写者问题
4. 生产者-消费者
进程通信
1. 进程之间的通信要兼顾进程同步问题(互斥和同步),信号量机制作为进程同步机制很有效,但不能作为进程通信进制(效率低 + 不透明)。
2. 低级进程通信:进程的同步和互斥(因为要交互的数据少);高级进程通信:共享存储器系统 + 消息传递系统 + 管道通信系统
3. 共享存储器系统:共享数据结构 + 共享存储区
2. 如今最常用的进程通信方式是消息传递系统,进程之间可直接发送消息(报文)通信,该方法称为直接通信方式(例如原语:send(Receiver, message) + Reveive(sender, message))。间接通信方式需要通过一个共享的数据结构实体(信箱)。(设有消息缓冲队列)
3. 管道通信系统:用于连接一个读进程和一个写进程的共享文件
3. 但在消息传递实现进程通信也会存在一些问题:通信链路,消息的格式,进程同步的方式
线程
- 在没有引入线程概念之前,进程的定义为:作为资源分配、独立运行和调度的基本单位。而引入线程概念后,把进程作为资源分配的基本单位,而把线程作为独立运行和调度的基本单位。
引入线程的目的是:提高程序的并行执行程度,进一步提高系统吞吐量 - 线程的实现方式
1、内核支持线程:线程的创建、切换、撤销都是在内核中进行的,内核通过TCP对线程进行管理
2、用户级线程(更有效):线程的创建、切换、撤销都与内核无关;仅存在于用户空间中;但调度仍是一进程为单位的
3、组合方式