99
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 进程及其实现

  • Upload
    michel

  • View
    86

  • Download
    2

Embed Size (px)

DESCRIPTION

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). 操作系统引入进程的概念 从理论角度看,是对正在运行的程序过程的抽象; - PowerPoint PPT Presentation

Citation preview

Page 1: 2.3  进程及其实现

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 进程管理

Page 2: 2.3  进程及其实现

2.3.1 进程的定义和性质(1) 进程是一个可并发执行的具有独立功能的程序关于某个数据集合的一次执行过程,也是操作系统进行资源分配和保护的基本单位 。

Page 3: 2.3  进程及其实现

进程的定义和性质 (2) 操作系统引入进程的概念•从理论角度看,是对正在运行的程序过程的抽象;•从实现角度看,是一种数据结构,目的在于清晰地刻划动态系统的内在规律,有效管理和调度进入计算机系统主存储器运行的程序。

Page 4: 2.3  进程及其实现

进程的属性 •结构性: •共享性: •动态性: •独立性: •制约性: •并发性:

Page 5: 2.3  进程及其实现

操作系统为什么要引入进程概念 ?•原因 1-刻画系统的动态性,发挥系统的并发性,提高资源利用率。•原因 2-它能解决系统的“共享性”,正确描述程序的执行状态。

“可再用” 程序“可再入” 程序“可再入”程序具有的性质

Page 6: 2.3  进程及其实现

“可再入” 程序举例 (1)•编译程序 P 编译源程序甲,从 A点开始工作,执行到 B 点时需将信息记到磁盘上,且程序 P 在 B点等待磁盘传输。•为提高系统效率,利用编译程序的“可再入”性,让编译程序 P再为源程序乙进行编译,仍从 A点开始工作。

Page 7: 2.3  进程及其实现

“可再入” 程序举例 (2) 编译程序 P

(P 的入口, 处理源程序乙 )

(P 把 源 程 序 甲的 信 息 记 盘 等磁盘完成 )

A

B

源程序甲 源程序乙

•现在怎样来描述编译程序 P 的状态呢 ?

Page 8: 2.3  进程及其实现

“可再入” 程序举例 (3)•两个进程虽共享程序 P ,但它们可同时执行且彼此按各自的速度独立执行。可见程序与计算 ( 程序的执行 )不再一一对应,•进程是一个既能用来共享资源,又能描述程序并发执行过程的一个基本单位。

Page 9: 2.3  进程及其实现

2.3.2 进程的状态和转换三态模型 (1)•一个进程从创建而产生至撤销而消亡的整个生命周期,可用一组状态加以刻划,按进程在执行过程中的状况至少定义三种不同的进程状态:

运行态( running )就绪态( ready )等待态( blocked ):

Page 10: 2.3  进程及其实现

三态模型 (2)进程三态模型及其状态转换 运行态

就绪态 等待态

选中 落选出现等待事件

等待事件结束

Page 11: 2.3  进程及其实现

五态模型 (1)新建态• 新建态对应进程刚被创建的状态。为一个新进程创建必要的管理信息,它并没有被提交执行,而是在等待操作系统完成创建进程的必要操作。

Page 12: 2.3  进程及其实现

五态模型 (2)终止态• 进程的终止,首先 ,等待操作系统进行善后,然后 ,退出主存。• 进入终止态的进程不再执行,但依然临时保留在系统中等待善后。一旦其他进程完成了对终止态进程的信息抽取之后,系统将删除该进程。

Page 13: 2.3  进程及其实现

五态模型 (3) 进程五态模型及其转换

运行态

就绪态 等待态

选中 落选出现等待事件

等待事件结束

新建态 终止态

Page 14: 2.3  进程及其实现

进程的挂起 (1) 为什么要有“挂起”状态 ? 由于进程的不断创建,系统资源已不能满足进程运行的要求,就必须把某些进程挂起( suspend ),对换到磁盘镜像区中,暂时不参与进程调度,起到平滑系统操作负荷的目的。

