第二课 进程的描述和控
制 (Process Description
and Control)
教学目的:
?本 课为 描述程序并发执行引入进程的概念,描述 进程
的特征、状态、状态的转换、进程控制块等基本概念。
描述 控制进程状态转换的 OS内核和 进程控制原语 的功
能 。 并发性是 OS最重要的特征,进程是 OS最基本最重
要的概念,进程管理是 OS的重点和难点。
教学要求:
? 熟悉 进程引入的必要性;熟练掌握进程的定义和
特征,熟练掌握进程的三个基本状态、状态的转
换和状态转换的关系, 熟练掌握进程存在的唯一
实体 --进程控制块,熟悉 进程上下文。
? 熟悉内核的功能,掌握增加, 挂起,,, 激活,
操作的五个状态图和状态的转换,熟悉 创建、撤
消、阻塞、唤醒、挂起和激活进程控制原语的功
能,了解 线程的概念,引入线程的好处 和线程的
应用 。
? 了解模块接口法、层次结构法和客户/服务器结
构三种操作系统结构,WindowsNT框架图 。
(一)进程的引入
( 1) 程序顺序执行 (Sequential Execution)与特征
? 一个较大的程序通常都由若干个程序段组成,程序
在执行时,各程序段必须按照先后次序逐个执行。程序
各程序段先后执行次序关系可用前趋图表示。
? 前趋图( Predecessor Graph) 是一个有向无循环图,
图由结点和结点间有向边组成,结点代表各程序段操作,
而结点间的有向边表示两程序段操作之间存在的前趋关
系(, →, ) 。两程序段 Pi和 Pj的前趋关系表示成 Pi
→ Pj,Pi是 Pj的 前趋,Pj是 Pi的 后继。
P1
C1I1 I2 C2 P2
进程的引入 -1
? 程序顺序执行特征,
顺序性,程序各程序段严格按照规定的顺序执行。
封闭性,程序运行时机内各资源只受该程序控制而改变,
执行结果不受外界因素影响。
可再现性,只要程序执行环境和初始条件相同,程序多
次执行,可获得相同结果。
( 2) 程序并发执行 (Concurrent Execution)与特征
在计算机系统支持并行操作时,如采用多道程序设
计技术,则内存中多道程序处于并发执行状态。如上述
有三个程序段的作业类,虽然每个作业有前趋关系的各
程序段不能在系统 CPU和输入输出各部件并行执行,但
一个作业没有前趋关系的程序段或不同作业的程序段可
以分别在 CPU和各输入输出部件上并行执行。
进程的引入 -2
四个上述三个程序段类的作业并发执行的前趋图如下
图所示,
C
3
I1 I2 I
3
I
4
C
1
C
2
C
4
P
1
P
2
P
3
P
4
,,,,,,
T t 1 t 2 t 3 t 4 t 5 t 6
进程的引入 -3
? 程序并发执行特征,
间断性,程序在并发执行时,由于它们共享资源或为
完成同一项任务而相互合作,使在并发程序之间形
成了相互制约的关系。相互制约将导致并发程序具
有, 执行 -暂仃 -执行, 这种间断性活动规律。
失去封闭性,程序在并发执行时,是多个程序共享系
统中的各种资源,因而这些资源的状态将由多个程
序来改变,致使程序的运行已失去了封闭性。
不可再现性,程序在并发执行时,由于失去了封闭性,
也将导致失去结果的可再现性。即程序经过多次运
行,虽然其各次的环境和初始条件相同,但得到的
结果却各不相同。
例,观察者 /报告者
进程的引入 -4
观察者,报告者:
begin begin
repeat repeat
wait a car go through delay a time
N=N+1; Print N ;
N=0 ;
until until
end end
初始 N=n时不同执行序列:
N=N+1; Print N; Print N ;
Print N ; N=0 ; N=N+1 ;
N=0 ; N=N+1 ; N=0 ;
结果各不相同,
打印 n+1,N=0; 打印 n,N=1; 打印 n,N=0;
( 3) 进程的引入
? 由于程序在并发执行时,各次执行的结果不同,所
以用, 程序, 这个概念已无法描述程序的并发执行,
所以必须引入新的概念 -进程来描述程序的并发执行。
进程这一术语最早由麻省理工学院著名的操作系统
MULTICS中提出。
? 进程 (Process)定义:, 可并发执行的程序在一个
数据集合上的运行过程, 。
? 进程的特征,
动态性,动态性是进程的最基本特征,它是程序执行
过程,它是有一定的生命期。它由创建而产生、由
调度而执行,因得不到资源而暂仃,并由撤消而死
亡。而程序是静态的,它是存放在介质上一组有序
指令的集合,无运动的含义。
进程的引入 -1
并发性,并发性是进程的重要特征,同时也是 OS的重
要特征。并发性指多个进程实体同存于内存中,能
在一段时间内同时运行。而程序是不能并发执行。
独立性,进程是一个能独立运行的基本单位,即是一
个独立获得资源和独立调度的单位,而程序不作为
独立单位参加运行。
异步性,进程按各自独立的不可预知的速度向前推进,
即进程按异步方式进行,正是这一特征,将导致程
序执行的不可再现性,因此 OS必须采用某种措施来
限制各进程推进序列以保证各程序间正常协调运行。
结构特征,从结构上,进程实体由程序段、数据段和
进程控制块三部分组成,UNIX中称为, 进程映象, 。
(练习 )
(二)进程的描述
( 1) 进程状态及其转换
(Process State and Transition)
1,进程的三个基本状态
运行态( Running),当一个进程在处理机上运行时,
则称该进程处于运行状态。
就绪态( Ready),一个进程获得了除处理机外的一切所
需资源,一旦得到处理机即可运行,则称此进程处于
就绪状态。
阻塞态( Blocked),(又称挂起状态、等待状态):
一个进程正在等待某一事件发生(例如请求 I/ O而等
待 I/ O完成等)而暂时仃止运行,这时即使把处理机
分配给进程也无法运行,故称该进程处于阻塞状态。
进程的描述 -1
运 行 态
就 绪 态 阻 塞 态
进程调度
时间片已用完 等待某一事件发生
等待事件已发生
2.进程状态的转换
三个基本状态之间可能转换和转换原因如下:
? 就绪态 ―― >运行态,当处理机空闲时,进程调度程序必将
处理机分配给一个处于就绪态的进程,该进程便由就绪态转
换为运行态。
? 运行态 ―― >阻塞态,处于运行态的进程在运行过程中需要
等待某一事件发生后(例如因 I/ O请求等待 I/ O完成后),
才能继续运行,则该进程放弃处理机,从运行态转换为阻塞
态。
? 阻塞态 ―― >就绪态,处于阻塞态的进程,若其等待的事件
已经发生,于是进程由阻塞态转换为就绪态。
? 运行态 ―― >就绪态,处于运行状态的进程在其运行过程中,
因分给它的处理机时间片已用完,而不得不让出(被抢占)
处理机,于是进程由运行态转换为就绪态。
? 而阻塞态 ―― >运行态和就绪态 ―― >阻塞态这二种状态转
换不可能发生。
3.系统中各进程状态的分布和管理
? 处于运行态进程,如系统有一个处理机,则在任何
一时刻,最多只有一个进程处于运行态。
? 处于就绪态进程,一般处于就绪态的进程按照一定
的算法(如先来的进程排在前面,或采用优先权
高的进程排在前面)排成一个就绪队列。
? 处于阻塞态进程,处于阻塞态的进程排在阻塞队列
中。由于等待事件原因不同,阻塞队列也按事件
分成几个队列。
系统中各进程状态的分布和管理 -1
系统中各进程状态的分布:
 例:一个只有一个处理机的系统中,OS的进程有运行、就绪、
