进程及其实现.ppt

上传人:本田雅阁 文档编号:3174693 上传时间:2019-07-20 格式:PPT 页数:136 大小:422.02KB
返回 下载 相关 举报
进程及其实现.ppt_第1页
第1页 / 共136页
进程及其实现.ppt_第2页
第2页 / 共136页
进程及其实现.ppt_第3页
第3页 / 共136页
进程及其实现.ppt_第4页
第4页 / 共136页
进程及其实现.ppt_第5页
第5页 / 共136页
点击查看更多>>
资源描述

《进程及其实现.ppt》由会员分享,可在线阅读,更多相关《进程及其实现.ppt(136页珍藏版)》请在三一文库上搜索。

1、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),进程是操作系统中最基本、重要的概念。是多道程序系统出现后,为了刻画系统内部出现的动态情况,描述系统内部各道程序的活动规律引进的一个概念,所有多道程序设计操作系统都建立在

2、进程的基础上。,进程的定义和性质(3),操作系统引入进程的概念 从理论角度看,是对正在运行的程序过程的抽象; 从实现角度看,是一种数据结构,目的在于清晰地刻划动态系统的内在规律,有效管理和调度进入计算机系统主存储器运行的程序。,进程的属性,结构性: 共享性: 动态性: 独立性: 制约性: 并发性:,操作系统为什么要引入进程概念?,原因1-刻画系统的动态性,发挥系统的并发性,提高资源利用率。,原因2-它能解决系统的“共享性”,正确描述程序的执行状态。,“可再用” 程序 “可再入” 程序 “可再入”程序具有的性质,“可再入” 程序举例(1),编译程序P编译源程序甲,从A点开始工作,执行到B点时需将

3、信息记到磁盘上,且程序P在B点等待磁盘传输。 为提高系统效率,利用编译程序的“可再入”性,让编译程序P再为源程序乙进行编译,仍从A点开始工作。,“可再入” 程序举例(2),“可再入” 程序举例(3),现在怎样来描述编译程序P的状态呢? 称它为在B点等待磁盘传输状态,还是称它为正在从A点开始执行的状态? 把编译程序P,与服务对象联系起来,P为甲服务就说构成进程P甲,P为乙服务则构成进程P乙。,“可再入” 程序举例(4),两个进程虽共享程序P,但它们可同时执行且彼此按各自的速度独立执行。可见程序与计算(程序的执行)不再一一对应, 进程是一个既能用来共享资源,又能描述程序并发执行过程的一个基本单位。

4、,2.3.2 进程的状态和转换 三态模型(1),一个进程从创建而产生至撤销而消亡的整个生命周期,可用一组状态加以刻划,,按进程在执行过程中的状况至少定义三种不同的进程状态:,三态模型(2) 三种不同的进程状态,运行态(running): 就绪态(ready): 等待态(blocked):,三态模型(3) 进程三态模型及其状态转换,三态模型(4) 引起进程状态转换的具体原因,运行态等待态:等待使用资源或某事件发生 ; 等待态就绪态:资源得到满足或事件发生 ; 运行态就绪态:运行时间片到;出现有更高优先权进程。 就绪态运行态:CPU空闲时选择一个就绪进程。,五态模型(1),进程五态模型及其转换,五

5、态模型(2) 新建态,新建态对应进程刚被创建的状态。为一个新进程创建必要的管理信息,它并没有被提交执行,而是在等待操作系统完成创建进程的必要操作。,五态模型(3) 终止态,进程的终止,首先,等待操作系统进行善后,然后,退出主存。 进入终止态的进程不再执行,但依然临时保留在系统中等待善后。一旦其他进程完成了对终止态进程的信息抽取之后,系统将删除该进程。,五态模型(4) 进程状态转换的具体原因(1),NULL新建态:创建一个子进程。 新建态就绪态:系统完成了进程创建操作,且当前系统的性能和内存的容量均允许。,五态模型(5) 进程状态转换的具体原因(2),运行态终止态:一个进程到达自然结束点,或出现