Page 15: 2.3  进程及其实现

进程的挂起 (2) (1) 系统中的进程均处于等待状态,需要把一些阻塞进程对换出去,腾出足够内存装入就绪进程运行。 (2) 进程竞争资源,导致系统资源不足,负荷过重,需要挂起部分进程以调整系统负荷 ,保证系统的实时性或让系统正常运行。 (3) 定期执行的进程(如审计、监控、记账程序)对换出去,以减轻系统负荷。

Page 16: 2.3  进程及其实现

进程的挂起 (3) (4) 用户要求挂起自己的进程,以便进行某些调试、检查和改正。 (5)父进程要求挂起后代进程,以进行某些检查和改正。 (6) 操作系统需要挂起某些进程,检查运行中资源使用情况,以改善系统性能 ; 或当系统出现故障或某些功能受到破坏时,需要挂起某些进程以排除故障。

Page 17: 2.3  进程及其实现

具有挂起功能的进程状态及其转换

挂起

等待事件结束

出现等待事件

解除挂起 挂起

落选选中

运行态

就绪态 等待事件结束

终止态

新建态

挂起就绪态

解除挂起 挂起

挂起等待态

等待态

提交

提交

Page 18: 2.3  进程及其实现

具有挂起进程功能的进程状态 进程增加了两个新状态:• 挂起就绪态( ready suspend )表明进程具备运行条件但目前在二级存储器中,当它被对换到主存才能被调度执行。• 挂起等待态( blocked suspend ) 表明进程正在等待某一个事件且在二级存储器中。

Page 19: 2.3  进程及其实现

具有挂起进程状态转换的具体原因(1) • 等待态→挂起等待态:当前不存在就绪进程,至少一个等待态进程将被对换出去成为挂起等待态; • 挂起等待态→挂起就绪态:引起进程等待的事件发生之后,相应的挂起等待态进程将转换为挂起就绪态。

Page 20: 2.3  进程及其实现

具有挂起进程状态转换的具体原因(2) • 挂起就绪态→就绪态:内存中没有就绪态进程,或挂起就绪态进程具有比就绪态进程更高的优先级,将把挂起就绪态进程转换成就绪态。 • 就绪态→挂起就绪态:系统根据当前资源状况和性能要求,决定把就绪态进程对换出去成为挂起就绪态。

Page 21: 2.3  进程及其实现

挂起进程具有如下特征1.该进程不能立即被执行。2.挂起进程可能会等待事件,但所等待事件是独立于挂起条件的,事件结束并不能导致进程具备执行条件。3.进程进入挂起状态是由于操作系统、父进程或进程本身阻止它的运行。4.结束进程挂起状态的命令只能通过操作系统或父进程发出。

Page 22: 2.3  进程及其实现

2.3.3 进程的描述 操作系统的控制结构 (1)•操作系统核心控制结构是进程结构 ,资源管理的数据结构将围绕进程结构展开。 •操作系统的控制表分为四类: 进程控制表,存储控制表, I/O控制表和文件控制表。

Page 23: 2.3  进程及其实现

操作系统的控制结构 (2)•进程控制表管理进程及其相关信息。•存储控制表管理一级(主)存储器和二级(虚拟)存储器。•I/O 控制表管理系统的 I/O 设备和通道。•文件控制表管理文件。

Page 24: 2.3  进程及其实现

操作系统控制表的通用结构 MemoryDevices

FilesProcesses

Memory Tables

I/O Tables

File Tables

Primary Process TableProcess 1

……Process N

Process 2

Process Image

Process 1Image

……

Process NImage

Page 25: 2.3  进程及其实现

进程映像•操作系统中把进程物理实体和支持进程运行的环境合称为进程上下文( context)。•当系统调度新进程占有处理器时,新老进程随之发生上下文切换。进程的运行被认为是在上下文中执行。