阻塞三个基本状态。假如某时刻该系统中有 10个进程并发执
行,在略去调度程序所占用时间情况下试问:
这时刻系统中处于运行态的进程数最多有几个?最少有几个?
这时刻系统中处于就绪态的进程数最多有几个?最少有几个?
这时刻系统中处于阻塞态的进程数最多有几个?最少有几个?
? 解:因为系统中只有一个处理机,所以某时刻处于运行态的
进程数最多只有一个。而最少可能为 0,此时其它 10个进程一
定全部排在各阻塞队列中,在就绪队列中没有进程。而某时
刻处于就绪态的进程数最多只有 9个,不可能出现 10个情况,
因为一旦 CPU有空,调度程序马上调度,当然这是在略去调度
程序调度时间时考虑。处于阻塞态的进程数最少是 0个。
(练习 )
4。 系统中各进程状态转换影响
运行运









A进程 B进程
运行运









C进程 D进程
系统中各进程状态转换影响 -1
? 在一个多道程序设计的系统中,各进程状态转换会互相影响。
例如系统中一个运行态的进程 A发生 I/O请求后要等待 I/O完
成,它的状态也由运行态转换为阻塞态,此时进程调度程序
就会按照一定的算法,在就绪队列中选一个进程 B,将处理
机分给它,该 B进程的状态也由就绪态转换为运行态。如一
个进程 C等待的事件完成,则它的状态由阻塞态转换为就绪
态,它也从阻塞队列中抽出插入就绪队列中。如进程 C从阻
塞态转换为就绪态时,有一个进程 D在 CPU上运行。而系统采
用抢占式调度算法,进程 C的优先级又高于正在 CPU上运行的
进程 D的优先级,则要发行抢占调度。即接下去的操作时由
进程调度程序将正在运行的进程 D由运行态转换为就绪态,
插入就绪队列。
(练习 )
Fig.2.5 Five-State Process Model
Release
New Ready Running Exit
Blocked
Admit
Event
Occurs
Dispatch
Time-out
Event
Wait
( 2)进程控制模块
PCB(Process Control Block)
1,进程控制块的作用 ―― 进程存在的唯一实体
由于进程控制块中记录进程存在和特性信息; PCB与进程同
生死,创建一个进程就是为其建立一个 PCB,当进程被撤消时,
系统就回收它的 PCB; OS对进程的控制要是根据 PCB来进行,
对进程管理也通过对 PCB管理来实现,所以进程控制块是进程
存在的唯一实体。
2,PCB的信息
? 进程标识符,它用于唯一地标识一个进程。它有外部标识符
(由字母组成,供用户使用)和内部标识符(由整数组成,
为方便系统管理而设置)二种。
 进程调度信息:它包括进程状态( running,ready、
blacked)、队列(就绪、阻塞队列)、队列指针,调度参数:
进程优先级、进程已执行时间和已等待时间等。
进程控制模块( PCB) -1
 处理机状态信息:它由处理机各种寄存器(通用寄存器、指
令计数器、程序状态字 PSW、用户栈指针等)的内容所组成,
该类信息使进程被中断后重新执行时能恢复现场从断点处继
续运行。
 进程控制信息:它包括程序和数据的地址,I/ O资源清单,