6、了无法克服的错误,或被操作系统所终结,或被其他有终止权的进程所终结。,五态模型(6) 进程状态转换的具体原因(3),终止态NULL:完成善后操作。 就绪态终止态:某些操作系统允许父进程终结子进程。 等待态终止态:某些操作系统允许父进程终结子进程。,进程的挂起(1),为什么要有“挂起”状态? 由于进程的不断创建,系统资源已不能满足进程运行的要求,就必须把某些进程挂起(suspend),对换到磁盘镜像区中,暂时不参与进程调度,起到平滑系统操作负荷的目的。,进程的挂起(2),(1)系统中的进程均处于等待状态,需要把一些阻塞进程对换出去,腾出足够内存装入就绪进程运行。 (2)进程竞争资源,导致系统资源

7、不足,负荷过重,需要挂起部分进程以调整系统负荷,保证系统的实时性或让系统正常运行。,进程的挂起(3),(3)定期执行的进程(如审计、监控、记账程序)对换出去,以减轻系统负荷。 (4)用户要求挂起自己的进程,以便进行某些调试、检查和改正。,进程的挂起(4),(5)父进程要求挂起后代进程,以进行某些检查和改正。 (6)操作系统需要挂起某些进程,检查运行中资源使用情况,以改善系统性能;或当系统出现故障或某些功能受到破坏时,需要挂起某些进程以排除故障。,具有挂起功能的进程状态及其转换,具有挂起进程功能的进程状态,进程增加了两个新状态: 挂起就绪态(ready suspend)表明进程具备运行条件但目前

8、在二级存储器中,当它被对换到主存才能被调度执行。 挂起等待态(blocked suspend) 表明进程正在等待某一个事件且在二级存储器中。,具有挂起进程状态转换的具体原因(1),等待态挂起等待态:当前不存在就绪进程,至少一个等待态进程将被对换出去成为挂起等待态; 挂起等待态挂起就绪态:引起进程等待的事件发生之后,相应的挂起等待态进程将转换为挂起就绪态。,具有挂起进程状态转换的具体原因(2),挂起就绪态就绪态:内存中没有就绪态进程,或挂起就绪态进程具有比就绪态进程更高的优先级,将把挂起就绪态进程转换成就绪态。 就绪态挂起就绪态:系统根据当前资源状况和性能要求,决定把就绪态进程对换出去成为挂起就

9、绪态。,挂起进程具有如下特征(1),该进程不能立即被执行。 挂起进程可能会等待事件,但所等待事件是独立于挂起条件的,事件结束并不能导致进程具备执行条件。,挂起进程具有如下特征(2),进程进入挂起状态是由于操作系统、父进程或进程本身阻止它的运行。 结束进程挂起状态的命令只能通过操作系统或父进程发出。,2.3.3 进程的描述,操作系统的控制结构(1) 操作系统核心控制结构是进程结构,资源管理的数据结构将围绕进程结构展开。 操作系统的控制表分为四类, 进程控制表,存储控制表,I/O控制表和文件控制表。,操作系统的控制结构(2),进程控制表管理进程及其相关信息。 存储控制表管理一级(主)存储器和二级(

10、虚拟)存储器,内容包括:主存储器的分配信息,二级存储器的分配信息,存储保护和分区共享信息,虚拟存储器管理信息,操作系统的控制结构(3),I/O控制表管理系统的I/O设备和通道,包括:I/O设备和通道是否可用,I/O设备和通道分配信息,I/O操作的状态和进展,I/O操作传输数据所在主存区。 文件控制表管理文件,包括:被打开文件的信息,文件在主存储器和二级存储器中的位置信息,被打开文件的状态和其他属性信息。,操作系统控制表的通用结构,进程映像,操作系统中把进程物理实体和支持进程运行的环境合称为进程上下文(context)。 当系统调度新进程占有处理器时,新老进程随之发生上下文切换。进程的运行被认为