Page 26: 2.3  进程及其实现

进程上下文组成 • 用户级上下文:由用户程序块、用户数据块和用户堆栈组成的进程地址空间。 • 系统级上下文:包括进程的标识信息、现场信息和控制信息,进程环境块,及系统堆栈等组成的进程地址空间。 • 寄存器上下文:由 PSW 寄存器和各类控制寄存器、地址寄存器、通用寄存器组成。

Page 27: 2.3  进程及其实现

进程有四个要素组成•进程程序块•进程数据块•系统堆栈•用户堆栈

Page 28: 2.3  进程及其实现

用户进程在虚拟内存中的组织 进程标识信息

进程现场信息进程控制信息

用户堆栈用户私有地址空间(代码、数据)

进程控制块

共享地址空间

Page 29: 2.3  进程及其实现

进程控制块 (1)• 进程控制块 PCB ,是操作系统用于记录和刻划进程状态及有关信息的数据结构。也是操作系统掌握进程的唯一资料结构,它包括了进程执行时的情况,以及进程让出处理器后所处的状态、断点等信息。• 进程控制块包含三类信息

标识信息 现场信息 控制信息

Page 30: 2.3  进程及其实现

进程控制块 (2)标识信息 • 用于唯一地标识一个进程,分由用户使用的外部标识符和被系统使用的内部标识号。 • 常用的标识信息有进程标识符、父进程的标识符、用户进程名、用户组名等。

Page 31: 2.3  进程及其实现

进程控制块 (3)现场信息 • 保留进程运行时存放在处理器现场中的各种信息,进程让出处理器时必须把处理器现场信息保存到 PCB 中,当该进程重新恢复运行时也应恢复处理器现场。 • 现场信息包括通用寄存器内容、控制寄存器内容、用户堆栈指针、系统堆栈指针等。

Page 32: 2.3  进程及其实现

进程控制块 (4)控制信息1)进程调度相关信息;2)进程组成信息 ;3)进程间通信相关信息;4)进程在二级存储器内的地址信息;5)CPU 资源的占用和使用信息;6)进程特权信息;7)资源清单,包括进程所需全部资源、已经分得资源等。

Page 33: 2.3  进程及其实现

进程管理 (1)•处于同一状态的所有 PCB链接在一起的数据结构称为进程队列 (Process Queues) 。 •同一状态进程的 PCB 既可按先来先到的原则排成队列 ;也可按优先数或其它原则排成队列。•链接进程控制块的方法

单向链接双向链接

Page 34: 2.3  进程及其实现

进程管理 (2)队列标志 系统为每个队列设置一个队列标志:•单向链接时 , 队列标志指引元指向队列中第一个进程的队列指引元的位置 ;•双向链接时 , 队列标志的后向指引元指向队列中第一个进程的后向队列指引元的位置 ; 队列标志的前向指引元指向队列中最后一个进程的前向队列指引元的位置

Page 35: 2.3  进程及其实现

进程管理 (3)进程控制块的链接

队列标志

0

队列标志

0

0后向

前向

( a ) 单向连接 ( b ) 双向连接

是 队 列 指 引元

Page 36: 2.3  进程及其实现

进程管理 (4)队列管理 •入队 •出队 •队列管理模块

Page 37: 2.3  进程及其实现

队列管理和状态转换示意图 处理器指派提交 完成

超时事件 1 等待队列事件 2 等待队列

事件 n 等待队列

就绪队列

……

等待事件 1等待事件 2

等待事件 n

事件 1出现事件 2出现事件 n出现

Page 38: 2.3  进程及其实现

前 (后 )向指引元的内容规定 • 情况 1 :它是队列之首。此时,前向指引元为 0 ,后向指引元指出它的下一个进程的后向指引元位置。 • 情况 2 :它是队列之尾。此时,后向指引元为 0 ,它的前向指引元指出它的上一个进程的前向指引元位置。 • 情况 3 :它的前后均有进程。此时,前 ( 后 ) 向指引元指出它的上 ( 下 ) 一个进程的前 (后 )向指引元位置。