保证进程正常运行的同步和通信机制等。
 家族信息:它包括该进程的父、子进程标识符、进程的用户
主等。
? UNIX的 PCB由 Proc和 user两个结构组成,proc常驻主存的系统
区,是 PCB中最基本和常用信息,而 user可根据需要换进换出。
(练习 )
( 3)进程上下文 (Process Context)
? 进程是由程序、数据和进程控制块组成。进程上下文实际
上是执行活动全过程的静态描述。具体说,进程上下文包括
系统中与执行该进程有关的各种寄存器(例如:通用寄存器、
程序计数器 PC、程序状态寄存器 PS等)的值,程序段在经编
译之后形成的机器指令代码集(或称正文段)、数据集及各
种堆栈值和 PCB结构,如下图所示。
?
P C B
各种控制表指针 各种寄存器








(4)UNIX进程结构
? 进程上下文:指进程的用户地址空间内容、寄存器内容及与
进程相关的核心数据结构;包括三部分 "上下文 ":用户级、
寄存器级、系统级
? 用户级上下文:正文段即代码 (text);数据段 (data);栈段 (user
stack):用户态执行时的过程调用;共享存储区 (shared
memory)
– 把地址空间的段称为 "区 (region)":进程区表和系统区表(前者索引指
向后者)
? 系统上下文:
– proc结构:总在内存,内容包括阻塞原因;
– user结构:可以调出到外存,进程处于执行状态时才用得着,各种资
源表格;
– 进程区表:从虚拟地址到物理地址的映射;
– 核心栈:核心态执行时的过程调用的栈结构;
(5)UNIX进程状态转换
Not Enough
Memory
Kernal
Running
Ready to Run,
Swapped
Zombie
Ready to Run,
in Memory
Asleep in
Memory
Reschedule
Process
Sleep
Wakeup
Exit
Sleep,
Swapped
Swap Out
Created
Wakeup
Swap In
Enough Memory
Fork
Swap Out
User
Running
Preempted
Return
S
y
s
t
e
m
C
a
l
l
,
I
n
t
e
r
r
u
p
t
Interrupt,
Interrupt Return
Preempt
Return
to User
注意:状态“被抢先”与“
内存就绪”的地位相同,要
等到下一次进程调度时,才
能回到“用户态执行”。
(三)进程控制
(Process Control )
( 1) 内核 (Kernel)
1,CPU对 OS保护模式支持
Intel公司的 80386及更高级的 CPU可以提供程序代码 4
层不同等级的权力,包括有 Ring0-3。 Ring0拥有最高的运
行优先权,它访问所有系统内存和所有的 CPU指令,而
Ring1-3访问权限受到不同限制。 Windows 98/NT为了与基
于 RISC的结构上兼容只使用两个特权级别,Ring0和 Ring3。
2,核心态和用户态
为了防止用户应用程序访问和/或更改重要的操作系
统数据,Windows98/NT,UNIX使用两种处理器访问模式:
核心态和用户态。操作系统代码在核心态下运行,即在
X86处理器 Ring0运行,它有着最高的特权。而用户应用程
序代码在用户态下运行,即在 X86处理器 Ring3中运行。
Protection on the Pentium
Level
内核 -1
用户应用程序(在 Windows98/NT中以用户线程方式出现)
运行用户程序一般代码时,它是在用户态下执行。但当
程序要调用系统服务,例如要调用 OS中负责从磁盘文件
中读取数据的 NT执行体例程时,它就要通过一条专门的
指令 (系统调用 )来完成从用户态切换到核心态,OS根据
该指令及有关参数,执行用户的请求服务。在服务完成
后将处理器模式切换回用户态,并将控制返回用户线程。
因此用户线程有时在核心态下执行,在核心态下执行的
是调用操作系统有关功能模块的代码。
3,原语( Primitive)
原语是一种特殊的广义指令,它的功能是由系统通过
一段不可分割的指令操作来完成,它又称原子操作,原
语在核心态下完成。进程控制操作(创建、撤消、阻
塞 …… )大都为原语操作。
内核
4,内核功能
内核是计算机硬件上的第一层扩充软件,它是 OS中关键
部分,它是管理控制中心。内核在核心态下运行,常驻内
存,内核通过执行各种原语操作来实现各种控制和管理功
能。
内核为 OS其它模块提供最基本的支撑功能,对中断进行
,必要和有限的, 处理,时钟管理和原语操作。同时完成
进程(处理器)、存储器和设备各种资源基本管理功能。
5,内核和裸机构成虚拟机的属性
? 虚拟机没有中断,即进程无需响应中断。
? 虚拟机为每个进程提供一台虚拟机。
? 虚拟机为每个进程和用户提供功能强大的指令系统,它包
括机器指令和原语。
操作系统代码的执行
? OS和进程的关系:
– OS不作为进程地址空间的一部分:传统方法。
– OS作为进程地址空间的一部分:如 UNIX
– OS功能分别在核心和系统服务进程中,只有 OS
核心作为进程地址空间的一部分:如 Windows
NT
通常,OS核心不是一个进程,其执行不被调度。
(2)进程状态的细化
1.,挂起,,, 激活, 操作的引入
? 系统管理员有时需要暂仃某个进程,以便排除系统故障或暂
时减轻系统负荷,用户有时也希望暂仃自己的进程以便检查自
己作业的中间结果。这就希望系统提供, 挂起, 操作,暂仃进
程运行,同是也要提供, 激活, 的操作,恢复被挂起的进程。
由于被挂起前进程的状态有三种,挂起后的进程就分为二种状
态:静止就绪态和静止阻塞态(有的称挂起就绪态和挂起阻塞
态)。挂起前的进程就绪态和阻塞态也改为活动就绪态和活动
阻塞态。
? 当进程处于运行态和活动就绪态时,执行挂起操作,进程状态
转换为静止就绪态。当进程处于活动阻塞态时,执行挂起操作,
进程状态转换为静止阻塞态。对被挂起的进程施加, 激活, 操
作,则处于静止就绪的进程转换为活动就绪态,处于静止阻塞
态的进程转换为活动阻塞态。被挂起的处于静止阻塞态的进程
当它等待的事件发生后,它就由静止阻塞态转换为静止就绪态。
具有以上五个状态和新增, 挂起,,, 激活, 两个操作的进程
状态图见下图所示。
2,五个状态进程状态图
撤消








