一、前驱图
前驱图是一个有向无环图,用于描述进程之间执行的先后顺序。
每个节点表示一个进程(或程序、一条语句),有向边表示前驱关系。
程序之间的前驱关系可以用->
箭头来表示。例如P1->P2,表示P2开始之前P1必须执行完成,P1是P2的直接前驱,P2是P1的直接后继。
没有前驱的节点称为初始节点,没有后继的节点称为终止节点。
二、进程的描述
1、进程的定义与特征
进程的定义
系统利用进程控制块PCB来描述进程的基本情况和活动过程,进而控制和管理进程。
进程实体:有程序段,相关的数据段和PCB构成。
进程的3中典型的定义:
进程使程序的一次执行。
进程使一个程序及其数据在处理机上顺序执行时所发生的活动。
进程是具有独立功能的程序在一个数据集上执行的过程,它是系统进行资源分配和调度的一个独立单位。
在引入进程的概念后,把传统OS(没引入线程)中的进程定义为:进程是程序的执行过程,是系统进行资源分配和调度的一个独立单位。
进程的特征
动态性:进程有一定的生命周期。
并发性:多个进程共存于内存中,且能在一段时间内同时执行。
独立性:进程是一个能够独立运行、独立获得资源、独立接受调度的一个基本单位。
异步性:进程是按异步方式运行的,及按各自独立的、不可预知的速度向前推进。
2、进程的基本状态与转换
进程的三种基本状态:
就绪(ready)状态:进程已准备好执行。
执行(running)状态:进程正在执行。
阻塞(block)状态:进程暂时无法执行。(如I/O请求、申请缓冲区失败等)
引入挂起操作后
挂起原语Suspend和激活原语Active二者必须成对使用。
3、进程管理中的数据结构
OS为每个进程专门定义了一个数据结构PCB。PCB作为进程的一部分,记录了OS所需的、用于描述当前进程情况以及管理进程运行状态的全部信息。
PCB的作用:
作为独立运行基本单位的标志
实现间断性运行方式
提供进程管理所需要的信息
提供进程调度所需要的信息
实现与其他进程的同步与通信
PCB中的信息:
进程标识符
处理机状态
进程调度信息
进程控制信息
PCB的组织方式:
线性方式
链接方式
索引方式
三、进程控制
进程的层次结构:创建进程的进程称为父进程(parent process),被创建的进程称为子进程(progeny process)。子进程的子进程为父进程的孙进程。
引起进程创建的事件:用户登录、作业调度、提供服务、应用请求。
进程的创建:
申请空白PCB
为新进程分配其运行所需的资源
初始化PCB
如果进程就绪队列能够接纳新进程,就将新进程插入就绪队列
进程的终止:
引起进程终止的事件:正常结束、异常结束、外界干预。
进程的阻塞与唤醒:
阻塞:正在执行的进程,使用阻塞原语block将自己阻塞。
唤醒:阻塞进程所期待的事件发生时,有关进程就会调用唤醒原语wakeup将等待该事件的进程唤醒。(如I/O操作已完成,或期待的数据已到达)
四、进程的通信
进程通信,是值进程之间的信息交换,通常由低级和高级之分。
低级通信:效率低;通信对用户不透明。
高级通信(工具):使用方便;高效地传送大量数据。
进程的通信类型
目前,高级通信机制可归结为4类:共享存储器系统,管道通信系统,消息传递系统,客户机-服务器系统。
共享存储系统:
基于共享数据结构的通信方式。效率低下,属于低级进程通信。
基于共享存储区的通信方式。属于高级进程通信。
管道通信系统:
管道(pipe):是指用于连接一个读进程和一个写进程以实现它们之间通信的一个共享文件,又名pipe文件。
管道机制必须提供这3方面的能力:互斥,同步,确定对方是否存在。
消息传递系统:
直接通信方式:利用OS所提供的发送原语通信。
间接通信方式:通过共享中间实体(信箱)的方式发送和接受消息。
Linux支持的进程通信方法:管道,信号,消息队列,共享内存,信号量,套接字等。
五、线程的概念
1、线程的引入
进程的两个基本属性:
进程是一个可拥有资源的独立单位。
进程同时又是一个可独立调度和分派的基本单位。
程序并发执行所须付出的开销:创建进程,撤销进程,进程切换。
引入线程后,线程与进程的比较:
调度的基本单位:将线程作为调度和分派的基本单位,进程切换时,开销小。
并发性:在引入进程的OS中,进程间、同一进程的线程间、不同进程的线程间都能并发执行,具有更好的并发性。
拥有资源:线程几乎不拥有资源,多个线程共享它们共属的进程所拥有的资源。
独立性:同一进程中的不同线程的独立性低于,不同进程之间的独立性。
系统开销:创建、撤销、切换线程的开销都比进程小。
支持多处理机系统:多谢线程的进程,可以将一个进程中的多个线程分配到多个处理机上,并行运行。
2、线程的状态和线程控制块
线程执行的三个状态:执行状态,就绪状态,阻塞状态。
于进程类似,线程也有线程控制块TCB。
多线程OS中进程的属性:
进程时应该可拥有资源的基本单位。
多个线程可以并发执行。
进程已不再是可执行的实体(线程才是)。
小结
本章从程序的执行方式入手,先后引人了OS中的两个重要概念:进程和线程。程序的执行方式有顺序执行和并发执行两种。在顺序执行方式下,单个程序独占内存运行,系统的运行效率低;在并发执行方式下,多个程序占用内存并轮流在CPU上运行,系统的运行效率得到了提升。
进程就是指正在运行的程序,它在运行过程中会改变状态,这些状态是根据进程当前的活动来定义的,包括创建、就绪、运行、阻塞和终止等。OS中的每个进程都是通过与之一一对应的PCB来实现控制和管理的。进程控制包括:进程创建、进程终止、进程阻塞与唤醒、进程挂起与激活等,这些控制操作需要用原语的方式来完成。进程间可以相互通信,通信方法多样常用的有管道、信号、消息队列、共享内存、信号量、套接字等。
为了提高程序并发执行的程度,引人了比进程更小的单位--线程。引入线程后,在资源共享、用户响应、经济性和多处理机架构等方面有诸多好处,能够进一步改善系统的性能。引人线程后,进程是资源分配的单位,线程是CPU调度的单位。
线程可分为KST和ULT两种,不同的系统会支持某一种线程,或者两种都支持。由于ULT和KST的连接方式不同,形成了3种不同的多线程模型:多对一模型、一对一模型和多对多模型。