Page 39: 2.3  进程及其实现

进程的出队举例• 假设进程 Q 在某个队列中,它的前面是进程 P,后面是进程 R。• 进程 Q 出队过程:把 Q 的前向指引元的内容送到 R 的前向指引元中,把 Q 的后向指引元的内容送到 P 的后向指引元中。于是 P 的后向指引元指向 R ,而 R 的前向指引元指向P , Q就从队列中退出。

Page 40: 2.3  进程及其实现

表格法组织 PCB•表格法组织 PCB 。所有进程的 PCB 都组织在一个线性表中 , 进程调度时需要查找整个 PCB 表;•也可以把相同状态进程的 PCB组织在一个线性表中 , 系统有多个线性表 , 这样可缩短查表时间。

Page 41: 2.3  进程及其实现

2.3.4 进程切换与 CPU 模式切换 进程上下文切换 (1)•进程切换是让处于运行态的进程中断运行,让出处理器,这时要做一次进程上下文切换、即保存老进程状态而装入被保护了的新进程的状态,以便新进程运行。

Page 42: 2.3  进程及其实现

进程上下文切换 (2)进程切换的步骤•保存被中断进程的处理器现场信息。• 修改被中断进程的进程控制块的有关信息,如进程状态等。•把被中断进程的进程控制块加入有关队列。•选择下一个占有处理器运行的进程。修改被选中进程的进程控制块的有关信息。• 根据被选中进程设置操作系统用到的地址转换和存储保护信息。•根据被选中进程恢复处理器现场。

Page 43: 2.3  进程及其实现

进程上下文切换 (4)调度和切换时机问题 (1)

• 请求调度的事件发生后,就会运行低级调度程序,低级调度程序选中新的就绪进程后,就会进行上下文切换。实际上,由于种种原因,并不一定能一气呵成。

Page 44: 2.3  进程及其实现

进程上下文切换 (5)调度和切换时机问题 (2) • 例 1,运行内核中断处理例程期间,发生了更高优先级的 I/O中断的情况;• 例 2,若正在运行操作系统内核临界区程序,如果时钟中断导致请求低级调度的事件发生的情况;• 在各种各样的原子操作,如原语操作、现场保护和恢复等过程中,发生了请求调度的事件的情况。

Page 45: 2.3  进程及其实现

CPU 模式切换 (1) • 当中断发生时,暂时中断正在执行的用户进程,把进程从用户状态切换到内核状态,去执行操作系统例行程序以获得服务,这就是一次模式切换, •内核在被中断了的进程的上下文中对这个中断事件作处理,即使该中断可能不是此进程引起的。

Page 46: 2.3  进程及其实现

CPU 模式切换 (2)模式切换的步骤• 保存被中断进程的处理器现场信息。•根据中断号置程序计数器。• 把用户状态切换到内核状态,以便执行中断处理程序。

Page 47: 2.3  进程及其实现

CPU 模式切换与进程上下文切换•模式切换不同于进程切换,它并不引起进程状态变化,也不一定引起进程的切换,在完成了中断调用之后,完全可以再通过一次逆向的模式切换来继续执行用户进程。

Page 48: 2.3  进程及其实现

UNIX 进程上下文切换和模式切换(1) •两类进程:系统进程和用户进程,系统进程在核心态下执行操作系统代码,用户进程在用户态下执行用户程序。•用户进程因中断和系统调用进入内核态,系统进程开始执行,两个进程使用同一个 PCB ,实质上是一个进程。但所执行的程序不同,映射到不同物理地址空间、使用不同堆栈。

Page 49: 2.3  进程及其实现

UNIX 中进程上下文切换和模式切换(2)

核心态运行

系统调用或中断 ( 隐含模式切换 )模式切换