11、是在上下文中执行。,进程上下文组成,用户级上下文:由用户程序块、用户数据块和用户堆栈组成的进程地址空间。 系统级上下文:包括进程的标识信息、现场信息和控制信息,进程环境块,及系统堆栈等组成的进程地址空间。 寄存器上下文:由PSW寄存器和各类控制寄存器、地址寄存器、通用寄存器组成。,进程有四个要素组成,进程程序块 进程数据块 系统堆栈 用户堆栈,用户进程在虚拟内存中的组织,进程控制块(1),进程控制块P C B ,是操作系统用于记录和刻划进程状态及有关信息的数据结构。也是操作系统掌握进程的唯一资料结构,它包括了进程执行时的情况,以及进程让出处理器后所处的状态、断点等信息。,进程控制块(2) 进程

12、控制块包含三类信息,标识信息 现场信息 控制信息,进程控制块(3) 标识信息,用于唯一地标识一个进程,分由用户使用的外部标识符和被系统使用的内部标识号。 常用的标识信息有进程标识符、父进程的标识符、用户进程名、用户组名等。,进程控制块(4) 现场信息,保留进程运行时存放在处理器现场中的各种信息,进程让出处理器时必须把处理器现场信息保存到PCB中,当该进程重新恢复运行时也应恢复处理器现场。 现场信息包括通用寄存器内容、控制寄存器内容、用户堆栈指针、系统堆栈指针等。,进程控制块(5) 控制信息(1),1)进程调度相关信息,如进程状态、等待事件和等待原因、进程优先级、队列指引元等; 2) 进程组成信

13、息,如正文段指针、数据段指针; 3)进程间通信相关信息,如消息队列指针、信号量等互斥和同步机制;,进程控制块(6) 控制信息(2),4)进程在二级存储器内的地址信息; 5)CPU资源的占用和使用信息,如时间片余量、进程己占用时间、进程己执行时间总和,记帐信息;,进程控制块(7) 控制信息(3),6)进程特权信息,如在内存访问和处理器状态方面的特权。 7) 资源清单,包括进程所需全部资源、已经分得资源,如主存资源、I/O设备、打开文件表等。,进程管理(1),处于同一状态的所有PCB链接在一起的数据结构称为进程队列(Process Queues)。 同一状态进程的PCB既可按先来先到的原则排成队列

14、;也可按优先数或其它原则排成队列。,进程管理(2) 链接进程控制块的方法,单向链接 双向链接,进程管理(3) 队列标志,系统为每个队列设置一个队列标志: 单向链接时, 队列标志指引元指向队列中第一个进程的队列指引元的位置; 双向链接时, 队列标志的后向指引元指向队列中第一个进程的后向队列指引元的位置; 队列标志的前向指引元指向队列中最后一个进程的前向队列指引元的位置,进程管理(4) 进程控制块的链接,进程管理(5) 队列管理,入队 出队 队列管理模块,队列管理和状态转换示意图,前(后)向指引元的内容规定,情况1:它是队列之首。此时,前向指引元为0,后向指引元指出它的下一个进程的后向指引元位置。

15、 情况2:它是队列之尾。此时,后向指引元为0,它的前向指引元指出它的上一个进程的前向指引元位置。 情况3:它的前后均有进程。此时,前(后)向指引元指出它的上(下)一个进程的前(后)向指引元位置。,进程的出队举例,假设进程Q在某个队列中,它的前面是进程P,后面是进程R。 进程Q出队过程:把Q的前向指引元的内容送到R的前向指引元中,把Q的后向指引元的内容送到P的后向指引元中。于是P的后向指引元指向R,而R的前向指引元指向P,Q就从队列中退出。,表格法组织PCB,表格法组织PCB。所有进程的PCB都组织在一个线性表中,进程调度时需要查找整个PCB表; 也可以把相同状态进程的PCB组织在一个线性表中,

