您好,欢迎访问三七文档
第二章进程管理2.1进程的基本概念2.2进程控制2.3进程同步2.4经典进程的同步问题2.6进程通信2.7线程2.1进程的基本概念进程是操作系统中最基本、最重要的概念.为什么引入“进程”概念?程序≠进程?直接原因:多道程序系统出现手段:程序的并发执行若干个程序同时在系统中执行,这些程序的执行在时间上是重叠的,一个程序的执行尚未结束,另一个程序的执行已经开始目的:充分利用系统资源=引入“进程”原因:描述和管理并发执行为什么引入“进程”?程序顺序执行程序顺序执行:#include“myhead.h”intmain(intargc,char*argv[]){……while(TRUE){从终端等待读入数据到i;根据i数据进行计算;取出计算结果并写到磁带上;}return0;}特征:顺序性,封闭性,可再现性I1C1P1I2C2P2ICP程序:指令或语句序列,体现了某种算法,所有程序是顺序的顺序环境:在计算机系统中只有一个程序在运行,这个程序独占系统中所有资源,其执行不受外界影响为什么引入“进程”?程序段并发执行I1C1P1程序段并发执行:ICPT程序段ICP#include“myhead.h”intmain(intargc,char*argv[]){……while(TRUE){从终端等待读入数据到i;根据i数据进行计算;取出计算结果并写到磁带上;}return0;}I2C2P2I3C3P3间断性失去封闭性不可再现性可再现性并发性某种封闭?进程(1)进程是程序的一次执行。(2)进程是一个程序及其数据在处理机上顺序执行时所发生的活动。(3)进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。在引入了进程实体的概念后,我们可以把传统OS中的进程定义为:“进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位”。进程特征结构特征:由程序段、数据段、进程控制块三部分组成动态性:进程是程序的执行并发性:多个进程可同存于内存中,能在一段时间内同时运行独立性:独立运行的基本单位,独立获得资源和调度的基本单位。异步性:各进程按各自独立的不可预知的速度向前推进进程同程序的比较?程序是指令的有序集合,其本身没有任何运行的含义,是一个静态的概念。而进程是程序在处理机上的一次执行过程,它是一个动态的概念。程序可以作为一种软件资料长期存在,而进程是有一定生命期的。程序是永久的,进程是暂时的。进程更能真实地描述并发,而程序不能进程具有创建其他进程的功能,而程序没有同一程序同时运行于若干个数据集合上,它将属于若干个不同的进程。也就是说同一程序可以对应多个进程进程的分类:系统进程用户进程(系统进程优先于用户进程)进程结构进程实体=程序段+相关数据段+PCB(进程控制块)进程:是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位进程映象(进程结构)用户程序段用户数据段进程控制块PCB(执行上下文)控制进程所需的数据(进程属性),包括:进程标识符信息(内、外、用户等)处理器状态信息(寄存器、PC、PSW、堆栈指针等)进程调度信息(状态、优先级、事件、其它信息)进程控制信息(程序/数据外存地址、资源清单、PCB链接指针、同步与通信机制等)进程控制块(ProcessControlBlock)作用:是使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位,一个能与其它进程并发执行的进程。概念:系统为了管理进程设置的一个专门的数据结构,用它来记录进程的外部特征,描述进程的运动变化过程OS利用PCB来控制和管理进程。PCB是系统感知进程存在的唯一标志。进程与PCB是一一对应的。进程控制块中的信息进程标识符系统给每个进程定义了一个标识该进程的非负整数,称作进程标识符。当某一进程终止后,其标识符可以重新用作另一进程的标识符。不过,一个标识符所代表的进程在任何时刻都是惟一的。处理机状态处理机的各种寄存器中的内容。以便于进程从断点继续执行。①通用寄存器②指令计数器③程序状态字PSW④用户栈指针进程控制块中的信息进程调度信息与进程调度和进程对换有关,包括:①进程状态,②进程优先级,③所需的其它信息,④事件,即阻塞原因。进程控制信息①程序和数据的地址②进程同步和通信机制③资源清单④链接指针进程控制块中的信息进程标识符内部标识符。OS为每个进程赋予惟一的数字标识符,系统使用。外部标识符。由创建者提供,由用户(进程)在访问该进程时使用。处理机状态处理机的各种寄存器中的内容。以便于进程从断点继续执行。①通用寄存器②指令计数器③程序状态字PSW④用户栈指针进程调度信息与进程调度和进程对换有关,包括:①进程状态,②进程优先级,③所需的其它信息,④事件,即阻塞原因。进程控制信息①程序和数据的地址②进程同步和通信机制③资源清单④链接指针进程控制块的组织方式PCB表:系统把所有PCB组织在一起,并把它们放在内存的固定区域,就构成了PCB表PCB表的大小决定了系统中最多可同时存在的进程个数,称为系统的并发度(注:多道程序中的多道与系统并发度不同)PCB怎么组织在一起的?PCB表的数据结构?进程控制块的组织方式1)链接方式PCB14PCB2PCB3PCB4PCB5PCB6PCB7PCB8PCB93087901执行指针就绪队列指针阻塞队列指针空闲队列指针…1、相同状态的进程PCB组成一个链表,不同状态对应多个不同的链表2、就绪链表、阻塞链表进程控制块的组织方式2)索引方式执行指针就绪索引表PCB1PCB2PCB3PCB4PCB5PCB6PCB7阻塞索引表就绪表指针阻塞表指针对具有相同状态的进程,分别设置各自的PCB索引表,表明PCB在PCB表中的地址回顾为什么引入“进程”概念?进程的特征、定义进程控制块的作用、包括的信息、组织形式目的:“进程”概念进程的状态及转换进程有三种基本状态(不同系统设置的进程状态数目不同)。就绪阻塞执行时间片完进程调度I/O完成I/O请求就绪状态(Ready)运行状态(Running)阻塞状态(Wait/Blocked)执行态(Running):进程占有CPU,并在CPU上执行就绪态(Ready):一个进程已经具备执行条件,但由于无CPU暂时不能执行的状态(当调度给其CPU时,立即可以执行)阻塞态(Blocked):等待态、挂起态、封锁态冻结态、睡眠态指进程因等待某种事件的发生而暂时不能执行的状态(即使CPU空闲,该进程也不可执行)执行就绪阻塞进程的状态及其转换进程状态转换:在进程执行过程中,由于进程自身进展情况及外界环境的变化,这三种基本状态可以依据一定的条件相互转换就绪—执行执行—就绪执行—阻塞阻塞—就绪进程转换就绪--执行调度程序选择一个新的进程执行执行--就绪执行进程用完了时间片执行进程被中断,因为一高优先级进程处于就绪状态进程转换(续1)执行--阻塞当一进程必须等待时OS尚未完成服务对一资源的访问尚不能进行初始化I/O且必须等待结果等待某一进程提供输入(IPC)阻塞--就绪当所等待的事件发生时其他状态:新状态,终止状态挂起状态,将就绪/阻塞分活动,静止(调节负载,对换,父进程,操作系统,终端用户)新建状态OS已完成为创建一进程所必要的工作已构造了进程标识符已创建了管理进程所需的表格但还没有允许成为就绪进程(尚未同意)因为资源有限终止状态终止后进程移入该状态它不再有执行资格表格和其它信息暂时由辅助程序保留五状态进程模型七状态进程模型活动挂起事件发生事件发生等待事件挂起调度超时释放活动挂起新状态转换(中期调度)活动阻塞--静止阻塞(挂起)当所有进程都阻塞,OS会安排空间让一就绪进程进入内存静止阻塞--静止就绪(释放)当等待的事件发生时(状态信息已在OS中)静止就绪--活动就绪(激活)当内存中没有就绪进程时活动就绪--静止就绪(挂起,较少见)当没有被阻塞的进程,而为了性能上的考虑,必须释放一些内存时图2-6具有挂起状态的进程状态图活动就绪静止就绪执行挂起激活释放挂起活动阻塞静止阻塞挂起激活释放请求I/O某进程在运行过程中需要等待从磁盘上读入数据,此时该进程的状态将()。A、从就绪变为运行B、从运行变为就绪C、从运行变为阻塞D、从阻塞变为就绪有没有以下这些状态转换,为什么?1)等待—运行;2)就绪—等待如果系统中有N个进程,执行的进程最多几个,最少几个;就绪进程最多几个最少几个;阻塞进程最多几个,最少几个?2.2进程控制进程控制就是对系统中的所有进程实施管理,创建、撤消进程以及完成进程各状态之间的转换。进程控制一般由原语来实现。原语primitiveoratomicaction定义:是一种特殊的系统功能调用,它可以完成一个特定的功能,其特点是原语执行时不可被中断。特点:原子操作,不可分割,要么全做,要么全不做。由若干多机器指令构成的完成某种特定功能的一段程序,它的执行必须是连续的,在执行过程中不允许被中断。常用的进程控制原语创建原语终止原语阻塞原语、唤醒原语fork,execexitwait系统调用?进程树?进程树DEFGHBCIJKLMA父子进程:继承资源;归还资源。进程树在UNIX系统中,只有0进程是在系统引导时被创建的。在系统初启时由0进程利用fork()创建1进程,以后0进程变成对换进程,1进程成为系统中的始祖进程。系统中除0进程外的所有进程都是用fork()创建的。进程创建-原因系统内核需要:用户登录,作业调度,提供服务用户应用请求:进程自己要求创建,如父进程创建子进程,创建输入进程、处理进程、输出进程并发执行,以加速任务完成。进程创建-过程1.申请空白PCB,赋予一个进程内部标识符2.为新进程分配资源如内存3.初始化进程控制块4.将新进程插入就绪队列思考为什么创建进程要用原语来实现?fork():创建一个新进程的函数参数定义:intfork()系统调用格式:pid=fork()fork()返回值:0,0,-1用户使用系统调用fork创建一个进程。核心为完成系统调用fork要进行几步操作。(1)分配新的内存块和内核数据结构(2)复制原来的进程到新的进程(3)向运行进程集添加新的进程(4)将控制返回给两个进程PC…..pid=fork();if(pid==0)执行子进程代码;elseif(pid0)执行父进程代码;else创建失败处理;fork()调用前父进程PC…..pid=fork();if(pid==0)执行子进程代码;elseif(pid0)执行父进程代码;else创建失败处理;其它代码;PC…..pid=fork();if(pid==0)执行子进程代码;elseif(pid0)执行父进程代码;else创建失败处理;其它代码;fork()调用后父进程子进程程序fork函数实例#includestdio.h#includeunistd.hmain(){pid_tpid;printf(“nowonlyoneprocess\n”);printf(“callingfork…\n”);pid=fork();if(!pid)printf(“Iamachild\n”);elseif(pid0)printf(“I’mtheparent,childhaspid%d\n”,pid);elseprintf(“Forkfail!\n”);}进程运行exec函数把一个新程序装入调用进程的内存空间,来改变调用进程的执行代码,从而形成新进程。如果exec调用成功,调用进程将被覆盖,然后从新程序的入口开始执行,这样就产生了一个新的进程,但是它的进程标识符与调用进程相同。这就是说,exec并没有建立一个与调用进程并发的新进程,而是用新进程取代了原来的进程。所以,在exec调用成功后,没有任何数据返回,这和fork是不一样的。它有六种调用的形式,随着系统
本文标题:2第2章进程管理
链接地址:https://www.777doc.com/doc-3844674 .html