用户态运行

等待状态 就绪状态

发生事件

唤醒

调度进程

中断、中断返回

允许的上下文切换切换

Page 50: 2.3  进程及其实现

2.3.5 进程的控制 原语 (1)•处理器管理的一个主要工作是对进程的控制,包括:创建进程、阻塞进程、唤醒进程、挂起进程、激活进程、终止进程和撤销进程等。•这些控制和管理功能是由操作系统中的原语来实现的。

Page 51: 2.3  进程及其实现

原语 (2)•原语 (Primitive) 是在管态下执行、完成系统特定功能的过程。•原语和机器指令类似,其特点是执行过程中不允许被中断,是一个不可分割的基本单位,原语的执行是顺序的而不可能是并发的。•一种原语的实现方法是以系统调用方式提供原语接口,且采用屏蔽中断的方式来实现原语功能,以保证原语操作不被打断的特性。

Page 52: 2.3  进程及其实现

进程的创建 (1) 进程创建来源于以下事件:•提交一个批处理作业。•在终端上交互式的登录。•操作系统创建一个服务进程。•存在的进程孵化( spawn )新的进程。

Page 53: 2.3  进程及其实现

进程的创建 (2)• 生成进程称父进程 (Parent Process) ,被生成进程称子进程 (Child Process) 、即一个父进程可以创建子进程,从而形成树形结构。

Page 54: 2.3  进程及其实现

进程的创建过程 (1)• 在进程表中增加一项,并从 PCB池中取一个空白 PCB 。• 为新进程的进程映像分配地址空间。传递环境变量,构造共享地址空间。• 为新进程分配资源,除内存空间外,还有其他各种资源。

Page 55: 2.3  进程及其实现

进程的创建过程 (2)• 查找辅存,找到进程正文段并装到正文区。• 初始化进程控制块,为新进程分配进程标识符,初始化 PSW 。• 加入就绪进程队列,或直接将进程投入运行。• 通知操作系统的某些模块,如记账程序、性能监控程序。

Page 56: 2.3  进程及其实现

进程的创建过程 (3)•Linux fork( ) 创建子进程但父子进程不共享内容 •Linux clone( ) 允许定义父子进程共享的内容 •Linux 中认为线程就是共享上下文的进程

Page 57: 2.3  进程及其实现

2 进程的阻塞和唤醒 (1) 进程阻塞的步骤如下: •停止进程执行,保存现场信息到PSW 。 •修改 PCB 的有关内容,如进程状态由运行改为等待等。 •把修改状态后的 PCB 加入相应等待进程队列。

Page 58: 2.3  进程及其实现

进程的阻塞和唤醒 (2) 进程唤醒的步骤如下:• 从相应等待进程队列中取出 PCB 。• 修改 PCB 有关信息,如进程状态等。• 把修改后 PCB 加入有关就绪进程队列。

Page 59: 2.3  进程及其实现

3 进程的撤销 (1) 进程撤销的主要原因(1):•进程正常运行结束。•进程执行了非法指令。•进程在常态下执行了特权指令。•进程运行时间超越了分给的最大时间段。• 进程等待时间超越了设定的最大等待时间。• 进程申请的内存超过了系统能提供最大量。•越界错误。

Page 60: 2.3  进程及其实现

进程的撤销 (2) 进程撤销的主要原因 (2) :• 对共享内存区的非法使用。• 算术错误,如除零和操作数溢出。•严重的输入输出错误。• 操作员或操作系统干预。• 父进程撤销其子进程。• 父进程撤销。• 操作系统终止。

Page 61: 2.3  进程及其实现

进程的撤销 (3)撤销原语终止进程具体步骤 • 根据撤销进程标识号,从相应队列中找到它的 PCB ; • 将该进程拥有的资源归还给父进程或操作系统; • 若该进程拥有子进程,应先撤销它的所有子孙进程,以防它们脱离控制; • 撤销进程出队,将它的 PCB归还到 PCB池。