16、系统有多个线性表,这样可缩短查表时间。,2.3.4 进程切换与CPU模式切换,进程上下文切换(1) 进程切换是让处于运行态的进程中断运行,让出处理器,这时要做一次进程上下文切换、即保存老进程状态而装入被保护了的新进程的状态,以便新进程运行。,进程上下文切换(2) 进程切换的步骤(1),保存被中断进程的处理器现场信息。 修改被中断进程的进程控制块的有关信息,如进程状态等。 把被中断进程的进程控制块加入有关队列。 选择下一个占有处理器运行的进程。,进程上下文切换(3) 进程切换的步骤(2),修改被选中进程的进程控制块的有关信息。 根据被选中进程设置操作系统用到的地址转换和存储保护信息。 根据被选中

17、进程恢复处理器现场。,进程上下文切换(4) 调度和切换时机问题(1), 请求调度的事件发生后,就会运行低级调度程序,低级调度程序选中新的就绪进程后,就会进行上下文切换。实际上,由于种种原因,并不一定能一气呵成。,进程上下文切换(5) 调度和切换时机问题(2), 例1,运行内核中断处理例程期间,发生了更高优先级的I/O中断的情况; 例2,若正在运行操作系统内核临界区程序,如果时钟中断导致请求低级调度的事件发生的情况; 在各种各样的原子操作,如原语操作、现场保护和恢复等过程中,发生了请求调度的事件的情况。,进程上下文切换(6) 调度和切换时机问题(3), 通常的做法是,由内核置上请求调度标志,延迟

18、到上述工作完成后再进行调度和进程上下文切换, Linux进程调度标志位need-resched, Windows2000/XP延迟过程调用DPC/dispatch软件中断。,CPU模式切换(1),当中断发生时,暂时中断正在执行的用户进程,把进程从用户状态切换到内核状态,去执行操作系统例行程序以获得服务,这就是一次模式切换, 内核在被中断了的进程的上下文中对这个中断事件作处理,即使该中断可能不是此进程引起的。,CPU模式切换(2),被中断进程可以是正在用户态下执行的,也可以是正在核心态下执行的,内核都要保留足够信息以便在后来能恢复被中断了的进程执行。,CPU模式切换(3) 模式切换的步骤,保存被

19、中断进程的处理器现场信息。 根据中断号置程序计数器。 把用户状态切换到内核状态,以便执行中断处理程序。,CPU模式切换与进程上下文切换,模式切换不同于进程切换,它并不引起进程状态变化,也不一定引起进程的切换,在完成了中断调用之后,完全可以再通过一次逆向的模式切换来继续执行用户进程。,UNIX进程上下文切换和模式切换(1),两类进程:系统进程和用户进程,系统进程在核心态下执行操作系统代码,用户进程在用户态下执行用户程序。 用户进程因中断和系统调用进入内核态,系统进程开始执行,两个进程使用同一个PCB,实质上是一个进程。但所执行的程序不同,映射到不同物理地址空间、使用不同堆栈。,UNIX中进程上下

20、文切换和模式切换(2),2.3.5 进程的控制,原语(1) 处理器管理的一个主要工作是对进程的控制,包括:创建进程、阻塞进程、唤醒进程、挂起进程、激活进程、终止进程和撤销进程等。 这些控制和管理功能是由操作系统中的原语来实现的。,原语(2),原语(Primitive)是在管态下执行、完成系统特定功能的过程。 原语和机器指令类似,其特点是执行过程中不允许被中断,是一个不可分割的基本单位,原语的执行是顺序的而不可能是并发的。,原语(3),一种原语的实现方法是以系统调用方式提供原语接口,且采用屏蔽中断的方式来实现原语功能,以保证原语操作不被打断的特性。,进程的创建(1),进程创建来源于以下事件: 提

