1、操作系统教程 -Linux实例分析,面向21世纪高等学校计算机类专业系列教材,主讲 肖竟华,第 2 章 进程管理,2.1 进程概念 2.2 进程控制 2.3 进程调度 2.4 进程同步与互斥 2.5 进程通讯 2.6 线程,第二章 进程管理,21 进程概念,2.1.1程序的顺序执行,1.顺序性:程序所规定的动作在机器上严格地按顺序执行。,在某个程序段执行完之前,其它程序段只能等待。这种程序的执行方式,我们成为程序的顺序执行。,这种顺序程序活动有三个主要特点:,2.封闭性:只有程序本身的动作才能改变程序的运行环境。,3.可再现性:程序的执行结果与程序运行的速度无关。,第二章 进程管理,2.1.2
2、 程序的并发执行,特点:,1.失去封闭性及失去可再现性,2.程序与计算不再一一对应,3.并发程序在执行期间可以互相制约,一组程序共存于系统中,它们在执行时间上是重叠的。,(1)直接制约,(2)间接制约,第二章 进程管理,并行:,同一时刻,两个事物均处于活动状态,2.1.3 并行与并发概念的差别,并发:,宏观上存在并行特征,微观上存在顺序性。同一时刻,只有一个事物处于活动状态.,第二章 进程管理,第二章 进程管理,2.进程的特性,2.1.4 进程的概念及其特性,(1)动态性:,(2)并发性:,(3)多重性:,进程是一个独立功能的程序关于某个数据集合的动态运行活动,它是系统进行资源分配和调度的基本
3、单位。,1. 进程的概念,进程是程序的动态运行过程, 它有生命期.,可与其它进程同时运行.,同一程序作用与不同的数据, 便形成不同的进程.,第二章 进程管理,1.程序是静态概念,2.进程是一个能独立运行的单位,进程和程序的联系和区别是:,3.程序和进程无一一对应关系,总结:,进程是程序执行的动态活动;,程序是进程运行的静态文本。,2.1.5 进程的组成,1.程序:,完成独立功能的指令集合。,2.数据:,程序运行所作用的对象。,3.进程控制块(PCB):,进程控制块是进程存在的唯一标志。,(1)进程名,(2)特征信息,(3)进程的状态,(4)优先级,(5)通信信息,(6)资源使用清单,(7)进程
4、存放的位置,包括:,第二章 进程管理,1.线性表结构,2.1.6 PCB的组织方式,第二章 进程管理,2.链接表结构,2.1.6 PCB的组织方式,第二章 进程管理,3.索引表结构,2.1.6 PCB的组织方式,第二章 进程管理,1.进程的状态,2.1.7 进程的状态及其变迁,(1)运行态:,进程正占用处理机执行。,(2)就绪态:,进程已具备运行条件,只因处理机 被其它进程占用而处于一种等处理 机的状态。,(3)等待态:,进程因等某事件发生(例等I/O操 作结束)而暂时不能运行的状态。,时间片到/优先级下降,时间片到/优先级上升,等待某事件发生,(如等待I/O),所等待事件结束如(I/O完成)
5、,2.进程状态变迁,第二章 进程管理,2.2 进程控制,是指系统使用具有特定功能的程序来创建进程、撤销进程以及完成进程状态间的转换。,2.2.1 原语,所谓原语是机器指令的延伸,往往是为完成某些特定功能而编制的一段系统程序。为保证操作的正确性,在许多机器中规定,执行原语操作时,要屏蔽中断,以保证其操作的不可分割性。,第二章 进程管理,1.进程的创建,进程创建主要功能,2.2.2 进程控制原语,(1)申请一个空闲的PCB,(2)为新进程分配资源,(3)将新进程的PCB初始化,(4)将新进程加到就绪队列中,第二章 进程管理,主要功能:,1.从系统的PCB表中找到指定进程的PCB。,2. 终止进程,
6、2.回收该进程所占用的全部资源。,3. 若该进程还有子孙进程,回收它们所占有的 全部资源。,4.释放被终止进程的PCB,并从原来队列中摘走。,第二章 进程管理,主要功能是:,3. 更换进程映像,1.释放子进程原来程序和数据所占用内存空间。,2.从磁盘上找出子进程所要执行的程序和数据 (通常以可执行文件的形式存放)。,3.分配内存空间,装入新的程序和数据。,4.为子进程建立初始的运行环境 主要是对各个寄存器初始化,返回到用户态,运行 该进程的程序。,第二章 进程管理,主要功能:,1.立即停止当前进程的执行。,4. 阻塞进程,2.保护现行进程的CPU现场。,3.把该进程现行状态由“运行”改成“等待
7、” ,并插入到具有相同事件的等待队列,4. 转到进程调度程序,重新挑选一个合适的就绪进程投入运行。,第二章 进程管理,主要功能:,5. 唤醒进程,1.把进程从相应的等待队列中摘下;,2.将现行状态改为就绪态,然后把该进程 插入到就绪队列中;,3.如果被唤醒进程比运行进程有更高的优 先级,则设置重新调度标志。,第二章 进程管理,2.3.1 进程调度的基本概念,2.3 进程调度,进程调度,它协调和控制各进程对CPU的使用,按照一定的调度原则和某种调度算法从就绪队列中选择一个进程,把CPU分配给该进程运行。,第二章 进程管理,1.记录当前进程的情况。 如进程名、指令计数器、状态寄存器 及所有通用寄存
8、器等现场信息。,2.3.2 进程调度的功能,2.根据一定的调度算法,从就绪队列中 选择一个进程获得处理机。,3.进程上下文切换,第二章 进程管理,1.可剥夺调度方式,2.3.3 进程调度方式,2.非剥夺调度方式,第二章 进程管理,响应时间:进程自进入就绪队列开始至 进程占用CPU之间的时间间隔,2.3.4 进程调度的考量标准,周转时间:进程自进入就绪队列开始至 进程结束之间的时间间隔,CPU吞吐量:单位时间内运行结束的 进程个数,第二章 进程管理,1.先来先服务调度算法(FCFS),2.3.5 进程调度算法,优点:,实现简单,缺点:,效率较低,第二章 进程管理,2. 优先数法,按某种原则对就绪
9、队列中的每个进程赋予一个优先级,进程调度时则根据进程的优先级确定选择顺序,即把处理机分配给就绪队列中优先级高的进程。,(1)静态优先数法,(2)动态优先数法,第二章 进程管理,(1)静态优先数法,静态优先数法是指在进程创建时就赋给它一个优先数。进程在整个生命周期内其优先数不再变化 。,确定进程的优先数的原则:,1)按照进程的类型确定,2)按照进程使用资源的类型和数量确定,3)按照进程长度确定,短作业优先于长作业,4)按用户要求,由用户高价购买作业优先权,第二章 进程管理,(2)动态优先数法,进程的生命期内根据进程特性的动态变化、各进程对处理机使用的轻重缓急修改其优先数,优点:,防止有些进程长期
10、垄断处理机,缺点:,系统开销比较大,第二章 进程管理,3时间片轮转法(RR),将系统中所有的就绪进程按照FCFS原则,排成一个队列。每次调度时将CPU分派给队首进程,让其执行一个时间片。,(1)时间片大小的选择,QRN,Q 为时间片,R 为响应时间,N 为就绪进程数,第二章 进程管理,(2)时间片大小的重要性,)如果时间片过大,可使时间片轮转调度算法已退化为FCFS调度算法,因而无法获得令用户满意的响应时间。,)如果时间片取得太小,其处理机调度开销将会变得很大,第二章 进程管理,4.多队列反馈法,把就绪进程按优先级排成多个队列,同队列的进程具有相同的时间片。高优先级队列的时间片比低优先级队列的
11、小 。,第二章 进程管理,2.4.1 临界资源和临界区,2.4 进程的同步与互斥,1. 临界资源,一次只允许一个进程使用的资源称为临界资源。,2. 临界区,访问临界资源的程序区域称为临界区。,第二章 进程管理,2.4.2 进程的同步,进程间为了完成一个共同的目标,必须互相合作的协同工作关系、有前后次序的直接制约关系称为进程的同步。,2.4.3 进程的互斥,多个进程因不能同时访问临界资源而产生的间接制约关系称为进程的互斥。,第二章 进程管理,2.4.4 用锁操作原语实现互斥,定义锁变量W w = 0,表示锁关 w = 1,表示锁开,关锁原语 lock (w): while (w = = 1) ;
12、 w = 1 ;,开锁原语 unlock (w): w = 0;,第二章 进程管理,进程A 进程B . . . . . . lock (w); lock(w); 打印信息 Si 打印信息 Sj unlock(w); unlock(w);,第二章 进程管理,2.4.5 信号量上的P、V操作原语,1. 信号量(Semaphore),由两个成员组成的结构型信号量:,表示该信号量的值, 信号量等待队列指针:,指向该信号量等待队列中下一个进程的PCB, 整型变量:,第二章 进程管理, 信号量整形变量的取值含义,设信号量整型变量为 S,若S0,表示可用资源的实体的个数;,若S0,表示等待该资源的进程个数。
13、,第二章 进程管理,2. P、V操作原语,P(S): 顺序执行下述两个动作:,1)信号量的值减1,即S=S-1。,2)如果S0 ,则该进程继续执行;如果 S0 ,则把该进程状态置为阻塞态,将其PCB连入该信号量队列的末尾,并放弃处理机,进行等待。,第二章 进程管理,V(S): 顺序执行下述两个动作:,1)S值加1,即S = S + 1。,2)如果S 0,则该进程继续运行;如果S 0,则释放S信号量队列上的第一个PCB,然后该进程继续运行。,第二章 进程管理,2.4.6 利用信号量及P、V操作 实现进程的同步与互斥,1.利用信号量及P、V操作实现进程的互斥,Pa Pb . . . . . . P
14、(mutex) P(mutex) 分配打印机 释放打印机 (读写分配表) (读写分配表) V(mutex) V(mutex),第二章 进程管理,利用信号量和P、V操作实现互斥的一般模型是:,进程P1 进程P2 进程Pn . . . . . . . . . P(mutex); P(mutex); P(mutex); 临界区 临界区 临界区 V(mutex) ; V(mutex) ; V(mutex); . . .,第二章 进程管理,2. 用利用信号量及P、V原语实现进程同步,用P、V操作实现同步的方法:,(1)首先应分析进程间的制约关系, 确定信号量个数和相应功能。,(2)信号量的初值与相应资源
15、的数量有关,(3)找到进程间需要同步的相关程序段,(4)同一信号量的P、V操作要成对出现:,等待方在相关段前做P操作;,被等方在相关段后做V操作。,第二章 进程管理,2.4.7 经典的进程同步互斥问题,1.生产者一消费者问题,第二章 进程管理,2.4.7 经典的进程同步互斥问题,2. 哲学家就餐问题,第二章 进程管理,2.5.1 进程通信机制,由系统管理一组缓冲区,其中每个缓冲区可以存放一个消息(即一组信息)。当进程要发送消息时,先向系统申请一缓冲区,然后把消息写进去。接着把该缓冲区连到接收进程的消息队列中,并用V操作通知接收者,接收进程可以在适当时候从消息队列中取出消息,并释放该缓冲区。,1
16、. 消息通信方法的设计思想,2.5 进程通信,第二章 进程管理,2.5.1 进程通信机制,2.5 进程通信,2.5.1 直接通信-消息缓冲通信,1. 消息通信方法的设计思想,由系统管理一组缓冲区,其中每个缓冲区可以存放一个消息(即一组信息)。当进程要发送消息时,先向系统申请一缓冲区,然后把消息写进去。接着把该缓冲区连到接收进程的消息队列中,并用V操作通知接收者,接收进程可以在适当时候从消息队列中取出消息,并释放该缓冲区。,第二章 进程管理,1)消息缓冲区结构,2. 有关数据结构,消息缓冲区一般包含下列几种信息: Name:发送消息的进程名或标志号。 Size:消息长度。 Text:消息正文。
17、Next: 下个缓冲区的地址。,2)进程PCB中一般包含有下列项目:,mutex:消息队列操作互斥信号量。 Sm:表示接受消息计数和同步的信号量 Pm:指向该进程的消息队列中第一个缓冲区的指针,第二章 进程管理,3.消息发送过程,第二章 进程管理,2.6 线 程,2.6.1 线程引入的目的,2.6.2 线程的概念,所谓“线程”(Thread),是“进程”中某个单一顺序的控制流。,往往称之为“轻量级进程”,第二章 进程管理,2.6.3 线程的属性,1. 与同属于一个进程的其它线程共享 系统所拥有的全部资源,2. 线程是进程中的一个实体,是被系统 独立调度和分派的基本单位,3. 同一个进程中的多个
18、线程可以并发执行, 不同进程中的线程也能并发执行,第二章 进程管理,2.6.4 线程和进程的关系,单进程、单线程,单进程、多线程,多进程、一个进程一个线程,多进程、一个进程多个线程,第二章 进程管理,线程和进程具有以下关系:,1. 线程是进程的一部分, 它是进程内的一个执行单元,2. 资源分配的对象是进程, 而不是线程,3. 调度的基本单位是线程而不是进程,4. 线程也可并发执行,第二章 进程管理,单线程模型,多线程模型,第二章 进程管理,2.5 Linux 进程管理,2.5.(1) 进程及其状态,1. 可运行态(TASK_RUNNING): 进程处于就绪状态,可以被调度运行。,2. “可中断
19、”睡眠态(TASK_INTERRUPTIBLE): 进程处于“浅度”睡眠状态信号到来时可被唤醒。(低优先睡眠),3. “不可中断”睡眠态(TASK_UNINTERRUPTIBLE):进程处于“深度”睡眠状态不受信号的干扰。(高优先睡眠),第二章 进程管理,4. 停止态(TASK_STOPPED):主要用于程序调试。,f.僵死态(TASK_ZOMBIE):由于某些原因运行进程被终止,但该进程的控制结构(task_struct)仍保留着。,2.5.1.(2) 进程的模式和类型,第二章 进程管理,2.5.2 进程的结构,Linux系统中进程映像由以下几个部分组成:进程控制块(task_struct)
20、、系统栈、用户栈、程序代码段和数据段。,第二章 进程管理,a.Task_struct结构(PCB),b.进程系统堆栈,第二章 进程管理,d.进程的运行环境,用户级环境: 由进程的代码、数据、用户栈和进程所占有的虚拟地址空间的共享内存等组成。 寄存器环境: 由程序计数器(PC)、处理器状态寄存器(PS)、栈指针和通用寄存器组成。 系统级环境: 静态部分:包括进程的(task_struct)表项和虚拟 地址到物理地址的映射结构. 动态部分:包括进程的核心栈和它的层次结构,第二章 进程管理,2.5.3 对进程的操作,a进程的创建 进程都是用系统调用fork()和clone()创建的。,b.进程的等待
21、,1)如果父进程没有子进程,则出错返回。,2)如果发现有一个终止的子进程,则取出子进程的进程号,把子进程的CPU使用时间等加到父进程上,释放子进程占用的task_struct和系统堆栈,以供新进程使用。,3)如果发现有子进程,但都不处于终止态,则父进程睡眠等待,以后由相应信号唤醒。,第二章 进程管理,c.进程的终止,1)撤消所有的信号量。,2)释放其所有的资源,包括存储空间、已打开的文件、工作目录、信号处理表等。,3)置进程状态为“终止态”(TASK_ZOMBIE).,4)向它的父进程发送子进程终止的信号。,5)执行进程调度。,第二章 进程管理,d.进程映像的更换,实现方法:由系统调用execve() 实现的,功能:用一个可执行文件的副本来覆盖该进程的内存空间。,2.5.4 进程同步和通信,a.信号量,b.管道(Pipe),c.共享内存,d.接插口(Socket),