Windows操作系统 处理机管理(上)解析课件.ppt
进程和进程控制线程进程互斥和同步进程间通信死锁问题处理器调度,第三章 处理机管理(上),进程和进程控制,进程的定义和描述进程的状态转换进程控制Windows的进程管理,进程的定义和描述,进程的定义,一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程。,进程的特征,动态性具有动态的地址空间独立性各进程的地址空间相互独立并发性宏观上各进程同时运行结构化进程的地址空间是结构化的,进程和进程控制,进程与程序的区别,进程是动态的,程序是静态的:程序是有序代码的集合;进程是程序的执行。通常进程不可在计算机之间迁移;而程序通常对应着文件,是静态的,可以复制。进程是暂时的,程序的永久的:进程是一个状态变化的过程,程序可长久保存。进程与程序的组成不同:进程的组成包括程序、数据和进程控制块(即进程状态信息)。进程与程序的对应关系:通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可包括多个程序。,进程的定义和描述,进程和进程控制,进程控制块,每个进程在OS中的登记表项(可能有总数目限制),OS据此对进程进行控制和管理(PCB中的内容会动态改变)处于核心段,通常不能由应用程序自身的代码来直接访问,而要通过系统调用访问,进程控制块(PCB, process control block)是由OS维护的用来记录进程相关信息的一个数据结构。,进程和进程控制,进程的定义和描述,进程控制块的内容,进程描述信息:进程标识符(process ID),唯一,通常是一个整数;进程名,通常基于可执行文件名;用户标识符(user ID);进程组 (process group)进程控制信息:当前状态;优先级(priority);代码执行入口地址;程序的外存地址;运行统计信息(执行时间、页面调度);阻塞原因资源占用信息:虚拟地址空间的现状、打开文件列表CPU现场保护结构:寄存器值(通用、程序计数器PC、状态PSW,地址包括栈指针),进程和进程控制,进程的定义和描述,PCB的组织方式,链表:同一状态的进程其PCB成一链表,多个状态对应多个不同的链表。各状态的进程形成不同的链表:就绪链表、阻塞链表索引表:同一状态的进程归入一个index表(由index指向PCB),多个状态对应多个不同的index表。各状态的进程形成不同的索引表:就绪索引表、阻塞索引表,进程和进程控制,进程的定义和描述,进程上下文(context),用户级上下文:进程的用户地址空间(包括用户栈各层次),包括用户正文段、用户数据段和用户栈;寄存器级上下文:程序寄存器、处理机状态寄存器、栈指针、通用寄存器的值;系统级上下文:静态部分(PCB和资源表格)动态部分:核心栈(核心过程的栈结构,不同进程在调用相同核心过程时有不同核心栈),进程上下文是对进程执行活动全过程的静态描述。进程上下文由进程的用户地址空间内容、硬件寄存器内容及与该进程相关的核心数据结构组成。,进程和进程控制,进程的定义和描述,五状态进程模型,五状态进程模型(状态转换),进程的状态转换,进程在从创建到终止的全过程中一直处于一个不断变化的过程, 为了刻画进程的这个变化过程,操作系统把进程分成若干种状态,进程和进程控制,状态,新建状态(New):进程刚创建,但还不能运行(一种可能的原因是OS对并发进程数的限制);OS在进程新建状态的工作:分配和建立PCB表项、建立资源表格(如打开文件表)并分配资源,加载程序并建立地址空间表。结束状态(Exit):进程已结束运行.回收除PCB之外的其他资源,并让其他进程从PCB中收集有关信息(如记帐,将退出码exit code传递给父进程)。,进程的状态转换,五状态进程模型,进程和进程控制,运行状态(Running):占用处理机资源并运行;处于此状态的进程的数目小于等于CPU的数目。 在没有其他进程可以执行时(如所有进程都在阻塞状态),通常会自动执行系统的idle进程(相当于空操作)。就绪状态(Ready):进程已获得除处理机外的所需资源,等待分配处理机资源;只要分配CPU就可执行。可以按多个优先级来划分队列,如:时间片用完低优,I/O完成中优,页面调入完成高优阻塞状态(Blocked):由于进程等待某种条件(如I/O操作或进程同步),在条件满足之前无法继续执行。在该事件发生前即使把处理机分配给该进程,也无法运行。如:等待I/O操作的完成。,进程的状态转换,五状态进程模型,进程和进程控制,进程状态转换,创建(Create)新进程:创建一个新进程,以运行一个程序。提交(Admit):收容一个新进程,进入就绪状态。由于性能、内存、进程总数等原因,系统会限制并发进程总数。调度运行(Dispatch):从就绪进程表中选择一个进程,进入运行状态;释放(Release):由于进程完成或失败而中止进程运行,进入结束状态;运行到结束:分为正常退出Exit和异常退出abort(执行超时或内存不够,非法指令或地址,I/O失败,被其他进程所终止)就绪或阻塞到结束:可能的原因有:父进程可在任何时间中止子进程;,进程的状态转换,五状态进程模型,进程和进程控制,超时(Timeout):由于用完时间片或高优先进程就绪等导致进程暂停运行;事件等待(Event Wait):进程要求的事件未出现而进入阻塞;可能的原因包括:申请系统服务或资源、通信、I/O操作等;事件发生(Event Occurs):进程等待的事件发生;如:I/O操作完成、申请资源成功等;,进程的状态转换,五状态进程模型,进程和进程控制,五状态进程模型没有区分进程地址空间位于内存还是外存,而在操作系统中引入虚拟存储管理技术后,需要进一步区分进程的地址空间状态。 这个问题的出现是由于进程优先级的引入,一些低优先级进程可能等待较长时间,从而被对换至外存。这样做的目的是:提高处理机效率:就绪进程表为空时,有空闲的内存空间来提交新进程,以提高处理机效率;为运行进程提供足够内存:资源紧张时,暂停某些进程,如:CPU繁忙(或实时任务执行),内存紧张用于调试:在调试时,挂起被调试进程(从而对其地址空间进行读写),挂起进程模型,进程的状态转换,进程和进程控制,单挂起进程模型,挂起进程模型,进程的状态转换,进程和进程控制,双挂起进程模型,挂起进程模型,进程的状态转换,进程和进程控制,Admit,Running,Ready,Suspend,Exit,Ready,Blocked,Dispatch,Timeout,Event,Wait,Event,Occurs,Release,Blocked,Suspend,Suspend,New,Event,Occurs,Activate,Suspend,Activate,Admit,Suspend,就绪状态(Ready):进程在内存且可立即进入运行状态;阻塞状态(Blocked):进程在内存并等待某事件的出现;阻塞挂起状态(Blocked, suspend):进程在外存并等待某事件的出现;就绪挂起状态(Ready, suspend):进程在外存,但只要进入内存,即可运行;,挂起进程模型,进程的状态转换,状态,进程和进程控制,挂起(Suspend):把一个进程从内存转到外存;可能有以下几种情况:阻塞到阻塞挂起:没有进程处于就绪状态或就绪进程要求更多内存资源时,会进行这种转换,以提交新进程或运行就绪进程;就绪到就绪挂起:当有高优先级阻塞(系统认为会很快就绪的)进程和低优先级就绪进程时,系统会选择挂起低优先级就绪进程;运行到就绪挂起:对抢先式操作系统,当有高优先级阻塞进程因事件出现而进入就绪状态时,系统可能会把运行进程转到就绪挂起状态;,挂起进程模型,进程的状态转换,状态转换,进程和进程控制,Running,Ready,Suspend,Ready,Blocked,Dispatch,Timeout,Event,Wait,Event,Occurs,Blocked,Suspend,Suspend,Event,Occurs,Activate,Suspend,Activate,Suspend,激活(Activate):把一个进程从外存转到内存;可能有以下几种情况:就绪挂起到就绪:没有就绪进程或挂起就绪进程优先级高于就绪进程时,会进行这种转换;阻塞挂起到阻塞:当一个进程释放足够内存时,系统会把一个高优先级阻塞挂起进程激活, 系统认为会很快出现所等待的事件;,挂起进程模型,进程的状态转换,状态转换,进程和进程控制,Running,Ready,Suspend,Ready,Blocked,Dispatch,Timeout,Event,Wait,Event,Occurs,Blocked,Suspend,Suspend,Event,Occurs,Activate,Suspend,Activate,Suspend,事件发生(Event Occurs):进程等待的事件发生,可能的情况有:阻塞到就绪:针对内存进程的事件发生;阻塞挂起到就绪挂起:针对外存进程的事件发生;,挂起进程模型,进程的状态转换,进程和进程控制,状态转换,Running,Ready,Suspend,Ready,Blocked,Dispatch,Timeout,Event,Wait,Event,Occurs,Blocked,Suspend,Suspend,Event,Occurs,Activate,Suspend,Activate,Suspend,收容(Admit):收容一个新进程,进入就绪状态或就绪挂起状态。进入就绪挂起的原因是系统希望保持一个大的就绪进程表(挂起和非挂起);,挂起进程模型,进程的状态转换,进程和进程控制,状态转换,Admit,Running,Ready,Suspend,Ready,Dispatch,Timeout,New,Suspend,Activate,Admit,Suspend,双挂起进程模型,挂起进程模型,进程的状态转换,进程和进程控制,Admit,Running,Ready,Suspend,Exit,Ready,Blocked,Dispatch,Timeout,Event,Wait,Event,Occurs,Release,Blocked,Suspend,Suspend,New,Event,Occurs,Activate,Suspend,Activate,Admit,Suspend,进程控制,进程控制, 就是操作系统使用一些具有特定功能的程序段来创建与撤消进程以及完成进程状态的转换, 从而达到多个进程高效率地并发执行和协调,实现资源共享.进程控制主要体现在进程的创建与撤消,以及进程的阻塞与唤醒。 操作系统对进程的控制是依据用户命令和系统状态来决定的。用户可在一定程序上对进程的状态进行控制。,具有特定功能的程序段-原语,进程和进程控制,进程控制,原语(primitive):由若干条指令构成的“原子操作(atomic operation)”过程,作为一个整体而不可分割要么全都完成,要么全都不做。许多系统调用就是原语。,注意:系统调用并不都是原语。进程A调用read(),因无数据而阻塞,在read()里未返回。然后进程B调用read(),此时read()被重入。系统调用不一定一次执行完并返回该进程,有可能在特定的点暂停,而转入到其他进程。,进程和进程控制,进程控制,进程和进程控制,创建原语,进程的存在以PCB为标志, 所以创建新进程的主要任务就是为进程建立PCB, 将调用者提供的有关信息填入PCB的各数据项中,开始,分配PCB空间,将有关信息填入PCB的数据项,将PCB送入相应状态PCB链表,结束,进程控制,进程和进程控制,撤消原语,进程完成其任务之后, 系统应及时回收它占有的资源,开始,搜索PCB链表,释放该进程所占有的资源,释放PCB结构本身,结束,有此PCB,异常处理,No,Yes,进程控制,进程和进程控制,阻塞原语,开始,将CPU当前状态存入PCB,设置进程状态为阻塞状态,将PCB置入阻塞队列,转处理机调度,进程控制,进程和进程控制,唤醒原语,开始,从阻塞队列删除该PCB,设置进程状态为就绪状态,将PCB置入就绪队列,转处理机调度,Windows 的进程管理,Windows 的进程由执行体进程块EPROCESS表示, EPROCESS即进程对象。进程对象的属性:PID, PCB, Access Token, Base Priority, 句柄表,指向进程环境块PEB的指针,亲和处理器集合等在Windows 中,PCB也称为内核进程块KPROCESS,即内核进程对象EPOCESS和KPROCESS位于内核空间,PEB位于用户空间,进程和进程控制,Windows的进程结构,Windows 的进程管理,进程和进程控制,进程创建,CreateProcess()函数用于创建新进程及其主线程,以执行指定的程序。新进程可以继承:打开文件的句柄、各种对象(如进程、线程、信号量、管道等)的句柄、环境变量、当前目录)每个句柄在创建或打开时能指定是否可继承;新进程不能继承:优先权类、内存句柄、DLL模块句柄CREATE_NEW_CONSOLE表示新进程有一个新的控制台CREATE_NEW_PROCESS_GROUP表示新进程是一个新的进程组的根。,Windows 的进程管理,进程和进程控制,进程退出,ExitProcess()或TerminateProcess(),则进程包含的线程全部终止;ExitProcess()终止一个进程和它的所有线程;它的终止操作是完整的,包括关闭所有对象句柄、它的所有线程等;TerminateProcess()终止指定的进程和它的所有线程;它的终止操作是不完整的(如:不向相关DLL通报关闭情况),通常只用于异常情况下对进程的终止。,Windows 的进程管理,进程和进程控制,与进程管理相关的内核变量,PsActiveProcessHead进程链表头PsInitialSystemProcess系统进程(系统线程的宿主)PsIdleProcess空闲进程,Windows 的进程管理,进程和进程控制,线程,线程的引入操作系统对线程的实现方式进程和线程的比较Windows的线程,如果说在操作系统中引入进程是为了使多个程序能够并发执行,提高资源利用率和系统吞吐量,那么引入线程(THREAD)的目的则是减少程序并发执行所付出的时空开销来,进一步提高系统的并发程度。,线程,线程的引入,进程: 资源(存储器、文件)分配单位和CPU调度/分派单位。由于进程是资源拥有者,因而在创建、终止、切换过程中,系统必须为之付出较大的时空开销。正因为如此,系统中并发执行的进程的数目不宜过多,进程切换才频率也不宜过高,这样就限制了系统的并发程度。解决这一问题的思路:将进程的两个基本属性分开,由操作系统分别处理线程概念的引入在支持线程的操作系统中,进程只作为资源分配单位,而线程则作为CPU调度/分派单位。,线程,线程的引入,线程:作为CPU调度单位,只拥有必不可少的资源,如:线程状态、寄存器上下文和栈同样具有就绪、阻塞和执行三种基本状态线程的优点:减小并发执行的时间和空间开销(线程的创建、退出和调度),因此容许在系统中建立更多的线程来提高并发程度。线程的创建时间比进程短;线程的终止时间比进程短;同进程内的线程切换时间比进程短;由于同进程内线程间共享内存和文件资源,可直接进行不通过内核的通信;,线程,进程与线程的关系,线程,线程的引入,OS对线程的实现方式,内核维护进程和线程的上下文信息;线程切换由内核完成;一个线程发起系统调用而阻塞,不会影响其他线程的运行。时间片分配给线程,所以多线程的进程获得更多CPU时间。,依赖于OS核心,由内核完成创建和撤销。Windows 支持内核线程;,内核线程(kernel-level thread),线程,用户线程(user-level thread),用户线程的维护由应用进程完成;内核不了解用户线程的存在;用户线程切换不需要内核特权;用户线程调度算法可针对应用优化;,不依赖于OS核心,应用进程利用线程库提供的创建、同步、调度和管理线程的函数来控制用户线程。如:数据库系统Informix,图形处理Aldus PageMaker。调度由应用软件内部进行,通常采用非抢先式和更简单的规则。一个线程发起系统调用而阻塞,则整个进程在等待。时间片分配给进程,多线程则每个线程就慢。,线程,OS对线程的实现方式,进程和线程的比较,地址空间和其他资源(如打开文件):进程间相互独立,同一进程的各线程间共享某进程内的线程在其他进程不可见通信:进程间只能使用IPC线程间可以直接读写进程数据段(如全局变量)来进行通信也需要同步和互斥手段的辅助,以保证数据的一致性调度:线程上下文切换比进程上下文切换要快得多;,线程,线程切换和进程切换,线程,进程和线程的比较,Windows 的线程,线程,线程对象,Windows线程由执行体线程块ETHREAD表示,即线程对象,其中包含内核线程块KTHREAD, 即线程控制块TCB指向线程环境块TEB的指针ETHREAD和KTHREAD位于内核空间,TEB位于用户空间,Windows 的线程状态,线程,Windows 的线程,就绪状态(Ready):进程已获得除处理机外的所需资源,等待执行。,Windows 的线程状态,线程,Windows 的线程,备用状态(Standby):已选择好处理器,正等待上下文切换系统中每个处理器上只能有一个处于备用状态的线程。,Windows 的线程状态,线程,Windows 的线程,运行状态(Running):完成上下文切换,线程进入运行状态,直到内核抢先、时间片用完、线程终止或进入等待状态。,Windows 的线程状态,线程,Windows 的线程,等待状态(Waiting):线程等待某对象,以同步它的执行。等待结束时,根据优先级进入运行、就绪状态。,Windows 的线程状态,线程,Windows 的线程,过渡状态(Transition):线程在准备执行而其内核堆栈处于外存时,线程进入过渡状态;当其内核堆栈调回内存,线程进入就绪状态。,Windows 的线程状态,线程,Windows 的线程,终止状态(Terminated):线程执行完就进入终止状态。如执行体有一指向线程对象的指针,可将线程对象重新初始化。,Windows 的线程状态,线程,Windows 的线程,初始化状态(Initialized):线程创建过程中的线程状态;,与Windows线程的有关API,CreateThread()函数在调用进程的地址空间上创建一个线程,以执行指定的函数;返回值为所创建线程的句柄。ExitThread()函数用于结束本线程。SuspendThread()函数用于挂起指定的线程。ResumeThread()函数递减指定线程的挂起计数,挂起计数为0时,线程恢复执行。,线程,Windows 的线程,