Page 62: 2.3  进程及其实现

4 进程的挂起和激活 (1)•挂起原语执行过程如下:检查要被挂起进程的状态,若处于活动就绪态就修改为挂起就绪,若处于阻塞态,则修改为挂起阻塞。•被挂起进程 PCB 的非常驻部分要交换到磁盘对换区。

Page 63: 2.3  进程及其实现

进程的挂起和激活 (2)•激活原语主要工作:把进程 PCB非常驻部分调进内存,修改它的状态,挂起等待态改为等待态,挂起就绪态改为就绪态,排入相应队列中。•挂起原语既可由进程自己也可由其他进程调用,但激活原语却只能由其他进程调用。

Page 64: 2.3  进程及其实现

2.3.6 实例研究 :UNIX SVR4的进程管理• UNIX SVR4 采用基于用户进程的运行模型,操作系统功能在用户进程的环境中执行,需要在用户和内核模式间切换。• UNIX SVR4 允许两类进程:用户进程和系统进程。系统进程在内核模式下执行,完成系统的一些重要功能。用户进程在用户模式下执行用户程序,系统调用、中断和异常将引起模式切换。

Page 65: 2.3  进程及其实现

UNIX SVR4 进程状态• user running:• kernel running:• preempted:• ready to run, in memory:• Asleep in memory:•ready to run, swapped:•sleeping, swapped:•zombie:

Page 66: 2.3  进程及其实现

UNIX SVR4 进程状态及其转换

内存就绪用户态运行

内核态运行

被剥夺

就绪换出

创建

内存睡眠 睡眠换出僵死

返回用户模式

系 统 调 用或中断返回

剥夺 选中

退出中断,中断返回

内 存 空 间足够 内存空间不足

唤醒 唤醒

换出换进

换出

睡眠

Fork

Page 67: 2.3  进程及其实现

UNIX 进程树

Page 68: 2.3  进程及其实现

UNIX SVR4 的进程描述 (1)• UNIX 进程由三部分组成: proc 结构、数据段和正文段 ,合称进程映像, UNIX 中把进程定义为映像的执行。• PCB由基本控制块 proc 结构和扩充控制块 user 结构组成。

Page 69: 2.3  进程及其实现

UNIX SVR4 的进程描述 (2)•proc 结构存放一个进程最基本、必需的信息,常驻内存;•user 结构存放进程运行时才用到的数据和状态信息,当进程暂时不在处理机上运行时,就把它放在磁盘的对换区中,进程的 user 结构总和进程的数据段一起,在主存和磁盘对换区之间换进 /换出。

Page 70: 2.3  进程及其实现

UNIX 进程组成 (1) process

structureuser

structurekernelstack

textstructure

stack

data

text

System data structure

user space

Swappable process imageResident tables

Page 71: 2.3  进程及其实现

UNIX 进程组成 (2)进程映像内容 (1) •proc 结构 包括进程标识符、父进程标识符、进程用户标识符、进程状态、等待的事件、调度优先数、进程的大小、指向 user 结构和进程存储区 (text/data/stack) 的指针、有关进程执行时间 /核心资源使用 / 用户设置示警信号等的计时器、就绪队列指针等。

Page 72: 2.3  进程及其实现

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

Page 73: 2.3  进程及其实现

UNIX 进程组成 (4)进程映像内容 (2)• 用户数据区 存放程序运行时用到的数据,如果进程运行的程序是非共享的,那么这个程序也放于此地。• 用户栈区 当进程运行在用户态时,这里是它的工作区。• text 结构 正文段在磁盘上和主存中的位置和大小、访问正文段进程数、在主存中访问正文段进程数、标志信息、地址转换信息。• 在内存中设置一张正文段表。有 40个表目,每个都是一个 text结构,记录一个共享正文段的属性。

Page 74: 2.3  进程及其实现