21、交一个批处理作业。 在终端上交互式的登录。 操作系统创建一个服务进程。 存在的进程孵化(spawn)新的进程。,进程的创建(2),生成进程称父进程(Parent Process) ,被生成进程称子进程(Child Process) 、即一个父进程可以创建子进程,从而形成树形结构。,进程的创建过程(1), 在进程表中增加一项,并从PCB池中取一个空白PCB。 为新进程的进程映像分配地址空间。传递环境变量,构造共享地址空间。 为新进程分配资源,除内存空间外,还有其他各种资源。,进程的创建过程(2), 查找辅存,找到进程正文段并装到正文区。 初始化进程控制块,为新进程分配进程标识符,初始化PSW。

22、加入就绪进程队列,或直接将进程投入运行。 通知操作系统的某些模块,如记账程序、性能监控程序。,进程的创建过程(3),Linux fork( ) 创建子进程但父子进程不共享内容 Linux clone( ) 允许定义父子进程共享的内容 Linux中认为线程就是共享上下文的进程,进程的创建过程(4),操作系统最多进程数的限制。 UNIX(早期)最多创建几十个进程。 Solaris可在启动时根据内存容量自动调整创建数。,进程的创建过程(5),Linux2.4中,最多进程数是运行时可调参数,缺省设置为:size-of-memory-in-the-system/kernel-stack-size/2。

23、假如机器有512MB内存,缺省可创建进程的上限为:51210241024/8192/2=32768。,2 进程的阻塞和唤醒(1),进程阻塞的步骤如下: 停止进程执行,保存现场信息到PSW 。 修改PCB的有关内容,如进程状态由运行改为等待等。 把修改状态后的PCB加入相应等待进程队列。,进程的阻塞和唤醒(2),进程唤醒的步骤如下: 从相应等待进程队列中取出PCB。 修改PCB有关信息,如进程状态等。 把修改后PCB加入有关就绪进程队列。,3 进程的撤销(1),进程撤销的主要原因(1): 进程正常运行结束。 进程执行了非法指令。 进程在常态下执行了特权指令。 进程运行时间超越了分给的最大时间段。

24、 进程等待时间超越了设定的最大等待时间。 进程申请的内存超过了系统能提供最大量。 越界错误。,进程撤销的主要原因(2): 对共享内存区的非法使用。 算术错误,如除零和操作数溢出。 严重的输入输出错误。 操作员或操作系统干预。 父进程撤销其子进程。 父进程撤销。 操作系统终止。,进程的撤销(2),进程的撤销(3) 撤销原语终止进程具体步骤,根据撤销进程标识号,从相应队列中找到它的PCB; 将该进程拥有的资源归还给父进程或操作系统; 若该进程拥有子进程,应先撤销它的所有子孙进程,以防它们脱离控制; 撤销进程出队,将它的PCB归还到PCB池。,4 进程的挂起和激活(1),挂起原语执行过程如下:检查要

25、被挂起进程的状态,若处于活动就绪态就修改为挂起就绪,若处于阻塞态,则修改为挂起阻塞。 被挂起进程PCB的非常驻部分要交换到磁盘对换区。,进程的挂起和激活(2),激活原语主要工作:把进程PCB非常驻部分调进内存,修改它的状态,挂起等待态改为等待态,挂起就绪态改为就绪态,排入相应队列中。 挂起原语既可由进程自己也可由其他进程调用,但激活原语却只能由其他进程调用。,2.3.6 实例研究:UNIX SVR4的 进程管理,UNIX SVR4采用基于用户进程的运行模型,操作系统功能在用户进程的环境中执行,需要在用户和内核模式间切换。 UNIX SVR4允许两类进程:用户进程和系统进程。系统进程在内核模式下

26、执行,完成系统的一些重要功能。用户进程在用户模式下执行用户程序,系统调用、中断和异常将引起模式切换。,UNIX SVR4 进程状态, user running: kernel running: preempted: ready to run, in memory: Asleep in memory: ready to run, swapped: sleeping, swapped: zombie:,UNIX SVR4进程状态及其转换,UNIX进程树(1),UNIX中有两个固定进程: 0号是swap进程,系统自举时被创建; 1号是init进程,由0号进程孵化而创建。其他进程都是1号进程的子进程,