活动
阻塞


静止
阻塞
创建
阻塞
唤醒挂起
激活
撤消
撤消
撤消
进程调度
时间片到
(3)进程控制原语创建原语 (Create)
一个进程可借助创建原语来创建一个新进程,该
新进程是它的子进程,创建一个进程主要是为新进
程创建一个 PCB。创建原语首先从系统的 PCB表中索
取一个空白的 PCB表目,并获得其内部标识,然后将
调用进程提供的参数:如外部名、正文段、数据段
的首址、大小、所需资源、优先级等填入这张空白
PCB表目中。并设置新进程状态为活动/静止就绪态,
并把该 PCB插入到就绪队列 RQ中,就可进入系统并发
执行。
撤消原语( Destroy) / 终止( Termination)
对于树型层次结构的进程系统撤消原语采用的策略
是由父进程发出,撤消它的一个子进程及该子进程
所有的子孙进程,被撤消进程的所有资源(主存、
I/O资源,PCB表目)全部释放出来归还系统,并将
它们从所有的队列中移去。如撤消的进程正在运行,
则要调用进程调度程序将处理器分给其它进程。
进程控制原语 -1
阻塞原语( block)
当前进程因请求某事件而不能执行时(例如请求 I/ O
而等待 I/ O完成时),该进程将调用阻塞原语阻塞自己,
暂时放弃处理机。进程阻塞是进程自身的主动行为。阻
塞过程首先立即仃止原来程序的执行,把 PCB中的现行
状态由运行态改为活动阻塞态,并将 PCB插入到等待某
事件的阻塞队列中,最后调用进程调度程序进行处理机
的重新分配。
唤醒原语( wakeup)
当被阻塞的进程所期待的事件发生时(例如 I/ O完成
时),则有关进程和过程(例如 I/ O设备处理程序或释
放资源的进程等)调用 wakeup原语,将阻塞的进程唤醒,
将等待该事件的进程从阻塞队列移出,插入到就绪队列
中,将该进程的 PCB中现行状态,如是活动阻塞态改为
活动就绪态,如是静止阻塞态改为静止就绪态。
进程控制原语 -2
挂起原语( suspend)
调用挂起原语的进程只能挂起它自己或它的子孙,而
不能挂起别的族系的进程。挂起原语的执行过程是:检
查要挂起进程 PCB的现行状态,若正处于活动就绪态,
便将它改为静止就绪态;如是活动阻塞态则改为静止阻
塞态。如是运行态,则将它改为静止就绪态,并调用进
程调度程序重新分配处理机。为了方便用户或父进程考
察该进程的运行情况,需把该进程的 PCB复制到内存指
定区域。
激活原语( active)
用户进程或父进程通过调用激活原语将被挂起的进程
激活。激活原语执行过程是:检查被挂起进程 PCB中的
现行状态,若处于静止就绪态,则将它改为活动就绪态,
若处于静止阻塞态,则将它改为活动阻塞态。 (解 )
(4)讨论
1,执行原语的进程和原语操作的进程间的关系
原语 执行原语的进程 原语操作的进程
创建 父 子
撤消 父 子、孙
阻塞 自己 自己
唤醒 其它 它
挂起 父 自己或子、孙
激活 父 子、孙
2,抢占式调度
假如采用抢占式调度策略,则每当有新进程进入就绪队列时,
例如执行唤醒原语,被唤醒进程从活动阻塞态转为活动就绪
态时,或者执行激活原语,被激活进程从静止就绪态转为活
动就绪态时,应检查是否要进行重新调度。即由调度程序将
激活的进程(或唤醒的进程)与当前运行进程进行优先级比
较,如果被激活的进程的优先级更高,则剥夺当前进程的运
行,把处理机分配给刚激活的进程,否则就不必重新调度。
(四) 线程 (Threaded)概念
( 1)线程的引入
作为并发执行的进程具有二个基本的属性:进程既是
一个拥有资源的独立单位,它可独立分配虚地址空间、主
存和其它,又是一个可独立调度和分派的基本单位。这二
个基本属性使进程成为并发执行的基本单位。在一些 OS中,
象大多数 UNIX系统等,进程同时具有这二个属性。而另一
些 OS中,象 WindowsNT,Solaris,OS/ 2,Mac OS等,这
二个属性由 OS独立处理。为了区分二个属性,资源拥有
单元称为进程(或任务),调度的单位称为线程、又称轻
进程( light weight process)。线程只拥有一点在运行
中必不可省的资源(程序计数器、一组寄存器和栈),但
它可与同属一个进程的其它线程共享进程拥有的全部资源。
线程定义为进程内一个执行单元或一个可调度实体。
( 2)多线程 (Multithreading)? 多线程是 OS在一个进程内支持多个线程的能力。
进程
控制块
PCB
用户地
址空间
线 程
控制块
TCB
用户栈
核心栈
线程
控制块
TCB
用户栈
核心栈
线程
控制块
TCB
用户栈
核心栈
多线程进程模块
线程 A 线 程 B 线 程 C
( 2)多线程 (Multithreading)? 多线程是 OS在一个进程内支持多个线程的能力。
多线程进程模块
线程 A 线 程 B 线 程 C进程
控制块
PCB
用户地
址空间
线 程
控制块
TCB
用户栈
核心栈
线程
控制块
TCB
用户栈
核心栈
线程
控制块
TCB
用户栈
核心栈
Single Threaded and Multithreaded
Process Models
User
Stack
Kernel
StackUserAddress
Space
Process
Control
Block
Single-Threaded
Process Model
User
Stack
Thread
Control
Block
Kernel
Stack
Thread
Multithreaded Process Model
User
Address
Space
Process
Control
Block
Thread
Control
Block
User
Stack
Kernel
Stack
Thread
Thread
Control
Block
User
Stack
Kernel
Stack
Thread
多线程 -1? 一个进程定义为保护的单元和资源分配的单元,与一个进
程有关的是:
保存进程映象的虚地址空间;
对处理器、其它进程,(如进程通信 )、文件和 I/ O资源
受保护的存取。
? 在一个进程内有多个线程,与一个线程有关的是:
一个线程的执行状态(运行、就绪 …… );当不运行时
保存一个线程的内容:一个独立的程序计数器;一个执行
的栈;每个线程的一些局部变量的静态存贮;和这个进程
的其它线程共享对这个进程的存贮器和资源的存取。
(3)线程和进程间关系 (Relationship
Between Threads and Processes)
线程:进程 描 述 实例系统
1, 1 每一个执行的线程是一个拥有自己地址空
间和资源的唯一进程
大多数 U N I X
系统
M, 1 一个进程定义一个地址空间和动态资源所
有,多个线程可能被产生并在该进程内执