UNIX 进程组成 (5)进程映像内容 (3)

•若一个进程有共享正文段,当把该进程的非常驻内存部分调入内存时,应该关注共享正文段是否也在内存,如果发现不在内存,则要将它调入;•进程的非常驻内存部分调出内存时,要关注共享正文段被共享的情况,只要还有别的共享进程的映象全部在内存,这个共享正文段就不得调出。•在进程映象的三个组成部分中, proc、 user 和 text 这三个数据结构是最为重要的角色。

Page 75: 2.3  进程及其实现

UNIX 进程组成 (6)进程映像内容 (4) • 进程区域表 系统为每个进程建立进程区域表 PPRT( Per Process Region Table )由存储管理系统使用,定义了物理地址与虚拟地址之间的对应关系,进程对存储区域的访问权限。

Page 76: 2.3  进程及其实现

UNIX SVR4 的进程创建 (1) fork( ) 创建子进程,系统执行操作: •为子进程分配进程表。 •为子进程分配进程标识符。 • 复制父进程的进程映像,但不复制共享内存区。 • 增加父进程所打开文件的计数,表示新进程也在使用这些文件。 •把子进程置为 ready to run 状态。 •返回子进程标识符给父进程,把 0值返回给子进程。

Page 77: 2.3  进程及其实现

UNIX SVR4 的进程创建 (2) 父进程还应执行以下操作之一,以完成进程指派: • 继续呆在父进程中。把进程控制切换到父进程的用户模式,在 fork() 点继续运行,而子进程进入 ready to run 状态。 • 把进程控制传递到子进程,子进程在fork() 点继续运行,父进程进入 ready to run 态。 • 把进程控制传递到其他进程,父进程和子进程进入 ready to run 状态。

Page 78: 2.3  进程及其实现

fork( ) 创建子进程的程序 (1)/*spawn the process*/main( ) { int pid; /*process-id*/ printf(“Just one process so far\n”); printf(“Calling fork …\n); pid=fork( ); /*Craat new process*/ if(pid==o) printf (“I am the child process\n); else if(pid>0) printf(“I am the parent process, child has pid d%\n”,pid); else printf(“fork returned error code,no child\n”); }

Page 79: 2.3  进程及其实现

fork( ) 创建子进程的程序(2)1子进程是父进程的复制品,完全一样2父子进程的指令执行点都在 fork( )语句之后的那个语句3fork( ) 没有参数,但返回值 pid 不一样,子进程中 pid 为 0; 父进程中 pid 为非 0正整数 (即子进程的内部标识号 )4父子进程可根据不同 pid值执行不同程序,完成不同工作

Page 80: 2.3  进程及其实现

2.3.7 实例研究 :Linux 进程管理 •Linux 的进程概念与传统操作系统中的进程概念完全一致,进程是操作系统调度的最小单位。

Page 81: 2.3  进程及其实现

Linux 进程和任务•用户态称进程•核心态称任务 实质上是一个实体

Page 82: 2.3  进程及其实现

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

Page 83: 2.3  进程及其实现

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()

Page 84: 2.3  进程及其实现

Linux 创建进程 (1) •sys_fork() 和 sys_clone 都通过调用do_fork()函数来完成进程的创建。 • 分配进程控制块 task_struct 的内存和进程所需的堆栈,并监测是否可以增加新进程; •拷贝当前进程的内容,并对数据成员初始化;为进程运行做准备;返回生成的新进程的进程标识号( pid )。

Page 85: 2.3  进程及其实现

Linux 创建进程 (2)•如果进程是根据 sys_clone() 产生的,它的进程标识号就是当前进程的进程标识号,并且对于进程控制块中的一些成员指针并不进行复制,而仅仅把这些成员指针的计数 count 增加 1 。这样,父子进程可以有效地共享资源。

Page 86: 2.3  进程及其实现

