资源预览内容
第1页 / 共136页
第2页 / 共136页
第3页 / 共136页
第4页 / 共136页
第5页 / 共136页
第6页 / 共136页
第7页 / 共136页
第8页 / 共136页
第9页 / 共136页
第10页 / 共136页
亲,该文档总共136页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
2.3 进程及其实现2.3.1 进程的定义和属属性2.3.2 进程的状态和转换2.3.3 进程的描述2.3.4 进程切换与模式切换2.3.5 进程的控制2.3.6 实例研究:UNIX SVR4进程管理2.3.7 实例研究:Linux进程管理2.3.1 进程的定义和性质(1) 进进程程是一个可并发执行的具有独立功能的程序关于某个数据集合的一次执行过程,也是操作系统进行资源分配和保护的基本单位 。 进程的定义和性质(2)w进程是操作系统中最基本、重要的概念。是多道程序系统出现后,为了刻画系统内部出现的动态情况,描述系统内部各道程序的活动规律引进的一个概念,所有多道程序设计操作系统都建立在进程的基础上。进程的定义和性质(3) 操作系统引入进程的概念w从理论角度看,是对正在运行的程序过程的抽象;w从实现角度看,是一种数据结构,目的在于清晰地刻划动态系统的内在规律,有效管理和调度进入计算机系统主存储器运行的程序。 进程的属性 结构性: 共享性: 动态性: 独立性: 制约性: 并发性:操作系统为什么要引入进程概念?w原因1-刻画系统的动态性,发挥系统的并发性,提高资源利用率。原因2-它能解决系统的“共享性”,正确描述程序的执行状态。 w“可再用” 程序 w“可再入” 程序w“可再入”程序具有的性质“可再入” 程序举例(1)w编译程序P编译源程序甲,从A点开始工作,执行到B点时需将信息记到磁盘上,且程序P在B点等待磁盘传输。w为提高系统效率,利用编译程序的“可再入”性,让编译程序P再为源程序乙进行编译,仍从A点开始工作。“可再入” 程序举例(2) 编译程序P(P的入口,处理源程序乙)(P把源程序甲的信息记盘等磁盘完成)AB源程序甲源程序乙“可再入” 程序举例(3)w现在怎样来描述编译程序P的状态呢?w称它为在B点等待磁盘传输状态,还是称它为正在从A点开始执行的状态? w把编译程序P,与服务对象联系起来,P为甲服务就说构成进程P甲,P为乙服务则构成进程P乙。“可再入” 程序举例(4)w两个进程虽共享程序P,但它们可同时执行且彼此按各自的速度独立执行。可见程序与计算(程序的执行)不再一一对应,w进程是一个既能用来共享资源,又能描述程序并发执行过程的一个基本单位。2.3.2 进程的状态和转换三态模型三态模型(1)(1)w一个进程从创建而产生至撤销而消亡的整个生命周期,可用一组状态加以刻划,,按进程在执行过程中的状况至少定义三种不同的进程状态:三态模型(2)三种不同的进程状态 运行态(running): 就绪态(ready): 等待态(blocked):三态模型三态模型(3)(3)进程三态模型及其状态转换 运行态就绪态等待态选中落选出现等待事件等待事件结束三态模型(4)引起进程状态转换的具体原因 运行态等待态:等待使用资源或某事件发生 ; 等待态就绪态:资源得到满足或事件发生 ; 运行态就绪态:运行时间片到;出现有更高优先权进程。 就绪态运行态:CPU空闲时选择一个就绪进程。五态模型(1) 进程五态模型及其转换运行态就绪态等待态选中落选出现等待事件等待事件结束新建态终止态 五态模型(2)新建态w新新建建态态对应进程刚被创建的状态。为一个新进程创建必要的管理信息,它并没有被提交执行,而是在等待操作系统完成创建进程的必要操作。五态模型(3)终止态w进程的终止,首先,等待操作系统进行善后,然后,退出主存。w进入终止态的进程不再执行,但依然临时保留在系统中等待善后。一旦其他进程完成了对终止态进程的信息抽取之后,系统将删除该进程。 五态模型(4)进程状态转换的具体原因(1) NULL新建态:创建一个子进程。 新建态就绪态:系统完成了进程创建操作,且当前系统的性能和内存的容量均允许。 五态模型(5)进程状态转换的具体原因(2) 运行态终止态:一个进程到达自然结束点,或出现了无法克服的错误,或被操作系统所终结,或被其他有终止权的进程所终结。五态模型(6)进程状态转换的具体原因(3)w终止态NULL:完成善后操作。w就绪态终止态:某些操作系统允许父进程终结子进程。w等待态终止态:某些操作系统允许父进程终结子进程。进程的挂起(1) 为什么要有“挂起”状态? 由于进程的不断创建,系统资源已不能满足进程运行的要求,就必须把某些进程挂起(suspend),对换到磁盘镜像区中,暂时不参与进程调度,起到平滑系统操作负荷的目的。 进程的挂起(2) (1)系统中的进程均处于等待状态,需要把一些阻塞进程对换出去,腾出足够内存装入就绪进程运行。 (2)进程竞争资源,导致系统资源不足,负荷过重,需要挂起部分进程以调整系统负荷,保证系统的实时性或让系统正常运行。 进程的挂起(3) (3)定期执行的进程(如审计、监控、记账程序)对换出去,以减轻系统负荷。 (4)用户要求挂起自己的进程,以便进行某些调试、检查和改正。进程的挂起(4) (5)父进程要求挂起后代进程,以进行某些检查和改正。 (6)操作系统需要挂起某些进程,检查运行中资源使用情况,以改善系统性能;或当系统出现故障或某些功能受到破坏时,需要挂起某些进程以排除故障。 具有挂起功能的进程状态及其转换 挂起等待事件结束出现等待事件解除挂起挂起落选选中运行态就绪态等待事件结束终止态新建态挂起就绪态解除挂起挂起挂起等待态等待态提交提交具有挂起进程功能的进程状态 进程增加了两个新状态:w挂起就绪态(ready suspend)表明进程具备运行条件但目前在二级存储器中,当它被对换到主存才能被调度执行。w挂起等待态(blocked suspend) 表明进程正在等待某一个事件且在二级存储器中。具有挂起进程状态转换的具体原因(1) 等待态挂起等待态:当前不存在就绪进程,至少一个等待态进程将被对换出去成为挂起等待态; 挂起等待态挂起就绪态:引起进程等待的事件发生之后,相应的挂起等待态进程将转换为挂起就绪态。具有挂起进程状态转换的具体原因进程状态转换的具体原因(2)(2) 挂起就绪态就绪态:内存中没有就绪态进程,或挂起就绪态进程具有比就绪态进程更高的优先级,将把挂起就绪态进程转换成就绪态。 就绪态挂起就绪态:系统根据当前资源状况和性能要求,决定把就绪态进程对换出去成为挂起就绪态。挂起进程具有如下特征(1)该进程不能立即被执行。挂起进程可能会等待事件,但所等待事件是独立于挂起条件的,事件结束并不能导致进程具备执行条件。 挂起进程具有如下特征(2)进程进入挂起状态是由于操作系统、父进程或进程本身阻止它的运行。结束进程挂起状态的命令只能通过操作系统或父进程发出。2.3.3 进程的描述 操作系统的控制结构操作系统的控制结构(1)(1)w操作系统核心控制结构是进程结构,资源管理的数据结构将围绕进程结构展开。 w操作系统的控制表分为四类, 进程控制表,存储控制表,I/O控制表和文件控制表。操作系统的控制结构(2) 进程控制表管理进程及其相关信息。 存储控制表管理一级(主)存储器和二级(虚拟)存储器,内容包括:主存储器的分配信息,二级存储器的分配信息,存储保护和分区共享信息,虚拟存储器管理信息操作系统的控制结构(3) I/O控制表管理系统的I/O设备和通道,包括:I/O设备和通道是否可用,I/O设备和通道分配信息,I/O操作的状态和进展,I/O操作传输数据所在主存区。 文件控制表管理文件,包括:被打开文件的信息,文件在主存储器和二级存储器中的位置信息,被打开文件的状态和其他属性信息。 操作系统控制表的通用结构 MemoryDevicesFilesProcessesMemory TablesI/O TablesFile TablesPrimary Process TableProcess 1Process NProcess 2Process ImageProcess 1ImageProcess NImage进程映像w操作系统中把进程物理实体和支持进程运行的环境合称为进程上下文(context)。w当系统调度新进程占有处理器时,新老进程随之发生上下文切换。进程的运行被认为是在上下文中执行。 进程上下文组成 用户级上下文:由用户程序块、用户数据块和用户堆栈组成的进程地址空间。 系统级上下文:包括进程的标识信息、现场信息和控制信息,进程环境块,及系统堆栈等组成的进程地址空间。 寄存器上下文:由PSW寄存器和各类控制寄存器、地址寄存器、通用寄存器组成。进程有四个要素组成进程程序块进程程序块进程数据块进程数据块系统堆栈系统堆栈用户堆栈用户堆栈用户进程在虚拟内存中的组织 进程标识信息进程现场信息进程控制信息用户堆栈用户私有地址空间(代码、数据)进程控制块共享地址空间进程控制块(1)w进程控制块P C B ,是操作系统用于记录和刻划进程状态及有关信息的数据结构。也是操作系统掌握进程的唯一资料结构,它包括了进程执行时的情况,以及进程让出处理器后所处的状态、断点等信息。 进程控制块(2)进程控制块包含三类信息标识信息现场信息控制信息进程控制块(3)标识信息 用于唯一地标识一个进程,分由用户使用的外部标识符和被系统使用的内部标识号。 常用的标识信息有进程标识符、父进程的标识符、用户进程名、用户组名等。进程控制块(4)现场信息 保留进程运行时存放在处理器现场中的各种信息,进程让出处理器时必须把处理器现场信息保存到PCB中,当该进程重新恢复运行时也应恢复处理器现场。 现场信息包括通用寄存器内容、控制寄存器内容、用户堆栈指针、系统堆栈指针等。进程控制块进程控制块(5)(5)控制信息(1) 1)进程调度相关信息,如进程状态、等待事件和等待原因、进程优先级、队列指引元等; 2) 进程组成信息,如正文段指针、数据段指针; 3)进程间通信相关信息,如消息队列指针、信号量等互斥和同步机制;进程控制块(6)控制信息(2) 4)进程在二级存储器内的地址信息; 5)CPU资源的占用和使用信息,如时间片余量、进程己占用时间、进程己执行时间总和,记帐信息; 进程控制块(7)控制信息(3) 6)进程特权信息,如在内存访问和处理器状态方面的特权。 7) 资源清单,包括进程所需全部资源、已经分得资源,如主存资源、I/O设备、打开文件表等。进程管理(1)w处于同一状态的所有PCB链接在一起的数据结构称为进程队列(Process Queues)。 w同一状态进程的PCB既可按先来先到的原则排成队列;也可按优先数或其它原则排成队列。 进程管理(2)链接进程控制块的方法 w单向链接w双向链接进程管理(3)队列标志 系统为每个队列设置一个队列标志:w单向链接时, 队列标志指引元指向队列中第一个进程的队列指引元的位置;w双向链接时, 队列标志的后向指引元指向队列中第一个进程的后向队列指引元的位置; 队列标志的前向指引元指向队列中最后一个进程的前向队列指引元的位置 进程管理(4)进程控制块的链接 队列标志0队列标志00后向前向(a) 单向连接(b) 双向连接是队列指引元进程管理(5)队列管理 入队 出队 队列管理模块 队列管理和状态转换示意图 指派提交完成超时事件1等待队列事件2等待队列事件n等待队列就绪队列等待事件1等待事件2等待事件n事件1出现事件2出现事件n出现前(后)向指引元的内容规定 情情况况1 1:它是队列之首。此时,前向指引元为0,后向指引元指出它的下一个进程的后向指引元位置。 情情况况2:它是队列之尾。此时,后向指引元为0,它的前向指引元指出它的上一个进程的前向指引元位置。 情情况况3:它的前后均有进程。此时,前(后)向指引元指出它的上(下)一个进程的前(后)向指引元位置。 进程的出队举例w假设进程Q在某个队列中,它的前面是进程P,后面是进程R。w进程Q出队过程:把Q的前向指引元的内容送到R的前向指引元中,把Q的后向指引元的内容送到P的后向指引元中。于是P的后向指引元指向R,而R的前向指引元指向P,Q就从队列中退出。表格法组织PCBw表格法组织PCB。所有进程的PCB都组织在一个线性表中,进程调度时需要查找整个PCB表;w也可以把相同状态进程的PCB组织在一个线性表中,系统有多个线性表,这样可缩短查表时间。2.3.4 进程切换与CPU模式切换 进程上下文切换进程上下文切换(1)(1)w进程切换是让处于运行态的进程中断运行,让出处理器,这时要做一次进程上下文切换、即保存老进程状态而装入被保护了的新进程的状态,以便新进程运行。 进程上下文切换(2)进程切换的步骤(1) 保存被中断进程的处理器现场信息。修改被中断进程的进程控制块的有关信息,如进程状态等。把被中断进程的进程控制块加入有关队列。选择下一个占有处理器运行的进程。进程上下文切换(3)进程切换的步骤(2)修改被选中进程的进程控制块的有关信息。根据被选中进程设置操作系统用到的地址转换和存储保护信息。根据被选中进程恢复处理器现场。进程上下文切换(4)调度和切换时机问题(1) 请求调度的事件发生后,就会运行低级调度程序,低级调度程序选中新的就绪进程后,就会进行上下文切换。实际上,由于种种原因,并不一定能一气呵成。 进程上下文切换(5)调度和切换时机问题(2) 例1,运行内核中断处理例程期间,发生了更高优先级的I/O中断的情况; 例2,若正在运行操作系统内核临界区程序,如果时钟中断导致请求低级调度的事件发生的情况; 在各种各样的原子操作,如原语操作、现场保护和恢复等过程中,发生了请求调度的事件的情况。 进程上下文切换(6)调度和切换时机问题(3) 通常的做法是,由内核置上请求调度标志,延迟到上述工作完成后再进行调度和进程上下文切换, Linux进程调度标志位need-resched,Windows2000/XP延 迟 过 程 调 用DPC/dispatch软件中断。 CPU模式切换(1) 当中断发生时,暂时中断正在执行的用户进程,把进程从用户状态切换到内核状态,去执行操作系统例行程序以获得服务,这就是一次模式切换模式切换, 内核在被中断了的进程的上下文中对这个中断事件作处理,即使该中断可能不是此进程引起的。CPU模式切换(2) 被中断进程可以是正在用户态下执行的,也可以是正在核心态下执行的,内核都要保留足够信息以便在后来能恢复被中断了的进程执行。CPU模式切换(3)模式切换的步骤保存被中断进程的处理器现场信息。根据中断号置程序计数器。把用户状态切换到内核状态,以便执行中断处理程序。CPU模式切换与进程上下文切换w模式切换不同于进程切换,它并不引起进程状态变化,也不一定引起进程的切换,在完成了中断调用之后,完全可以再通过一次逆向的模式切换来继续执行用户进程。 UNIX进程上下文切换和模式切换(1) w两类进程:系统进程和用户进程,系统进程在核心态下执行操作系统代码,用户进程在用户态下执行用户程序。w用户进程因中断和系统调用进入内核态,系统进程开始执行,两个进程使用同一个PCB,实质上是一个进程。但所执行的程序不同,映射到不同物理地址空间、使用不同堆栈。UNIX中进程上下文切换和模式切换(2) 核心态运行系统调用或中断(隐含模式切换)模式切换用户态运行等待状态就绪状态发生事件唤醒调度进程中断、中断返回允许的上下文切换切换2.3.5 进程的控制 原语(1)w处理器管理的一个主要工作是对进程的控制,包括:创建进程、阻塞进程、唤醒进程、挂起进程、激活进程、终止进程和撤销进程等。w这些控制和管理功能是由操作系统中的原语来实现的。 原语(2)w原语原语(Primitive)是在管态下执行、完成系统特定功能的过程。w原语和机器指令类似,其特点是执行过程中不允许被中断,是一个不可分割的基本单位,原语的执行是顺序的而不可能是并发的。原语(3)w一种原语的实现方法是以系统调用方式提供原语接口,且采用屏蔽中断的方式来实现原语功能,以保证原语操作不被打断的特性。 进程的创建进程的创建(1)(1) 进程创建来源于以下事件:提交一个批处理作业。在终端上交互式的登录。操作系统创建一个服务进程。存在的进程孵化(spawn)新的进程。进程的创建(2)w生成进程称父进程(Parent Process) ,被生成进程称子进程(Child Process) 、即一个父进程可以创建子进程,从而形成树形结构。进程的创建过程(1) 在进程表中增加一项,并从PCB池中取一个空白PCB。 为新进程的进程映像分配地址空间。传递环境变量,构造共享地址空间。 为新进程分配资源,除内存空间外,还有其他各种资源。进程的创建过程(2) 查找辅存,找到进程正文段并装到正文区。 初始化进程控制块,为新进程分配进程标识符,初始化PSW。 加入就绪进程队列,或直接将进程投入运行。 通知操作系统的某些模块,如记账程序、性能监控程序。进程的创建过程(3)wLinux fork( ) 创建子进程但父子进程不共享内容 wLinux clone( ) 允许定义父子进程共享的内容 wLinux中认为线程就是共享上下文的进程 进程的创建过程(4)w操作系统最多进程数的限制。wUNIX(早期)最多创建几十个进程。wSolaris可在启动时根据内存容量自动调整创建数。进程的创建过程(5)wLinux2.4中,最多进程数是运行时可调参数,缺省设置为:size-of-memory-in-the-system/kernel-stack-size/2。w假如机器有512MB内存,缺省可创建进程的上限为:51210241024/8192/2=32768。2 进程的阻塞和唤醒(1) 进程阻塞的步骤如下: 停止进程执行,保存现场信息到PSW 。 修改PCB的有关内容,如进程状态由运行改为等待等。 把修改状态后的PCB加入相应等待进程队列。进程的阻塞和唤醒(2) 进程唤醒的步骤如下:从相应等待进程队列中取出PCB。修改PCB有关信息,如进程状态等。把修改后PCB加入有关就绪进程队列。3 进程的撤销(1) 进程撤销的主要原因(1):进程正常运行结束。进程执行了非法指令。进程在常态下执行了特权指令。进程运行时间超越了分给的最大时间段。进程等待时间超越了设定的最大等待时间。进程申请的内存超过了系统能提供最大量。越界错误。 进程撤销的主要原因(2):对共享内存区的非法使用。算术错误,如除零和操作数溢出。严重的输入输出错误。操作员或操作系统干预。父进程撤销其子进程。父进程撤销。操作系统终止。 进程的撤销(2)进程的撤销(3)撤销原语终止进程具体步骤 根据撤销进程标识号,从相应队列中找到它的PCB; 将该进程拥有的资源归还给父进程或操作系统; 若该进程拥有子进程,应先撤销它的所有子孙进程,以防它们脱离控制; 撤销进程出队,将它的PCB归还到PCB池。4 进程的挂起和激活(1)w挂起原语执行过程如下:检查要被挂起进程的状态,若处于活动就绪态就修改为挂起就绪,若处于阻塞态,则修改为挂起阻塞。w被挂起进程PCB的非常驻部分要交换到磁盘对换区。进程的挂起和激活(2)w激活原语主要工作:把进程PCB非常驻部分调进内存,修改它的状态,挂起等待态改为等待态,挂起就绪态改为就绪态,排入相应队列中。w挂起原语既可由进程自己也可由其他进程调用,但激活原语却只能由其他进程调用。2.3.6 实例研究:UNIX SVR4的进程管理wUNIX SVR4采用基于用户进程的运行模型,操作系统功能在用户进程的环境中执行,需要在用户和内核模式间切换。wUNIX SVR4允许两类进程:用户进程和系统进程。系统进程在内核模式下执行,完成系统的一些重要功能。用户进程在用户模式下执行用户程序,系统调用、中断和异常将引起模式切换。UNIX SVR4 进程状态进程状态 user running: kernel running: preempted: ready to run, in memory: Asleep in memory:wready to run, swapped:wsleeping, swapped:wzombie:UNIX SVR4进程状态及其转换 内存就绪用户态运行内核态运行被剥夺就绪换出创建内存睡眠睡眠换出僵死返回用户模式系统调用或中断返回剥夺 选中退出中断,中断返回内存空间足够内存空间不足唤醒唤醒换出换进换出睡眠ForkUNIX进程树(1) UNIX中有两个固定进程:w0号是swap进程,系统自举时被创建;w1号是init进程,由0号进程孵化而创建。其他进程都是1号进程的子进程, 当一个交互式用户登录到系统中时,1号进程为这个用户创建用户进程,用户进程在执行应用时创建子进程,从而,构成一棵进程树。UNIX进程树(2)UNIX SVR4的进程描述(1)wUNIX进程由三部分组成:proc结构、数据段和正文段,合称进程映像,UNIX中把进程定义为映像的执行。wPCB由基本控制块proc结构和扩充控制块user结构组成。 UNIX SVR4的进程描述(2)wproc结构存放一个进程最基本、必需的信息,常驻内存;wuser结构存放进程运行时才用到的数据和状态信息,当进程暂时不在处理机上运行时,就把它放在磁盘的对换区中,进程的user结构总和进程的数据段一起,在主存和磁盘对换区之间换进/换出。UNIX 进程组成(1) processstructureuserstructurekernelstacktextstructure stack data textSystem data structureuser spaceSwappable process imageResident tablesUNIX 进程组成(2)w系统中维持一张名叫proc的进程表,共有50个表目,每个表目为一个proc结构,供一个进程使用,w最多同时存在50个进程。创建进程时,在proc表中找一个空表目,以建立起相应于该进程的proc结构。UNIX 进程组成(3)进程映像内容(1) procproc结结构构 包括进程标识符、父进程标识符、进程用户标识符、进程状态、等待的事件、调度优先数、进程的大小、指向user结构和进程存储区(text/data/stack)的指针、有关进程执行时间/核心资源使用/用户设置示警信号等的计时器、就绪队列指针等。UNIX 进程组成(4)进程映像内容(2) useruser结结构构 包括现场保护、内存管理、系统调用、文件管理、文件读写、时间信息、映象位置、用户标识、用户组标识、用户打开文件表、各种标志等。 UNIX 进程组成(5)进程映像内容(3) 系系统统数数据据结结构构 称作ppda,位于数据段的前面,进程proc结构中P-addr指向这个区域的首址。该区共有1KB,前面289B为进程扩充控制块user结构,剩下734B为核心栈,进程运行在核心态时,是它的工作区,用来保存过程调用和中断访问时用到的地址和参数。 UNIX 进程组成(6)进程映像内容(4) 用用户户数数据据区区 存放程序运行时用到的数据,如果进程运行的程序是非共享的,那么这个程序也放于此地。 用用户户栈栈区区 当进程运行在用户态时,这里是它的工作区。 UNIX 进程组成(7)进程映像内容(5) texttext结结构构 正文段在磁盘上和主存中的位置和大小、访问正文段进程数、在主存中访问正文段进程数、标志信息、地址转换信息。 在内存中设置一张正文段表。有40个表目,每个都是一个text结构,记录一个共享正文段的属性(磁盘和主存中的位置、尺寸、共享的进程数等、正文段文件节点指针)。UNIX 进程组成(8)进程映像内容(6) w若一个进程有共享正文段,当把该进程的非常驻内存部分调入内存时,应该关注共享正文段是否也在内存,如果发现不在内存,则要将它调入;UNIX 进程组成(9)进程映像内容(7) w进程的非常驻内存部分调出内存时,要关注共享正文段被共享的情况,只要还有别的共享进程的映象全部在内存,这个共享正文段就不得调出。w在进程映象的三个组成部分中,proc、user和text这三个数据结构是最为重要的角色。UNIX 进程组成(10)进程映像内容(8) 进进程程区区域域表表 系统为每个进程建立进程区域表PPRT(Per Process Region Table)由存储管理系统使用,定义了物理地址与虚拟地址之间的对应关系,进程对存储区域的访问权限。UNIX 进程组成(11) wstruct procw char p-stat; 进程状态w char p-flag; 进程特征w char p-pri; 进程优先数w char p-sig; 软中断号w char p-uid; 进程所属的用户标识数,w char p-time; 进程在内存或外存的驻留时间w char p-cpu; 用于调度优先数计算UNIX 进程组成(12)wchar p-nice; 计算调度优先数w int p-ttyp; 指向对应终端的tty结构w int p-pid; 进程标识数w int p-ppid; 父进程的标识数w int p-addr; 进程数据段起始地址(内存或盘上)w int p-size; 数据段大小w int p-wchan; 标识进程睡眠的原因w int * p-textp;指向文本的文本结构w proc NPROCUNIX 进程组成(13)wstruct userw int u-rsav 2;保存r5, r6,用于程序的正常或非正常返回w int u-fsav 2;用于保留浮点寄存器w char u-segflg; I/O目的地址在用户空间或系统空间的标志w char u-error; 返回出错号码 UNIX 进程组成(14) wchar u-uid; 有效用户标识数wchar u-ruid; 有效用户小组标识数wchar u-rgid; 实际用户小组标识数wint u-procp; 指向本进程proc结构指针wchar * u-base;指向读写缓冲存储器的起始地址UNIX 进程组成(15) wchar * u-count; 存放读写字节数nbyteswchar * u-offset2; 读、写的起始位置wint * u-cdir; 工作目录文件的inode指针wchar u-dbuf DIRSIZ; 存放当前工作文件的路径名DIRSIZ=14 UNIX 进程组成(16) wchar * u-dirp; 当前目录文件名的指针wstruct 构成文件的目录项,由文件所在节点的节点号w ino和文件的路径w int u-ino; 名组成w char u-name DIRSIZ;w u-dent;UNIX SVR4的进程创建(1) fork( )创建子进程,系统执行操作: 为子进程分配进程表。 为子进程分配进程标识符。 复制父进程的进程映像,但不复制共享内存区。 增加父进程所打开文件的计数,表示新进程也在使用这些文件。 把子进程置为ready to run状态。 返回子进程标识符给父进程,把0值返回给子进程。UNIX SVR4的进程创建(2) 父进程还应执行以下操作之一,以完成进程指派: 继续呆在父进程中。把进程控制切换到父进程的用户模式,在fork()点继续运行,而子进程进入ready to run状态。 把进程控制传递到子进程,子进程在fork()点继续运行,父进程进入ready to run态。 把进程控制传递到其他进程,父进程和子进程进入ready to run状态。fork( )创建子进程的程序(1)/*spawn the process*/main( ) int pid; /*process-id*/ printf(“Just one process so farn”); printf(“Calling fork n); pid=fork( ); /*Craat new process*/ if(pid=o) printf (“I am the child processn); else if(pid0) printf(“I am the parent process, child has pid d%n”,pid); else printf(“fork returned error code,no childn”); fork( )创建子进程的程序(2)1子进程是父进程的复制品,完全一样2父子进程的指令执行点都在fork( )语句之后的那个语句3fork( )没有参数,但返回值pid不一样,子进程中pid为0;父进程中pid为非0正整数(即子进程的内部标识号)4父子进程可根据不同pid值执行不同程序,完成不同工作2.3.7 实例研究:Linux进程管理 wLinux的进程概念与传统操作系统中的进程概念完全一致,进程是操作系统调度的最小单位。 Linux进程和任务w用户态称进程w核心态称任务 实质上是一个实体 Linux的进程状态(1) TASK_RUNNING:正在运行或准备运行的进程。 TASK_INTERRUPTIBLE:处于等待队列中的进程,一旦资源可用时被唤醒,也可以由其他进程通过信号或定时中断唤醒。 TASK_UNINTERRUPTIBLE:处于等待队列中的进程,一旦资源可用时被唤醒,不可由其他进程通过信号或定时中断唤醒。Linux的进程状态(2) TASK_ZOMBIE:进程运行结束但是尚未消亡时处于的状态。 TASK_STOPPED:进程被暂停,正在等待其他进程发出的唤醒信号。 TASK_SWAPPING:页面被交换出内存的进程。Linux的进程状态转换 僵死TASK_ZOMBIE就绪TASK_RUNNING不可中断TASK_UNINTERRUPTIBLE可中断TASK_INTERRUPTIBLE停止TASK_STOPPED占有CPU运行调度schedulle 时间片到申请资源未果,调用interruptible_sleep_on()申请资源未果,调用sleep_on()申请资源可用后wake_up()申请资源可用,收到信号、wake_up()wake_up_interruptible()创建do_fork()执行do_exit()跟踪系统调用,执行syscall_trace()sys_exit()schedulle()收到SIG_KILL或SIG_CONT后,执行wake_up()Linux创建进程(1) sys_fork()和 sys_clone都 通 过 调 用 do_fork()函数来完成进程的创建。 分配进程控制块task_struct的内存和进程所需的堆栈,并监测是否可以增加新进程; 拷贝当前进程的内容,并对数据成员初始化;为进程运行做准备;返回生成的新进程的进程标识号(pid)。Linux创建进程(2)w如果进程是根据sys_clone()产生的,它的进程标识号就是当前进程的进程标识号,并且对于进程控制块中的一些成员指针并不进行复制,而仅仅把这些成员指针的计数count增加1。这样,父子进程可以有效地共享资源。Linux进程终止w进程终止的系统调用sys_exit()通过调用do_exit()函数实现。函数do_exit()释放进程占用的大部分资源,进入TASK_ZOMBIE状态,调用exit_notify()通知。Linux进程控制块(1) Linux的PCB由结构struct task_struct描述。它的构成如下: Linux进程控制块进程控制块(2)(2)调度用数据成员调度用数据成员wState 进程状态wFlags 进程状态标记wPriority 进程优先数wrt_priority 实时进程优先数wCounter 时间片wPolicy 调度策略 Linux进程控制块进程控制块(3)(3)信号处理wSignal 记录进程接收到的信号,共32位,每位对应一种信号wBlocked 进程接收到信号的屏蔽位wSig 信号对应的处理函数 Linux进程控制块(4)进程队列指针wnext_task,prev_task 双向链接指针wnext_run,prev_run 就绪队列双向链接指针wp_opptr, p_pptr,p_cptr,p_ysptr,p_osptr 分别指向原始父进程、父进程,子进程、新老兄弟进程Linux进程控制块(5) 进程标识wuid,gid 用户标识和组标识wGroup 进程同时拥有的一组用户组号weuid,egid 有效的uid和gid系统安全考虑wfsuid,fsgid 文件系统的uid和gidwsuid,sgid 系统调用改变uid和gid时,存放真正的uid和gidwpid,pgrp,session 进程标识号、组标识号、session标识号Linux进程控制块(6) 时间数据成员wtimeout 指出进程间隔多久被重新唤醒wit_real_value,it_real_incr 时间片计时wreal_timer 一种定时器结构wit_virt_value,it_virt_incr 进程用户态执行时间的软件定时wit_prof_value,it_prof_incr 进程执行时间的软件定时wutime,stime,cutime,cstime,start_time 进程在用户态、内核态运行时间,所有进程在用户态、内核态运行时间,创建进程时间Linux进程控制块(7) 信号量wsemundo 进程操作信号量的undo操作wsemsleeping 信号量对应等待队列 上下文wldt 进程关于段式存储管理的局部描述符指针wtss 通用寄存器Linux进程控制块(8) wsaved_kernel_stack MSDOS仿真程序保存的堆栈指针wsaved_kernel_page 内核堆栈基地址文件系统wfs 保存进程与VFS的关系信息wfiles 系统打开文件表wlink_count 文件链的数目Linux进程控制块(9)内存数据成员wmm_struct结构wswappable 指示页面是否可以换出wswap_address 换出用的地址wmin_flt,maj_flt 该进程累计缺页次数Linux进程控制块(10) wnswap 进程累计换出的页面数wcmin_flt,cmaj_flt 进程及其子进程累计缺页次数wcnswap 进程及其子进程累计换出页面数wswap_cnt 下一次循环最多可以换出的页数Linux进程控制块(11) SMP支持wprocessor 进程正在使用的CPUwlast_processor 进程上一次使用的cpuwlock_depth 上下文切换时系统内核锁的深度Linux进程控制块(12)其他wused_math 是否使用浮点运算器wcomm 进程对应的可执行文件的文件名wrlim 系统使用资源的限制werrno 错误号 wdebugreg 调试寄存器Linux进程控制块(13) wexec_domain,Personality 与运行iBCS2标准程序有关wBinfmt 指向全局执行文件格式结构,包括a.out,script,elf,javawexit_code,exit_signal 返回代码,引起出错的信号名wDumpable 出错时是否能够进行memory dumpLinux进程控制块(14) wdid_exec 用于区分新老程序代码wtty_old_pgrp 进程显示终端所在的组标识wTty 指向进程所在的终端信息wwait_chldexit 在进程结束需要等待子进程时处于的等待队列,Linux进程调度的全局变量(1) (1)current 当前正在运行的进程的指针,在SMP中则指向CPU组中正被调度的CPU的当前进程。(2)init-task 即0号进程的PCB,是进程树的根。Linux进程调度的全局变量(2) (3)*taskNR-TASKS 进程PCB数组,规定系统可同时运行的最大进程数,task0必须指向0号进程init-task,可以通过tasks数组遍历所有进程的PCB,另外,还提供了宏for-each-task(),它通过next-task遍历所有进程的PCB。Linux进程调度的全局变量(3) (4)jiffies 是Linux的基准时间,系统初始化时清0,每隔10ms由时钟中断处理程序do-timer()增1。(5)need-resched 重新调度标志位,当进程需要系统调度时置位,在系统调用返回前或其他情况下,判别标志位是否为1,以决定是否调用schedule()进行CPU调度。(6)intr-count 记录中断服务程序的嵌套重数。
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号