27、 当一个交互式用户登录到系统中时,1号进程为这个用户创建用户进程,用户进程在执行应用时创建子进程,从而,构成一棵进程树。,UNIX进程树(2),UNIX SVR4的进程描述(1),UNIX进程由三部分组成:proc结构、数据段和正文段,合称进程映像,UNIX中把进程定义为映像的执行。 PCB由基本控制块proc结构和扩充控制块user结构组成。,UNIX SVR4的进程描述(2),proc结构存放一个进程最基本、必需的信息,常驻内存; user结构存放进程运行时才用到的数据和状态信息,当进程暂时不在处理机上运行时,就把它放在磁盘的对换区中,进程的user结构总和进程的数据段一起,在主存和磁盘对

28、换区之间换进/换出。,UNIX 进程组成(1),UNIX 进程组成(2),系统中维持一张名叫proc的进程表,共有50个表目,每个表目为一个proc结构,供一个进程使用, 最多同时存在50个进程。创建进程时,在proc表中找一个空表目,以建立起相应于该进程的proc结构。,UNIX 进程组成(3) 进程映像内容(1),proc结构 包括进程标识符、父进程标识符、进程用户标识符、进程状态、等待的事件、调度优先数、进程的大小、指向user结构和进程存储区(text/data/stack)的指针、有关进程执行时间/核心资源使用/用户设置示警信号等的计时器、就绪队列指针等。,UNIX 进程组成(4)

29、进程映像内容(2),user结构 包括现场保护、内存管理、系统调用、文件管理、文件读写、时间信息、映象位置、用户标识、用户组标识、用户打开文件表、各种标志等。,UNIX 进程组成(5) 进程映像内容(3),系统数据结构 称作ppda,位于数据段的前面,进程proc结构中P-addr指向这个区域的首址。该区共有1KB,前面289B为进程扩充控制块user结构,剩下734B为核心栈,进程运行在核心态时,是它的工作区,用来保存过程调用和中断访问时用到的地址和参数。,UNIX 进程组成(6) 进程映像内容(4),用户数据区 存放程序运行时用到的数据,如果进程运行的程序是非共享的,那么这个程序也放于此地

30、。 用户栈区 当进程运行在用户态时,这里是它的工作区。,UNIX 进程组成(7) 进程映像内容(5),text结构 正文段在磁盘上和主存中的位置和大小、访问正文段进程数、在主存中访问正文段进程数、标志信息、地址转换信息。 在内存中设置一张正文段表。有40个表目,每个都是一个text结构,记录一个共享正文段的属性(磁盘和主存中的位置、尺寸、共享的进程数等、正文段文件节点指针)。,UNIX 进程组成(8) 进程映像内容(6),若一个进程有共享正文段,当把该进程的非常驻内存部分调入内存时,应该关注共享正文段是否也在内存,如果发现不在内存,则要将它调入;,UNIX 进程组成(9) 进程映像内容(7),

31、进程的非常驻内存部分调出内存时,要关注共享正文段被共享的情况,只要还有别的共享进程的映象全部在内存,这个共享正文段就不得调出。 在进程映象的三个组成部分中,proc、user和text这三个数据结构是最为重要的角色。,UNIX 进程组成(10) 进程映像内容(8),进程区域表 系统为每个进程建立进程区域表PPRT(Per Process Region Table)由存储管理系统使用,定义了物理地址与虚拟地址之间的对应关系,进程对存储区域的访问权限。,UNIX 进程组成(11),struct proc char p-stat; 进程状态 char p-flag; 进程特征 char p-pri;

32、 进程优先数 char p-sig; 软中断号 char p-uid; 进程所属的用户标识数, char p-time; 进程在内存或外存的驻留时间 char p-cpu; 用于调度优先数计算,UNIX 进程组成(12),char p-nice; 计算调度优先数 int p-ttyp; 指向对应终端的tty结构 int p-pid; 进程标识数 int p-ppid; 父进程的标识数 int p-addr; 进程数据段起始地址(内存或盘上) int p-size; 数据段大小 int p-wchan; 标识进程睡眠的原因 int * p-textp;指向文本的文本结构 proc NPROC,U