Linux 进程终止•进程终止的系统调用 sys_exit()通过调用 do_exit() 函数实现。函数 do_exit() 释放进程占用的大部分资源,进入 TASK_ZOMBIE状态,调用 exit_notify() 通知。

Page 87: 2.3  进程及其实现

Linux进程控制块 (1)调度用数据成员

• State 进程状态• Flags 进程状态标记• Priority 进程优先数• rt_priority 实时进程优先数• Counter 时间片• Policy 调度策略

Page 88: 2.3  进程及其实现

Linux进程控制块 (2)信号处理

•Signal 记录进程接收到的信号,共 32位,每位对应一种信号•Blocked 进程接收到信号的屏蔽位•Sig 信号对应的处理函数

Page 89: 2.3  进程及其实现

Linux 进程控制块 (3)进程队列指针• next_task,prev_task 双向链接指针• next_run,prev_run 就绪队列双向链接指针• p_opptr , p_pptr,p_cptr,p_ysptr ,p_osptr 分别指向原始父进程、父进程,子进程、新老兄弟进程

Page 90: 2.3  进程及其实现

Linux 进程控制块 (4) 进程标识• uid , gid 用户标识和组标识• Group 进程同时拥有的一组用户组号• euid , egid 有效的 uid 和 gid 系统安全考虑• fsuid,fsgid 文件系统的 uid 和 gid• suid,sgid 系统调用改变 uid 和 gid时,存放真正的 uid 和 gid• pid,pgrp,session 进程标识号、组标识号、 session标识号

Page 91: 2.3  进程及其实现

Linux 进程控制块 (5) 时间数据成员• 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 进程在用户态、内核态运行时间,所有进程在用户态、内核态运行时间,创建进程时间

Page 92: 2.3  进程及其实现

Linux 进程控制块 (6) 信号量•semundo 进程操作信号量的 undo 操作•semsleeping 信号量对应等待队列 上下文•ldt 进程关于段式存储管理的局部描述符指针•tss 通用寄存器

Page 93: 2.3  进程及其实现

Linux 进程控制块 (7) •saved_kernel_stack MSDOS仿真程序保存的堆栈指针•saved_kernel_page 内核堆栈基地址

文件系统•fs 保存进程与 VFS 的关系信息•files 系统打开文件表•link_count 文件链的数目

Page 94: 2.3  进程及其实现

Linux 进程控制块 (8)内存数据成员

•mm_struct结构•swappable 指示页面是否可以换出•swap_address 换出用的地址•min_flt,maj_flt 该进程累计缺页次数

Page 95: 2.3  进程及其实现

Linux 进程控制块 (9) • nswap 进程累计换出的页面数• cmin_flt,cmaj_flt 进程及其子进程累计缺页次数• cnswap 进程及其子进程累计换出页面数• swap_cnt 下一次循环最多可以换出的页数

Page 96: 2.3  进程及其实现

Linux 进程控制块 (10) SMP支持•processor 进程正在使用的 CPU•last_processor 进程上一次使用的 cpu•lock_depth 上下文切换时系统内核锁的深度

Page 97: 2.3  进程及其实现

Linux 进程控制块 (11)其他

• used_math 是否使用浮点运算器• comm 进程对应的可执行文件的文件名• rlim 系统使用资源的限制• errno 错误号 • debugreg 调试寄存器

Page 98: 2.3  进程及其实现

Linux 进程控制块 (12) • exec_domain,Personality 与运行 iBCS2标准程序有关• Binfmt 指向全局执行文件格式结构,包括 a.out,script,elf,java• exit_code,exit_signal 返回代码,引起出错的信号名• Dumpable 出错时是否能够进行 memory dump

Page 99: 2.3  进程及其实现

Linux 进程控制块 (13) •did_exec 用于区分新老程序代码•tty_old_pgrp 进程显示终端所在的组标识•Tty 指向进程所在的终端信息•wait_chldexit 在进程结束需要等待子进程时处于的等待队列,