第二章进程的描述与控制2.2进程的描述(重点)2.3进程控制(重点)应用的提出:同时进行多个任务的需求举例•编辑文档•运行程序•网上浏览•CD音乐欣赏问题:单处理机如何同时执行多个任务?解决需求采用的技术CPU分时:每个程序运行相等的时间片,轮流运行轮转。程序A程序B程序CABCABCCPUt微观上串行并发程序:程序A程序B宏观上并行程序C问题:怎样才能做到并发??如:当一个程序的时间片到,它必须放弃CPU,等待下一个时间片;而当下一次调度它时,它应该从哪里继续执行呢?再如:当一个程序请求I/O时,此时操作系统将CPU分配给另一个程序;外设I/O结束时,OS如何知道这个I/O是哪个程序请求的?OS应该结束哪个程序的等待状态,使它重新获得CPU继续运行等等…这些都是程序员无法预知,是无法通过程序自身去解决的问题。显然是操作系统的责任。终于找到解决的方法了----进程!!!!必须为执行中的程序配置一个数据结构来描述其动态执行过程中出现的种种信息,以便操作系统进行管理和控制,这个数据结构就是进程控制块PCB(ProcesscontrolBlock)。程序PCB+进程task_struct结构在内核linux-2.4.16/linux/include/linux/sched.h中定义2.2.1进程的定义和特征1.进程的特征1)结构特征从结构上看,进程实体至少包括:程序段、数据和进程控制块(PCB)。进程的组成程序代码PCB数据集合2)动态性进程是进程实体的一次执行过程(动态性),有一定的生命周期(由创建而产生,由调度而执行,由撤消而消亡)。程序则只是一组有序指令的集合,并存放于某种介质上,是静态的。5)异步性进程按各自独立的、不可预知的速度向前推进。3)并发性多个进程同存于内存中,且能在一段时间内同时运行。4)独立性进程是一个能独立运行,独立分配资源和独立接受调度的基本单位。较典型的进程定义有:(1)进程是程序的一次执行。(2)进程是一个程序及其数据在处理机上顺序执行时所发生的活动。(3)进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。在引入了进程实体的概念后,我们可以把传统OS中的进程定义为:“进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位”。2.2.2进程的基本状态及转换进程可能由于等待I/O操作、竞争资源、以及相互协作等原因产生了“走走停停”的动态性。因此,进程在生存期内至少处于三种基本状态之一:1.进程的三种基本状态(三态模型)进程的三种基本状态及其转换2)执行状态进程已获得CPU,其程序正在执行。1)就绪(Ready)状态进程已分配到除CPU以外的所有必要资源,只要再获得CPU,便可立即执行,此时的状态称为就绪状态。3)阻塞状态正在执行的进程由于发生某事件而暂时无法继续执行时,便放弃CPU而处于阻塞(等待)状态。就绪阻塞执行I/O请求终止思考:1.如果系统中有N个进程,运行的进程最多几个,最少几个;就绪进程最多几个最少几个;等待进程最多几个,最少几个?[解答]:在单处理机系统中,处于运行状态的进程最多为1个,最少为0个;处于就绪进程最多为N-1个,最少为0个;处于阻塞的进程最多为N个,最少为0个。(1)就绪—运行;(2)就绪—等待2.有没有这样的状态转换,为什么?[解答](1)(Y)(2)(N)就绪阻塞执行I/O请求终止终止创建许可保证进程调度必须在创建工作完成后进行等待操作系统善后处理,将PCB清零,返还给系统。2.创建状态和终止状态(五态模型)3.挂起状态在一些系统中增加了挂起状态1)引入挂起状态的原因(1)终端用户的请求。暂停进程的执行,修改程序。(2)父进程请求。挂起自己的子进程。(3)负荷调节的需要。把不重要的进程挂起,避免系统负荷较重。(4)操作系统的需要。检查资源使用情况等。挂起进程即把进程放在外存中活动就绪执行激活终止静止就绪活动阻塞静止阻塞挂起激活挂起就绪阻塞执行I/O请求终止1)引入挂起状态的状态转换比较:增加了几种转换?2.2.4进程管理中的数据结构OS为了便于对计算机中的各类资源的使用和管理,必须用数据结构记录各种资源的使用及各类进程运行情况的信息,PCB是非常重要的一个数据结构。1)进程控制块的作用OS对每个进程定义了一个数据结构—PCB。记录了操作系统所需的、用于描述进程的当前情况以及控制进程运行的全部信息。当系统创建一个新进程,为它建立一个PCB,进程结束时又回收其PCB,进程也随之消亡。PCB是进程存在的唯一标志。因为PCB经常被系统访问,所以应常驻内存。1.进程控制块2)进程控制块中的信息(主要)标识符信息进程标识符进程名进程号用户标识用户名用户号家族联系父进程子进程处理机状态信息(现场)通用寄存器指令计数器程序状态字用户栈指针进程调度信息进程状态进程优先数(级/权)等待原因调度算法参数等进程控制信息程序和数据的地址进程同步和通信机制资源清单链接指针注意:不同操作系统及同一操作系统的不同版本,其PCB中的信息随管理方式的不同而不同。标识符信息进程标识符进程名进程号用户标识用户名用户号家族联系父进程子进程为每一个进程赋予一个惟一的数字标识符,它通常是一个进程的序号,为了方便系统使用。由创建者提供,通常是由字母、数字组成,往往是由用户在访问该进程时使用。指示拥有该进程的用户为了描述进程的家族关系,还应设置父进程标识及子进程标识a)进程标识符处理机在运行时,许多信息都放在寄存器中,当处理机被中断时,所有这些信息都必须保存在PCB中,以便该进程重新执行时,能从断点继续执行。处理机状态信息(现场)通用寄存器指令计数器程序状态字用户栈指针它们是用户程序可以访问的,用于暂存信息存放要访问的下一条指令的地址其中含有状态信息,如条件码、执行方式、中断屏蔽标志等存放过程和系统调用参数及调用地址b)处理机状态进程调度信息进程状态进程优先数(级/权)等待原因调度算法参数等c)进程调度信息指明进程的当前状态,作为进程调度和对换时的依据描述进程使用处理机的优先级别的一个整数进程调度所需的其他信息,如等待CPU的时间总和。由执行状态转变为阻塞状态所等待发生的事件进程控制信息程序和数据的地址进程同步和通信机制资源清单链接指针d)进程控制信息指进程的程序和数据所在的内存或外存地(首)址如消息队列指针、信号量等除CPU以外的、进程所需的全部资源及已经分配到该进程的资源的清单本进程(PCB)所在队列中的下一个进程的PCB的首地址3)进程控制块的组织方式在一个系统中,可有数十个、数百个乃至数千个PCB,为了有效的管理,常用的组织方式有:a)线性方式将系统中所有的PCB组织在一张线性表中,该表的首地址存放在内存的一个专用区域中。因每次查找都需要扫描整张表,适合进程不多的系统。PCB1PCB2PCB3...PCBnb)链接方式通常将具有相同状态进程的PCB链接在一起,形成就绪队列、阻塞队列以及空闲队列。PCB14PCB2PCB3PCB4PCB5PCB6PCB7PCB8PCB93087901执行指针就绪队列指针阻塞队列指针空闲队列指针…c)索引方式执行指针就绪索引表PCB1PCB2PCB3PCB4PCB5PCB6PCB7阻塞索引表就绪表指针阻塞表指针索引方式;根据进程的不同状态建立几个索引表,如就绪索引表、阻塞索引表、空闲表等。索引表中的每一项指示一个PCB在内存的首地址,而各索引表的起始地址存放在内存的专用指示单元中。实例简介——Linux进程在Linux内核中,代表一个进程的内核数据结构是structtask_struct,它就是前面提到的具有实际意义的进程控制块,Linux把它命名为task_struct结构,原代码见include/linux/sched.h文件。structtask_struct{……}传统上,这样的数据结构被叫做进程控制块PCB(processcontrolblaock)Linux定义了六种进程状态(注意:不同的版本状态个数不同):TASK_RUNNING(运行态)TASK_INTERRUPTIBLE(可中断阻塞态)TASK_UNINTERRUPTIBLE(不可中断阻塞态)TASK_ZOMBIE(僵死态)TASK_STOPPED(停止态)TASK_DEAD(死亡态)TASK_RUNNING状态:该状态表示进程要么在CPU上执行,要么在就绪队列中等待调度程序调度执行。TASK_INTERRUPTIBLE状态:(可中断状态)进程处于某个等待队列中,它能够被信号(signal)或中断唤醒。等待资源的请求满足时,也被唤醒。TASK_UNINTERRUPTIBLE状态:(不可中断状态)进程处于某个等待队列中,不能被信号或中断唤醒,只有等待的资源被满足时才被唤醒。例如当进程打开一个设备文件时,使用TASK_UNINTERRUPTIBLE.TASK_ZOMBIE状态:(僵死状态)进程已经停止,但还没有释放进程控制块。TASK_STOPPED状态:该状态表示进程的执行被暂停。例如正在接受调试的进程处于这种状态。TASK_DEAD状态:处于僵死进程的控制块由其父进程回收后的状态。TASK_RUNNING就绪TASK_INTERRUPTIBLE浅度睡眠TASK_UNINTERRUPTIBLE深度睡眠TASK_STOPPED暂停TASK_ZOMBIE僵死占有CPU执行do_exit()schedule()ptrace()时间片耗尽schedule()等待资源到位sleep_on()schedule()等待资源到位interruptible_sleep_on()schedule()资源到位wake_up_interruptible()或收到信号wake_up()资源到位wake_up()收到信号SIGCONTwake_up()死亡回收进程控制是进程管理中最基本的功能,包括:1、创建一个进程2、终止一个进程3、进程运行中的状态转换由OS内核实现,即操作系统的核心。OS内核包含的功能有:1.支撑功能:中断处理、时钟管理和原语操作。2.资源管理功能:进程管理、存储器管理、设备管理、文件管理。2.3进程控制为防止OS本身及关键数据遭到应用程序的有意或无意破坏,通常将处理机的执行状态分成系统态(管态、内核态)和用户态(目态、用户态)。管态:特权较高,能执行一切指令,访问所有寄存器和存储区,OS在管态下运行。目态:特权较低,仅执行规定指令,访问指定的寄存器和存储区,应用程序在目态下运行。管态和目态2.3进程控制2.3.1进程的创建1.进程图(ProcessGraph)进程在执行过程中,能通过系统调用创建多个新进程,创建进程的进程称为父进程,而新进程称为该进程的子进程。这些新进程仍然可以再创建其它进程,从而形成了进程树。进程树DEFGHBCIJKLMA2.什么时候需要创建进程???为了并发,用户程序可以创建多个进程应用请求例:提供文件打印提供服务终端用户登陆到系统用户登陆当操作系统准备接纳新任务时,将调入选中的若干作业作业调度说明事件由用户创建由系统内核创建3.进程的创建(CreationofProgress)入口(进程标识)申请空白PCB插入就绪队列初始化PCB:初始化标识信息初始化处理机状态信息初始化处理机控制信息申请程序段、数据段空间、其它资源创建失败申请成功?PCB返回否是就绪队列PCB进程建立以后并不是立即投入运行,而是进入就绪队列。这是因为被建立进程的父进程并没有安排进程运行的资格。被建立进程的运行靠进程调度来实现。PCB入队列和出队列不一定完全按照FIFO的次序,这与操作系统对进程的管理策略有关父进程创建子进程,之前必须准备好如下参数:进程标识符、进程优先级以及进程程序的起始地址。创建进程必须调用创建原语来实现。原语(primitive):由若干条指令构成的“原子操作”,要么全做,要么全不做。操作系统的程序所完成的是系统的核心功能。在程序的运行过程中,如果发生中断,就有可能导致整个系统的错误,因此,操作系统中的内核部分的程序都是以原语的形