33、NIX 进程组成(13),struct user int u-rsav 2;保存r5, r6,用于程序的正常或非正常返回 int u-fsav 2;用于保留浮点寄存器 char u-segflg; I/O目的地址在用户空间或系统空间的标志 char u-error; 返回出错号码,UNIX 进程组成(14),char u-uid; 有效用户标识数 char u-ruid; 有效用户小组标识数 char u-rgid; 实际用户小组标识数 int u-procp; 指向本进程proc结构指针 char * u-base;指向读写缓冲存储器的起始地址,UNIX 进程组成(15),char * u-

34、count; 存放读写字节数nbytes char * u-offset2; 读、写的起始位置 int * u-cdir; 工作目录文件的inode指针 char u-dbuf DIRSIZ; 存放当前工作文件的路径名DIRSIZ=14,UNIX 进程组成(16),char * u-dirp; 当前目录文件名的指针 struct 构成文件的目录项,由文件所在节点的节点号 ino和文件的路径 int u-ino; 名组成 char u-name DIRSIZ; u-dent;,UNIX SVR4的进程创建(1),fork( )创建子进程,系统执行操作: 为子进程分配进程表。 为子进程分配进程标识

35、符。 复制父进程的进程映像,但不复制共享内存区。 增加父进程所打开文件的计数,表示新进程也在使用这些文件。 把子进程置为ready to run状态。 返回子进程标识符给父进程,把0值返回给子进程。,UNIX SVR4的进程创建(2),父进程还应执行以下操作之一,以完成进程指派: 继续呆在父进程中。把进程控制切换到父进程的用户模式,在fork()点继续运行,而子进程进入ready to run状态。 把进程控制传递到子进程,子进程在fork()点继续运行,父进程进入ready to run态。 把进程控制传递到其他进程,父进程和子进程进入ready to run状态。,fork( )创建子进程

36、的程序(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

37、 error code,no childn”); ,fork( )创建子进程的程序(2),1子进程是父进程的复制品,完全一样 2父子进程的指令执行点都在fork( )语句之后的那个语句 3fork( )没有参数,但返回值pid不一样,子进程中pid为0;父进程中pid为非0正整数(即子进程的内部标识号) 4父子进程可根据不同pid值执行不同程序,完成不同工作,2.3.7 实例研究:Linux进程管理,Linux的进程概念与传统操作系统中的进程概念完全一致,进程是操作系统调度的最小单位。,Linux进程和任务,用户态称进程 核心态称任务 实质上是一个实体,Linux的进程状态(1),TASK_R

38、UNNING:正在运行或准备运行的进程。 TASK_INTERRUPTIBLE:处于等待队列中的进程,一旦资源可用时被唤醒,也可以由其他进程通过信号或定时中断唤醒。 TASK_UNINTERRUPTIBLE:处于等待队列中的进程,一旦资源可用时被唤醒,不可由其他进程通过信号或定时中断唤醒。,Linux的进程状态(2),TASK_ZOMBIE:进程运行结束但是尚未消亡时处于的状态。 TASK_STOPPED:进程被暂停,正在等待其他进程发出的唤醒信号。 TASK_SWAPPING:页面被交换出内存的进程。,Linux的进程状态转换,Linux创建进程(1),sys_fork()和sys_clon

39、e都通过调用do_fork()函数来完成进程的创建。 分配进程控制块task_struct的内存和进程所需的堆栈,并监测是否可以增加新进程; 拷贝当前进程的内容,并对数据成员初始化;为进程运行做准备;返回生成的新进程的进程标识号(pid)。,Linux创建进程(2),如果进程是根据sys_clone()产生的,它的进程标识号就是当前进程的进程标识号,并且对于进程控制块中的一些成员指针并不进行复制,而仅仅把这些成员指针的计数count增加1。这样,父子进程可以有效地共享资源。,Linux进程终止,进程终止的系统调用sys_exit()通过调用do_exit()函数实现。函数do_exit()释放