W i n d o w s N T
S o l a r i s O S / 2
O S / 3 9 0
M A C H
1, M 一个线程可以从一个进程环境迁移到另一
个进程环境,这允许一个线程在不同的系
统间容易地移动 (在分布式操作系统)
R a ( C l o u d s )
E me r a l d
M, M M, 1 和 1, M 属性的结合 T R I X
(4)线程的分类
? 内核维护进程和线程的上下文信息;
? 线程切换由内核完成;
? 一个线程发起系统调用而阻塞,不会影响其他线程的
运行。
? 时间片分配给线程,所以多线程的进程获得更多 CPU
时间。
依赖于 OS核心,由内核的内部需求进行创建和撤销,
用来执行一个指定的函数。 Windows NT和 OS/2支持内
核线程;
1.核心级(系统级)线程 (kernel-level thread)
2.用户级线程 (user-level thread)
? 用户线程的维护由应用进程完成;
? 内核不了解用户线程的存在;
? 用户线程切换不需要内核特权;
? 用户线程调度算法可针对应用优化;
不依赖于 OS核心,应用进程利用线程库提供创建、同
步、调度和管理线程的函数来控制用户线程。如:数
据库系统 informix,图形处理 Aldus PageMaker。调度
由应用软件内部进行,通常采用非抢先式和更简单的
规则,也无需用户态 /核心态切换,所以速度特别快。
一个线程发起系统调用而阻塞,则整个进程在等待。
时间片分配给进程,多线程则每个线程就慢。
(5)多线程模型 Multithreading Models1.多对一 Many-to-One
Examples, Green threads -- a thread library available
for Solaris 2
2.一对一 One-to-One
Examples,Windows 95/98/NT/2000,OS/2
3.多对多 Many-to-Many
Examples,Solaris 2, Windows NT/2000 with the
ThreadFiber package,IRIX,HP-UX,Tru64
UNIX
多对一模型
一对一模型
多对多模型
( 6) WindowsNT/2000的基元成分 ――
对象 (object)、进程 (process)、线程
(Thread)
对象、进程、线程是 WindowsNT三个基元成份,它们
之间有互相交叉的关系。
? 对象 是一个抽象的数据结构,在 WindowsNT中用以表示广义的
所有资源。它是构成 OS的三个基元成份中非活动的成份,对
象是数据和有关操作的封装体,它包装数据、数据的属性以
及可以施加于数据的操作等三个成份。事物抽取其共性可以
划分为类。实际上具有相同特性的对象也可归为一个对象类,
在软件设计中定义了对象类(称为类 Class),而对象则是对
象类一个具体实现的示例。对象作为抽象数据而封装在其内
部的操作函数所提供的操作也给人活动成份的感觉,但是从
操作系统这一角度来认识,对象是构成操作系统的非活动成
份。而进程和线程则是构成 OS的两个活动成份。
WindowsNT/2000的基元成分
―― 对象、进程、线程 -1? WindowsNT中 进程 被定义为表示 OS所要做的工作,是 OS用于组织其必须完成诸工作的一种手段。 NT中的进程由一个可执行
的程序、一个私用的虚地址空间、系统资源和至少一个执行
线程等四部分组成
? NT的进程概念与传统 OS进程概念有所不同,NT进程是作为对
象来实现,因此从广义角度来说,进程也是共享的资源(多
个用户进程可共享服务器进程提供的服务)。 NT定义了一个
进程对象类,进程的对象类的对象体和所包含的属性定义了
进程对象的数据及其属性和施加其上的操作(服务) (进程对
象体属性见下页),但描述进程组成的两个主要部分 ―― 进
程地址空间和局限于进程的对象表,不包含在属性表中,因
为它是附属的、不可见的。 NT进程要求一个独特的组成成分
―― 至少一个执行线程,这在传统 OS中是没有的。 NT进程的
组成中没有进程控制块,有关进程的信息在进程对象的对象
体中以及局限于进程的对象表中。
Windows NT Process Object
Attributes
Process ID
Security Descriptor
Base priority
Default processor affinity(亲合关系 )
Quota limits(配额 )
Execution time
I/O counters
VM operation counters
Exception/debugging ports
Exit status
NT进程结构
P r o ces s
A cces s T oken
H andl e 1
H andl e 2
H andl e 3
O bj ect T abl e
Thread A
F i l e B
Sect i on C
V i r t ual A d dr es s Spa ce D es cr i pt i on
WindowsNT/2000的基元成分
―― 对象、进程、线程 -2? NT的 线程 是进程内的一个执行单元,是进程内的
一个可调度实体。一个线程是由唯一的标识符客
户 ID、描述处理器状态的一组状态寄存器的内容、
用户栈和核心栈、一个私用存贮器等四部分组成,
线程也是作为对象来实现,线程对象体属性见下
页。每个进程创建时只有一个线程,需要时这个
线程创建其它线程。线性是进程的一个组成部分,
一个 NT进程可以有多个线程在其地址空间内执行。
资源分配的单位是进程,调度和执行的基本单位
是线程。
Windows NT Thread Object
Attributes
Thread ID
Thread context
Dynamic priority
Base priority
Thread processor affinity
Thread execution time
Alert status
Suspension count
Impersonation token
Termination port
Thread exit status
? 就绪状态 (Ready),进程已获得除处理机外的所需资源,等待
执行。
? 备用状态 (Standby),特定处理器的执行对象,系统中每个处
理器上只能有一个处于备用状态的线程。
? 运行状态 (Running),完成描述表切换,线程进入运行状态,
直到内核抢先、时间片用完、线程终止或进行等待状态。
? 等待状态 (Waiting),线程等待对象句柄,以同步它的执行。
等待结束时,根据优先级进入运行、就绪状态。
? 转换状态 (Transition),线程在准备执行而其内核堆栈处于外
存时,线程进入转换状态;当其内核堆栈调回内存,线程进
入就绪状态。
? 终止状态 (Terminated),线程执行完就进入终止状态;如执行
体有一指向线程对象的指针,可将线程对象重新初始化,并
再次使用。
? 初始化状态 (Initialized),线程创建过程中的线程状态;
Windows NT线程
运行 终止就绪
等待
描述表
切换
抢先或
时间片结束
等待对象句柄
执行完成
初始化
转换
备用
选择执行 抢先
放入
就绪队列
等待完成
等待完成
换出的
内核堆栈
换入的
内核堆栈
重新初始化
创建和初始化
线程对象
Windows NT的线程状态
Windows 2000线程状态
R e sou r c e
A vail ab le
U n b loc k /Resu me
R e sou r c e A vail ab le
U n b loc k
R e sou r c e N ot A vail ab le
Bloc k /
S u sp e n d
Ter minate
S w itc h
P ic k to
Run
P r e e mpt e d
Trans itio n Waiti n g Ter minated
N ot R unn able
R unn able
Ready
St and by
Run ni ng
Windows NT的线程状态
NT线程的有关 API
? CreateThread()函数在调用进程的地址空间上创
建一个线程,以执行指定的函数;返回值为所
创建线程的句柄。
? ExitThread()函数用于结束本线程。
? SuspendThread()函数用于挂起指定的线程。
? ResumeThread()函数递减指定线程的挂起计数,
挂起计数为 0时,线程恢复执行。
( 7)引入线程的好处( Benefits of
Threads)
线程的关键好处是从性能应用中得到的,在一个存在的进
程中产生(或终止)一个线程比产生(或终止)一个进程
化费少得多的时间。类似地,在同一进程内二个线程间切
换时间也要比二个进程切换时间小得多。因此假如一个应
用或函数作为一组相关执行单元的应用,那末采用一组线
程的集合比采用分开进程的集合要有效得多。
? 线程应用的例子是线程作为局部网上文件服务器。不
同用户的文件请求使用的环境资源相同。当一个新的文件
请求进入时,文件管理程序产生一个新的线程。因为一个
服务器将处理许多文件请求,许多线程将在短时间内产生
和撤消。假如服务器是多处理器,那末在同样进程内多个
线程能在不同处理机上同时执行,在单处理机上线程结构
同样有效,它使逻辑上不同函数级的程序结构简单化。