40、进程占用的大部分资源,进入TASK_ZOMBIE状态,调用exit_notify()通知。,Linux 进程控制块(1),Linux的PCB由结构struct task_struct描述。它的构成如下:,Linux进程控制块(2),调度用数据成员 State 进程状态 Flags 进程状态标记 Priority 进程优先数 rt_priority 实时进程优先数 Counter 时间片 Policy 调度策略,Linux进程控制块(3),信号处理 Signal 记录进程接收到的信号,共32位,每位对应一种信号 Blocked 进程接收到信号的屏蔽位 Sig 信号对应的处理函数,Linux进程控

41、制块(4),进程队列指针 next_task,prev_task 双向链接指针 next_run,prev_run 就绪队列双向链接指针 p_opptr,p_pptr,p_cptr,p_ysptr,p_osptr 分别指向原始父进程、父进程,子进程、新老兄弟进程,Linux进程控制块(5),进程标识 uid,gid 用户标识和组标识 Group 进程同时拥有的一组用户组号 euid,egid 有效的uid和gid系统安全考虑 fsuid,fsgid 文件系统的uid和gid suid,sgid 系统调用改变uid和gid时,存放真正的uid和gid pid,pgrp,session 进程标识号

42、、组标识号、session标识号,Linux进程控制块(6),时间数据成员 timeout 指出进程间隔多久被重新唤醒 it_real_value,it_real_incr 时间片计时 real_timer 一种定时器结构 it_virt_value,it_virt_incr 进程用户态执行时间的软件定时 it_prof_value,it_prof_incr 进程执行时间的软件定时 utime,stime,cutime,cstime,start_time 进程在用户态、内核态运行时间,所有进程在用户态、内核态运行时间,创建进程时间,Linux进程控制块(7),信号量 semundo 进程操作信

43、号量的undo操作 semsleeping 信号量对应等待队列 上下文 ldt 进程关于段式存储管理的局部描述符指针 tss 通用寄存器,Linux进程控制块(8),saved_kernel_stack MSDOS仿真程序保存的堆栈指针 saved_kernel_page 内核堆栈基地址 文件系统 fs 保存进程与VFS的关系信息 files 系统打开文件表 link_count 文件链的数目,Linux进程控制块(9),内存数据成员 mm_struct结构 swappable 指示页面是否可以换出 swap_address 换出用的地址 min_flt,maj_flt 该进程累计缺页次数,L

44、inux进程控制块(10),nswap 进程累计换出的页面数 cmin_flt,cmaj_flt 进程及其子进程累计缺页次数 cnswap 进程及其子进程累计换出页面数 swap_cnt 下一次循环最多可以换出的页数,Linux进程控制块(11),SMP支持 processor 进程正在使用的CPU last_processor 进程上一次使用的cpu lock_depth 上下文切换时系统内核锁的深度,Linux进程控制块(12),其他 used_math 是否使用浮点运算器 comm 进程对应的可执行文件的文件名 rlim 系统使用资源的限制 errno 错误号 debugreg 调试寄存

45、器,Linux进程控制块(13),exec_domain,Personality 与运行iBCS2标准程序有关 Binfmt 指向全局执行文件格式结构,包括a.out,script,elf,java exit_code,exit_signal 返回代码,引起出错的信号名 Dumpable 出错时是否能够进行memory dump,Linux进程控制块(14),did_exec 用于区分新老程序代码 tty_old_pgrp 进程显示终端所在的组标识 Tty 指向进程所在的终端信息 wait_chldexit 在进程结束需要等待子进程时处于的等待队列,,Linux进程调度的全局变量(1),(1)

46、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 记录中断服务程序的嵌套重数。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1